OWASP 카테고리: MASVS-CODE: 코드 품질
개요
X509TrustManager
클래스는 원격 서버의 신뢰성을 확인합니다. 이를 위해 서버의 인증서를 확인합니다.
애플리케이션이 통신하는 서버의 신뢰성을 제대로 확인하지 않는다면 Android 애플리케이션에서 X509TrustManager
가 안전하지 않게 구현된 것입니다. 이렇게 하면 공격자가 합법적인 서버를 가장하여 애플리케이션이 민감한 정보를 전송하도록 유도할 수 있습니다.
이 취약점은 X509TrustManager
클래스를 사용하면 Java 및 Android에서 서버 인증을 완전히 재정의할 수 있기 때문에 발생합니다. X509TrustManager
클래스에는 두 가지 관심 함수인 checkServerTrusted()
와 getAcceptedIssuers()
가 있습니다. 이러한 함수 호출은 모든 X.509 인증서를 신뢰하도록 구성할 수 있습니다. 맞춤 유효성 검사 로직은 버그가 있거나 불완전할 수 있으며 예기치 않은 연결을 허용할 수 있습니다. 이러한 모든 사례에서 클래스의 목적은 무효화되었고 X509TrustManager
출력을 기반으로 설정된 네트워크 연결은 안전하지 않습니다.
영향
X509TrustManager
가 안전하지 않게 구현되는 경우 취약점이 발생하여 피해를 받는 애플리케이션의 네트워크 트래픽에 MitM(중간자) 공격을 실행하는 데 사용될 수 있습니다. 이렇게 안전하지 않은 코드가 트리거되면 원격 또는 로컬에서 네트워크 공격자가 사용자의 애플리케이션 네트워크 데이터를 손상시키는 방식으로 악용될 수 있습니다. 의도치 않게 노출된 네트워크 트래픽의 콘텐츠(PII, 개인 정보, 민감한 세션 값, 서비스 사용자 인증 정보 등)가 무엇인지에 따라 발생할 피해가 좌우됩니다.
완화 조치
맞춤 TLS/SSL 인증서 유효성 검사 코드를 사용하거나 구현하는 대신 NetworkSecurityConfig.xml 기능을 사용하여 모든 프로덕션, 테스트, 디버깅, 개발 단계 연결이 올바르게 처리되도록 하는 것이 좋습니다. 테스트 및 디버그 빌드에 자체 서명 인증서를 사용해야 하는 경우 맞춤 X509TrustManager
를 구현하는 대신 NetworkSecurityConfig를 사용하는 것이 좋습니다.