XML External Entities (XXE)

XML External Entities (XXE).jpg

Wat is het en waar komt het voor?

Een jaar of tien geleden is XML de standaard geworden en sindsdien is het gebruik ervan sterk toegenomen. Daarmee is XML tegelijkertijd ook voor kwaadwilligen steeds interessanter geworden. Een van de kwetsbaarheden die XML met zich meebrengt, die deze aanvallers gebruiken, zijn XML External Entities, afgekort XXE.

Zoals voor de meeste bekend is, is het mogelijk om in XML via de syntax <!ENTITY entity-name SYSTEM “URI/URL”> een eigen entiteit te definiëren. Dit kan in het document zelf gedaan worden - een internal entity - of door een extern document via een URI/URL te importeren, waarin deze definitie staat - een external entity. Het laatste geval is waar de kwetsbaarheid XXE gebruik van maakt. Het kan zich dan ook voordoen op elke plek waar dit toegestaan is.

Een typische XXE-aanval geeft op de plaats van de URI/URL een XML bestand mee waarin kwaadwillige code staat, of juist een verwijzing naar iets volledig anders. Denk aan iets als “file:///etc/passwd” om toegang tot privégegevens te kunnen krijgen. Of een URL in de vorm van “https://”192.168.1.1/private”, waarmee via dit IP-adres van de router het bedrijfsnetwerk verkend kan worden.

Wat kunnen de gevolgen zijn?

Zoals zojuist vernoemd, heeft een aanvaller vele mogelijkheden om gebruik te maken van deze kwetsbaarheid in XML. Het zal dan ook erg afhangen van het doel van de aanvaller wat de gevolgen zullen zijn. Enkele mogelijke gevolgen van een XXE exploitatie zijn:

  • Extractie van (gevoelige) gegevens.

  • Blootstelling van de interne structuur van je bedrijf.

  • Een DoS, zoals de Billion Laughs aanval.

  • Legio andere aanvallen, doordat er remote requests gedaan kunnen worden.

Hoe beveilig je je er tegen?

Deze kwetsbaarheid doet zich in tegenstelling tot sommige andere voor op één specifieke plek. Hierdoor is XXE in theorie heel makkelijk te verhelpen, namelijk door simpelweg XML in zijn geheel te vermijden. Gebruik als alternatief een simpeler data format, zoals JSON.

Echter, als XML alom gebruikt wordt in jouw applicatie of web service, dan is bovenstaande oplossing niet of lastig toe te passen. In dat geval kun je als bedrijf logische stappen nemen zoals XML-validatie - zodat niet zomaar ongecontroleerd alle XML geparsed wordt - en het verminderen of zelfs vermijden van serialisatie. Implementeer hiervoor bijvoorbeeld Apache Xerces in je pipeline om dit na een relatief simpele set-up geautomatiseerd te laten doen. Daarnaast kun je een dependency checker zoals Dependency-check-maven implementeren, die kwaadaardige XML files detecteert, zelfs als ze zeer diep nested zijn.

 

Vooruitblik

Het volgende artikel zal over een vrij algemeen fenomeen gaan: Broken Acces Control. Voor de echte hacker is dit een absolute basisvaardigheid. Voor ieder serieus bedrijf zou hiervoor dan ook een absolute basisbeveiliging moeten zijn. In de praktijk blijkt dit echter vaker niet dan wel het geval te zijn. Soms door laksheid, maar vaak door onwetendheid. Want hoe zorg je er als bedrijf nu eigenlijk voor dat niet heel je database direct volledig bloot gesteld wordt doordat de secretaresse een foutje gemaakt heeft? Lees het in het vijfde artikel van mijn cybersecurity reeks.