안전하지 않은 X.509 TrustManager

OWASP 카테고리: MASVS-CODE: 코드 품질

개요

X509TrustManager 클래스는 원격 서버의 신뢰성을 확인합니다. 이를 위해 서버의 인증서를 확인합니다.

애플리케이션이 통신하는 서버의 신뢰성을 제대로 확인하지 않는다면 Android 애플리케이션에서 X509TrustManager가 안전하지 않게 구현된 것입니다. 이렇게 하면 공격자가 합법적인 서버를 가장하여 애플리케이션이 민감한 정보를 전송하도록 유도할 수 있습니다.

이 취약점은 X509TrustManager 클래스를 사용하면 Java 및 Android에서 서버 인증을 완전히 재정의할 수 있기 때문에 발생합니다. X509TrustManager 클래스에는 두 가지 관심 함수인 checkServerTrusted()getAcceptedIssuers()가 있습니다. 이러한 함수 호출은 모든 X.509 인증서를 신뢰하도록 구성할 수 있습니다. 맞춤 유효성 검사 로직은 버그가 있거나 불완전할 수 있으며 예기치 않은 연결을 허용할 수 있습니다. 이러한 모든 사례에서 클래스의 목적은 무효화되었고 X509TrustManager 출력을 기반으로 설정된 네트워크 연결은 안전하지 않습니다.

영향

X509TrustManager가 안전하지 않게 구현되는 경우 취약점이 발생하여 피해를 받는 애플리케이션의 네트워크 트래픽에 MitM(중간자) 공격을 실행하는 데 사용될 수 있습니다. 이렇게 안전하지 않은 코드가 트리거되면 원격 또는 로컬에서 네트워크 공격자가 사용자의 애플리케이션 네트워크 데이터를 손상시키는 방식으로 악용될 수 있습니다. 의도치 않게 노출된 네트워크 트래픽의 콘텐츠(PII, 개인 정보, 민감한 세션 값, 서비스 사용자 인증 정보 등)가 무엇인지에 따라 발생할 피해가 좌우됩니다.

완화 조치

맞춤 TLS/SSL 인증서 유효성 검사 코드를 사용하거나 구현하는 대신 NetworkSecurityConfig.xml 기능을 사용하여 모든 프로덕션, 테스트, 디버깅, 개발 단계 연결이 올바르게 처리되도록 하는 것이 좋습니다. 테스트 및 디버그 빌드에 자체 서명 인증서를 사용해야 하는 경우 맞춤 X509TrustManager를 구현하는 대신 NetworkSecurityConfig를 사용하는 것이 좋습니다.

리소스