Z poniższego video dowiesz się, czym jest podatność XXE, jak powstaje i czym grozi aplikacji, która jest na nią podatna. W filmie pojawiają się także referencje do materiałów na temat obrony i ataku tej podatności, które dla czytelności linkujemy poniżej.
TL;DR
- XML umożliwia porządkowanie danych w hierarchiczną strukturę – jest dialektem składającym się ze znaczników
- XML jest czytelny dla człowieka, ale lepiej w jego przetwarzaniu radzą sobie komputery. Aby przetworzyć dokument XML i pracować dalej na zbiorze danych, które on zawiera, musimy skorzystać z parsera XML.
- XML posiada specjalną funkcjonalność tzw. encje (entities) – działają jak operacja „znajdź i zamień„
- Możemy zdefiniować, że gdziekolwiek w dokumencie XML pojawi się nasza encja, to przy parsowaniu zostanie zamieniona na ciąg znaków, np. znajdź wszystkie encje „&ent;” i zamień na wyraz „ENCJATUBYLA”
- Są też encje zewnętrzne (external entities), których celem jest umożliwienie załączenia do dokumentu XML zawartości z zewnątrz (z sieci, z dysku). Mogą być zdefiniowane tak, że przy parsowaniu każde wystąpienie takiej encji będzie zamienione np. na treść pliku z dysku albo z sieci.
Podatność jest wtedy, gdy:
- Mamy włączoną obsługę encji w naszym parserze XML
- Użytkownik aplikacji może wysyłać XML’e do przetwarzania do tej aplikacji
- Użytkownik może więc stworzyć złośliwy plik XML, powodując, że docelowa aplikacja zacznie rozwiązywać encje i np. ujawni jakieś wrażliwe dane w operacji parsowania
- Np. użytkownik stworzy encję, która podczas przetwarzania zostanie zamieniona na treść pliku /etc/passwd, a wynikowy plik użytkownik będzie mógł pobrać.
Jak się bronić przed XXE?
Główna linia obrony polega na wyłączeniu encji zewnętrznych, i przetwarzaniu deklaracji DTD w ogóle (encje definiowane są właśnie w tej sekcji dokumentu XML).
Dodatkowo polecamy poniższe materiały w tej tematyce:
- Wyłączenie obsługi DTD w konfiguracji parsera
- Każdy parser ma nieco inną konfigurację! Sprawdź, jakiego parseru / biblioteki używa Twoja aplikacja (np. Xalan, Xerces, SimpleXML, LXML itd.)
- OWASP – Zapobieganie atakom XXE
- Podatność XXE w WordPress 5.7.1 (2021) na naszym blogu– jak zmiana nazwy flagi w funkcji parsującej spowodowała wyłączenie ochrony przed XXE
Jak testować / atakować XXE?
Praktycznie zawsze, gry aplikacja webowa przesyła dokumenty XML (co może być wychwycone np. przy użyciu Burp Suite), istnieje ryzyko wystąpienia tej podatności. Warto zapoznać się z poniższymi materiałami:
- Infosec Institute – testowanie XXE od podstaw
- OWASP – spis wielu strategii testowania
- https://github.com/payloadbox/xxe-injection-payload-list Atakowanie – zaawansowane warianty payloadów, w tym OOB XXE
- https://gosecure.github.io/xxe-workshop/ Lab do „samodzielnego montażu”
- GoSecure – Zaawansowane wykorzystanie XXE
- Materiał zaawansowany – wykorzystanie XXE z użyciem lokalnych plików DTD