XXE: Entity injection aanvallen
Met entity injection aanvallen kunnen applicaties aangevallen worden en datalekken veroorzaken. Dit gebeurd wanneer de XML parser onjuist geconfigureerd is. De meest gevaarlijke variant is XXE, wat staat voor XML eXternal Entity injection. Hierbij kunnen externe resources opgehaald worden, zoals willekeurige bestanden van de server of van andere locaties binnen het netwerk.
Wat is XML
XML (eXtendable Markup Language) is een taal die gebruikt wordt om data gestructureerd op te slaan. Het formaat hiervan is vooraf afgesproken, en is daardoor voor mens en machine te begrijpen. XML wordt op verschillende manieren toegepast, bijvoorbeeld om een browser te vertellen hoe deze pagina is opgebouwd. Een voorbeeld van een XML bestand ziet er als volgt uit:
John Doe
1
Groningen University
Het schoolsysteem kan een mogelijkheid bieden om nieuwe studenten te uploaden middels een XML-bestand. Gebruikers ervan kunnen het bovenstaande voorbeeld opslaan als een studenten.xml bestand. Na het uploaden kan het schoolsysteem het XML-bestand uitlezen en bevragen als een database. Dit zorgt ervoor dat XML zeer geschikt is om gestructureerde data uit te wisselen.
Wat zijn entities
Het XML-formaat ondersteund ook variabelen. Binnen XML wordt zo’n variabele een “entity” genoemd. Stel alle studenten komen van dezelfde school en om te voorkomen dat er 1.000 keer “Cyber University” getypt moet worden, kan het volgende gedaan worden:
John Doe
1
&school;
Bovenaan wordt nu de entity “school” aangemaakt, en deze wordt in het document gebruikt.
External entities
Het kan nog handiger: als de tekst “Cyber University” in een los bestand wordt aangeleverd, zodat het XML-bestand niet meer aangepast hoeft te worden, dan kan de naam ook extern ingeladen worden. Dit kan bijvoorbeeld vanaf een webadres of een lokaal ander bestand. Dit wordt “external entities” genoemd, ook wel bekend als XXE.
 ]>
John Doe
1
&school;
In het bovenstaande voorbeeld wordt de inhoud van het bestand “school.txt” uitgelezen en gebruikt. Dit is uiteraard handig, maar kan ook een beveiligingsprobleem opleveren. Als het XML-bestand namelijk ingeladen wordt op een server, dan kan er op deze manier bestanden uitgelezen worden die op de server staan. Stel, er staat in dezelfde map een bestand genaamd “passwords.config”, dan is het op deze manier mogelijk de wachtwoorden van de server af te halen, of bijvoorbeeld configuratiebestanden zoals het /etc/passwd bestand. Dit zou een enorm datalek kunnen veroorzaken!
Entity expansions
Een ander probleem wat op kan treden is “entity expansion”. Hiermee is het niet zo zeer mogelijk data stelen, maar wel de server onbereikbaar te maken. Een bekend voorbeeld hiervan is de “billion laughs attack”. Deze staat hieronder:
]>
&lol9;
Voorkomen
Er is niet een standaard manier om entity injection en de billion laughs aanval te voorkomen. De meeste XML-parsers kennen wel een instelling die deze mogelijkheid uit kan schakelen. Raadpleeg daarom de handleiding.
Entity injection komt vaak voor in grotere softwarepakketten en maatwerksoftware. Tijdens een pentest controleert CyberAnt hierop.

 
 CyberAnt.com
CyberAnt.com