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: