X509TrustManager non sicuro

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