Ataki XXE są wymierzone w aplikacje obsługujące dokumenty XML. Brak odpowiednich zabezpieczeń w parserach XML oraz niewłaściwa konfiguracja aplikacji mogą prowadzić do poważnych naruszeń bezpieczeństwa, w tym ujawnienia poufnych informacji czy przejęcia kontroli nad systemem. Jak działa atak XXE? Jakie kroki należy wykonać, żeby zabezpieczyć firmową aplikację? Wyjaśniamy.
Czym jest XXE (XML External Entity)? Jak działa ten atak?
XXE (XML External Entity) to luka bezpieczeństwa w aplikacjach przetwarzających dane w formacie XML. Atak, który tę lukę wykorzystuje, polega na wstrzyknięciu złośliwych encji zewnętrznych do dokumentu w tym formacie. Umożliwia to atakującemu uzyskanie nieautoryzowanego dostępu do zasobów lub wykonanie niepożądanych operacji na serwerze.
Encja to mechanizm pozwalający na definiowanie skrótów dla danych, które mogą być wielokrotnie używane w dokumencie. Może to być ciąg znaków lub odwołanie do zasobu zewnętrznego, np. pliku lub adresu URL.
Podstawą ataku XXE jest wykorzystanie możliwości definiowania encji w dokumentach XML. Nieprawidłowo skonfigurowany parser XML zezwala na przetwarzanie zewnętrznych encji, w związku z czym atakujący może wprowadzić do dokumentu XML odwołanie do nich, wskazując na poufny plik lub adres URL. Podczas przetwarzania dokumentu parser zastępuje odwołanie treścią wskazanego zasobu.
Ataki XXE można podzielić na kilka kategorii. Choć wszystkie opierają się na wykorzystaniu zewnętrznych encji w dokumentach XML, różnią się sposobem działania, celem i skutkami.
Rodzaje ataków XXE to m.in.:
- Classic XXE – polega na umieszczeniu w dokumencie XML zewnętrznej encji wskazującej na plik systemowy. Parser wstawia zawartość pliku w miejsce encji, umożliwiając jego wyciek.
- Remote File Inclusion – encja wskazuje na zdalny zasób dostępny przez URL. Atakujący może w ten sposób wstrzyknąć dodatkowe złośliwe zasoby lub sterować przebiegiem ataku spoza serwera.
- Server-Side Request Forgery przez XXE – opiera się na zmuszeniu parsera XML do wysyłania żądań HTTP do zasobów zewnętrznych lub wewnętrznych. Umożliwia atakującemu pozyskiwanie danych z usług dostępnych tylko z poziomu infrastruktury lokalnej.
- Blind XXE – dane nie trafiają bezpośrednio do atakującego przez odpowiedź aplikacji, ale są przesyłane do kontrolowanej przez niego lokalizacji. Umożliwia to naruszenie danych w aplikacjach, które nie wysyłają odpowiedzi w dokumentach XML lub stosują filtry wyjściowe.
- Billion Laughs – specyficzna forma ataku XXE, w której zdefiniowane są encje rekurencyjne o wykładniczej strukturze. Każda kolejna encja odnosi się do poprzednich, powodując ogromny wzrost liczby operacji przy parsowaniu. Efektem jest przeciążenie i zatrzymanie działania aplikacji, jak przy klasycznym ataku typu Denial of Service.
Luka XXE jest szczególnie niebezpieczna, ponieważ wykorzystuje funkcjonalności standardu XML, które w parserach zwykle są domyślnie włączone. Wiele aplikacji przetwarza dane w tym formacie bez odpowiednich zabezpieczeń. Ponadto taki atak może być trudny do wykrycia.
Przykłady ataków XXE i ich konsekwencje
Luki XXE zostały ujawnione m.in. w systemie pocztowym Yahoo, interfejsie API Secure Payments firmy PayPal czy systemie płatności firmy Uber. Pozwalały na zdobywanie przez cyberprzestępców poufnych informacji, takich jak dane płatności czy wiadomości e-mail. Dwie pierwsze podatności zostały wykryte przez osoby zajmujące się ich poszukiwaniem w 2015 roku, a trzecia w 2016 roku. Z łatwością można także wskazać przykłady XXE znacznie mniej odległe w czasie.
W marcu 2023 roku ujawniono podatność XXE w parserze plików DMG oprogramowania antywirusowego ClamAV, oznaczoną jako CVE-2023-20052, która umożliwiała dostęp do wrażliwych danych oraz wykonanie złośliwego kodu.
W 2025 roku natomiast odkryto szereg podatności XXE w oprogramowaniu SysAid, które służy do zarządzania usługami IT i helpdeskiem. Luki mogły zostać wykorzystane przez atakujących do uzyskania dostępu do lokalnych plików zawierających poufne informacje oraz do przeprowadzania ataków DoS.
Jakie aplikacje są najbardziej narażone na ataki XXE?
Na ataki XXE narażone te aplikacje, które przetwarzają dane w formacie XML bez odpowiedniego zabezpieczenia parsera. Szczególnie zagrożone są systemy wykorzystujące protokół komunikacyjny SOAP, który domyślnie obsługuje zewnętrzne encje. Podatne są również rozwiązania oparte na popularnym standardzie jednokrotnego logowania SAML.
Ryzyko dotyczy także aplikacji umożliwiających import plików XML, np. konfigurowanych lub eksportowanych z innych systemów. W sytuacji, gdy dane pochodzą od użytkowników lub z niezaufanych źródeł, istnieje ryzyko wstrzyknięcia złośliwej encji.
Jak zabezpieczyć aplikacje przed atakami XXE?
Skuteczne zabezpieczenie aplikacji przed atakami XXE wymaga wyeliminowania możliwości przetwarzania zewnętrznych encji przez parser XML. Najważniejszym krokiem jest wyłączenie obsługi DTD (Document Type Definition) oraz zewnętrznych encji w konfiguracji parsera. To najprostszy i najskuteczniejszy sposób przeciwdziałania atakom XXE.
Kolejnym krokiem jest walidacja oraz sanityzacja danych wejściowych. Aplikacja powinna sprawdzać strukturę dokumentów XML przy użyciu schematów XSD i usuwać wszelkie nietypowe konstrukcje, które mogą świadczyć o próbie wstrzyknięcia złośliwego kodu.
Ważne jest również korzystanie z bezpiecznych bibliotek XML, które domyślnie nie obsługują zewnętrznych encji lub umożliwiają ich łatwe wyłączenie. Są to m.in. lxml (Python) czy libxml2 (C/C++).
Nie mniej istotne są regularne aktualizacje bibliotek oraz testy podatności. W ramach rozwiązań z zakresu cyberbezpieczeństwa pracownicy Netii realizują precyzyjne skanowanie w poszukiwaniu luk bezpieczeństwa, które mogłyby umożliwić przeprowadzenie takiego ataku, a także przeprowadzają testy, wykorzystując do tego największą na świecie bibliotekę podatności.
Wysoki poziom bezpieczeństwa aplikacji webowych może zapewnić usługa Netia Managed WAF (Web Aplication Firewall), która działa jak filtr chroniący przed nieautoryzowanymi działaniami czy próbami ingerencji w kod źródłowy.
Ostatecznym rozwiązaniem jest rozważenie rezygnacji z XML na rzecz prostszych formatów, takich jak JSON, który nie obsługuje encji.
Formularz kontaktowy
Zostaw swoje dane kontaktowe, a nasz przedstawiciel handlowy
wkrótce skontaktuje się z Tobą
Formularz kontaktowy
Zostaw swoje dane kontaktowe, a nasz przedstawiciel handlowy
wkrótce skontaktuje się z Tobą
Inne formy kontaktu
-
Infolinia dla nowych klientów
(Codziennie 8:00 - 18:00) +48 22 35 81 550 -
Obsługa klienta i wsparcie techniczne
(Dostępne 24/7) 801 801 999
biznes@netia.pl -
Adres korespondencyjny Netia S.A.
skr. pocztowa nr 597
40-950 Katowice S105