encyklopedia.space

XML Injection

XML Injection (ang. XML Injection) jest techniką ataku polegającą na wstrzyknięciu złośliwych danych do dokumentu XML przetwarzanego przez aplikację. Celem atakującego jest manipulacja strukturą, treścią lub zachowaniem parsera XML w sposób umożliwiający wyciek danych, wykonanie nieautoryzowanych operacji lub przełamanie zabezpieczeń aplikacji.

Podstawy

Ataki tego typu opierają się na niedostatecznej walidacji danych wejściowych oraz na szczególnych właściwościach parserów XML. Najczęściej wykorzystywane elementy to:

  • Wstawianie dodatkowych elementów lub atrybutów do istniejącego dokumentu XML.
  • Wykorzystanie funkcji XML External Entity (XXE) – pozwalającej na odwoływanie się do zasobów zewnętrznych.
  • Zmiana kolejności lub struktury znaczników, co może prowadzić do nieprawidłowego parsowania.

Rodzaje XML Injection

1. Wstrzyknięcie znaków specjalnych

Najprostsza forma ataku polega na umieszczeniu w danych wejściowych znaków, które mają znaczenie w składni XML (np. <, >, &). Jeśli aplikacja nie podmienia ich na encje, parser może zinterpretować je jako nowe znaczniki.

2. XML External Entity (XXE)

Atak wykorzystujący możliwość definiowania zewnętrznych encji w pliku DTD. Przykład:

<!DOCTYPE root [
  <!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
<root>&xxe;</root>

Po przetworzeniu dokumentu parser może zwrócić zawartość pliku /etc/passwd, umożliwiając wyciek poufnych informacji.

3. Blind XML Injection

Podobny do SQL Injection w trybie „ślepy”. Atakujący nie otrzymuje bezpośredniej odpowiedzi z serwera, lecz obserwuje różnice w zachowaniu aplikacji (czas odpowiedzi, kody statusu HTTP) w celu odgadnięcia struktury XML.

Przykładowe scenariusze

  1. Usługa Web Service przyjmująca zapytania w formacie SOAP nie filtruje znaków < i >. Atakujący wstawia dodatkowy element <admin>true</admin>, który jest później interpretowany jako uprawnienie administratora.
  2. Aplikacja mobilna przesyła konfigurację w XML do serwera. Brak walidacji umożliwia wstrzyknięcie encji <!ENTITY odwołującej się do pliku config.xml na serwerze, co prowadzi do jego wykradzenia.

Detekcja i zabezpieczenia

W walce z XML Injection pomocna jest kombinacja technik:

  • Walidacja schematu – zastosowanie XML Schema (XSD) lub DTD w trybie ograniczonym, aby odrzucać niezgodne dokumenty.
  • Wyłączanie przetwarzania zewnętrznych encji – w konfiguracji parsera (np. EntityResolver w Java) wyłączyć obsługę DTD i XXE.
  • Escapowanie znaków – zamiana znaków specjalnych na encje (&lt;, &gt;, &amp;) przed wstawieniem danych do XML.
  • Filtrowanie białych list – dopuszczanie jedynie określonych znaków i wzorców w danych wejściowych.
  • Testy penetracyjne – regularne skany pod kątem OWASP Top 10, w szczególności Injection.

Powiązane pojęcia

Więcej informacji można znaleźć w następujących artykułach:

Bibliografia

Artykuł opiera się na publicznie dostępnych źródłach oraz wytycznych organizacji OWASP, w tym dokumentacji dotyczącej zabezpieczeń parserów XML.