Kategoria OWASP: MASVS-CODE: Code Quality
Omówienie
Wstrzyknięcie zewnętrznej encji XML (XXE) to atak na aplikacje, które analizują dane wejściowe XML. Atak XXE występuje, gdy niezaufajne dane wejściowe XML z odniesieniem do elementu zewnętrznego są przetwarzane przez słabo skonfigurowany parsujący XML. Ten atak może zostać użyty do etapu wielu incydentów, takich jak odmowa usługi, dostęp do systemu plików czy wydobycie danych.
Wpływ
Gdy aplikacja analizuje dokument XML, może przetworzyć wszystkie definicje typu dokumentu (DTD) zawarte w tym dokumencie. Atakujący może wykorzystać to zachowanie, wstrzykując złośliwy kod w DTD. Ten kod może uzyskać dostęp do części systemu plików urządzenia, które są dostępne tylko dla aplikacji i potencjalnie zawierają dane wrażliwe. Co więcej, ten złośliwy kod może wysyłać żądania z urządzenia, potencjalnie omijając środki ochrony obwodowej.
Jeśli aplikacja rozszerza DTD, może to spowodować wielokrotne odwołania do tych samych elementów, co wyczerpuje zasoby urządzenia i może doprowadzić do odmowy usługi.
Środki zaradcze
Wyłącz serwery DTD
Najbezpieczniejszym sposobem zapobiegania atakom XXE jest całkowite wyłączenie definicji typów dokumentów (enty zewnętrznych). W zależności od używanego parsera metoda może wyglądać podobnie do poniższego przykładu biblioteki XML Pull Parser:
Java
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
Kotlin
val factory = XmlPullParserFactory.newInstance()
factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true)
Wyłączenie DTD chroni też parsownik przed atakami typu DoS. Jeśli nie można całkowicie wyłączyć DTD, użyj deklaracji zewnętrznych encji i zewnętrznych definicji typów dokumentów w sposób odpowiedni dla każdego parsarza.
Ze względu na dużą liczbę dostępnych na rynku silników analizy składni XML sposoby zapobiegania atakom XXE różnią się w zależności od silnika. Więcej informacji znajdziesz w dokumentacji silnika.
Oczyszczanie danych wejściowych
Aplikację należy ponownie skonfigurować tak, aby nie pozwalała użytkownikom na wstrzykiwanie dowolnego kodu we wstępie dokumentu XML. Musi ona zostać zweryfikowana po stronie serwera, ponieważ kontrolę po stronie klienta można obejść.
Użyj innej biblioteki
Jeśli nie można skonfigurować biblioteki lub metody w bezpieczny sposób, należy rozważyć użycie innej. Parsowanie wyodrębniające XML i parsowanie SAX można skonfigurować w bezpieczny sposób, wykluczając DTD i elementy.
Materiały
- OWASP XXE
- Ściągawka OWASP dotycząca zapobiegania atakom XXE
- Konstante XML: FEATURE_SECURE_PROCESSING
- Parser pull XML
- Parser SAX