Categoria OWASP: MASVS-CODE: Code Quality
Panoramica
La classe X509TrustManager
è responsabile della verifica dell'autenticità di un
server remoto. A questo scopo, convalida il certificato del server.
Un'implementazione X509TrustManager
non sicura in un'applicazione Android è un'implementazione che non verifica correttamente l'autenticità del server con cui l'applicazione sta comunicando. In questo modo, un malintenzionato può
fingersi un server legittimo e indurre l'applicazione a inviare dati sensibili
all'aggressore.
La vulnerabilità esiste perché, utilizzando la classe X509TrustManager
,
Java/Android consente l'override completo della verifica del server. La classe
X509TrustManager
ha due funzioni di interesse:
checkServerTrusted()
e getAcceptedIssuers()
. Queste chiamate
di funzione possono essere configurate in modo da considerare attendibili tutti i certificati X.509. Infine, la logica di convalida personalizzata potrebbe essere difettosa o incompleta e consentire connessioni impreviste.
In tutti questi casi, lo scopo della classe è stato negato e la connessione di rete stabilita in base all'output X509TrustManager
non è sicura.
Impatto
Implementazioni non sicure di X509TrustManager possono portare a vulnerabilità che possono essere utilizzate per eseguire attacchi MITM (Man-in-the-Middle) sul traffico di rete dell'applicazione vittima. L'impatto dello sfruttamento di questo codice non sicuro è che i dati di rete dell'applicazione di un utente possono essere compromessi da aggressori di rete (da remoto o localmente) se questo codice viene attivato. L'impatto dipende dal contenuto del traffico di rete esposto inavvertitamente (PII, informazioni private, valori di sessione sensibili, credenziali di servizio e così via).
Mitigazioni
Utilizza la funzionalità NetworkSecurityConfig.xml per assicurarti che tutte le connessioni di produzione, test, debug e sviluppo vengano gestite correttamente anziché utilizzare o implementare codice di convalida dei certificati TLS/SSL personalizzato. Se
è necessario utilizzare un certificato autofirmato per le build di test e debug, valuta la possibilità di
utilizzare NetworkSecurityConfig anziché implementare un X509TrustManager
personalizzato.
Risorse
- Documenti relativi agli avvisi di Google Play
- Documentazione per facilitare la configurazione del file XML di configurazione della sicurezza di rete.
- Documentazione per gli sviluppatori relativa alla classe TrustManager.
- Questo controllo cerca implementazioni di X.509TrustManager i cui metodi checkServerTrusted o checkClientTrusted non fanno nulla (quindi si fidano di qualsiasi catena di certificati).
- Questo controllo cerca implementazioni personalizzate di X.509TrustManager.
- https://cs.android.com/android-studio/platform/tools/base/+/mirror-goog-studio-main:lint/libs/lint-checks/src/main/java/com/android/tools/lint/checks/X509TrustManagerDetector.java