Kategoria OWASP: MASVS-CODE: jakość kodu
Omówienie
Klasa X509TrustManager
odpowiada za weryfikację autentyczności serwera zdalnego. Odbywa się to przez sprawdzenie certyfikatu serwera.
Niezabezpieczona implementacja X509TrustManager
w aplikacji na Androida to implementacja, która nie weryfikuje prawidłowo autentyczności serwera, z którym komunikuje się aplikacja. Może to umożliwić osobie przeprowadzającej atak podszywanie się pod legalny serwer i nakłonienie aplikacji do wysłania do niej danych wrażliwych.
Luka w zabezpieczeniach występuje, ponieważ użycie klasy X509TrustManager
w Java/Android umożliwia całkowite zastąpienie weryfikacji serwera. Klasa X509TrustManager
ma 2 interesujące funkcje: checkServerTrusted()
i getAcceptedIssuers()
. Te wywołania funkcji można skonfigurować tak, aby ufały wszystkim certyfikatom X.509. Na koniec trzeba dodać, że niestandardowa logika weryfikacji może zawierać błędy lub być niekompletna i umożliwiać nieoczekiwane połączenia.
We wszystkich tych przypadkach cel klasy został zanegowany, a połączenie sieciowe nawiązane na podstawie danych wyjściowych X509TrustManager
nie jest bezpieczne.
Wpływ
Potencjalnie niebezpieczne implementacje interfejsu X509TrustManager mogą prowadzić do luk w zabezpieczeniach, które można wykorzystać do przeprowadzania ataków typu „man-in-the-middle” (MITM) na ruch sieciowy z aplikacji ofiary. Jeśli ten niebezpieczny kod zostanie uruchomiony, dane sieciowe aplikacji użytkownika mogą zostać naruszone przez atakujących w sieci (zdalnie lub lokalnie). Wpływ zależy od treści nieumyślnie ujawnionego ruchu sieciowego (informacje umożliwiające identyfikację osoby, informacje prywatne, wartości sesji o charakterze kontrowersyjnym, dane logowania do usług itp.).
Środki ograniczające ryzyko
Używaj funkcji NetworkSecurityConfig.xml, aby mieć pewność, że wszystkie połączenia na etapach produkcji, testowania, debugowania i programowania są prawidłowo obsługiwane, zamiast używać lub wdrażać niestandardowy kod weryfikacji certyfikatów TLS/SSL. Jeśli w przypadku kompilacji testowych i debugowania konieczne jest użycie certyfikatu podpisanego samodzielnie, rozważ użycie NetworkSecurityConfig zamiast implementowania niestandardowego X509TrustManager
.
Materiały
- Dokumenty dotyczące ostrzeżeń w Google Play
- Dokumentacja, która pomoże Ci skonfigurować plik XML konfiguracji zabezpieczeń sieci.
- Dokumentacja dla deweloperów dotycząca klasy TrustManager
- Ten test wyszukuje implementacje X.509TrustManager, których metody checkServerTrusted lub checkClientTrusted nie wykonują żadnych działań (a tym samym ufają każdemu łańcuchowi certyfikatów).
- Ten test sprawdza niestandardowe implementacje interfejsu 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