Categoria OWASP: MASVS-CODE: Qualità del codice
Panoramica
L'implementazione di HostnameVerifier
è responsabile della verifica che il nome host nel certificato del server corrisponda al nome host del server a cui il client sta tentando di connettersi.
Un'implementazione non sicura di HostnameVerifier in un'applicazione Android è un'implementazione che non verifica correttamente il nome host del server con cui l'applicazione è in comunicazione. In questo modo, un malintenzionato può assumere l'identità di un server legittimo e indurre l'applicazione a inviare dati sensibili.
Questa vulnerabilità esiste perché la classe HostnameVerifier
ha chiamate di funzione che possono saltare la convalida del nome host del certificato X.509 e, al contrario, verificare solo l'hash del certificato. Un'idea sbagliata comune è che la funzione
SSLSession#isValid
esegui un'operazione correlata alla sicurezza, quando
in realtà il suo scopo è solo verificare se una sessione è valida e disponibile per essere ripresa o se è possibile partecipare. Nessuna di queste operazioni convalida la sicurezza di una sessione. La classe HostnameVerifier è stata sostituita da NetworkSecurityConfig.
Impatto
Implementazioni non sicure di HostnameVerifier possono portare a vulnerabilità che possono essere utilizzate per eseguire attacchi man-in-the-middle (MitM) 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 malintenzionati della rete (da remoto o localmente) se questo codice viene attivato. L'impatto dipende dai contenuti del traffico di rete esposti inavvertitamente (PII, informazioni private, valori di sessione sensibili, credenziali di servizio e così via).
Mitigazioni
Utilizza NetworkSecurityConfig.xml per assicurarti che tutte le connessioni di produzione, test, debug e fase di sviluppo vengano gestite correttamente anziché utilizzare o implementare il codice di convalida dei certificati TLS/SSL personalizzati.
Risorse
- Documentazione sulla configurazione della sicurezza della rete
- Questo controllo cerca implementazioni di HostnameVerifier il cui metodo verify restituisce sempre true (quindi qualsiasi nome host è attendibile)
- Documentazione per gli sviluppatori relativa alla classe HostnameVerifier
- Classe AllowAllHostnameVerifierDetector in Android