Alweer de vierde in een reeks van 10 artikelen waarin we de OWASP top-10 ontleden. In tegenstelling tot andere websites doen we dit in oer-Hollands- en simpel Nederlands. Het idee is dat iedereen na het lezen van dit korte artikel weet wat het is. Kortom, nerd-praat in Jip en Janneke taal. Vandaag kijken we naar XML External Entities. Hele mond vol, klopt. Maar wat is dit eigenlijk en waarom staat het 4e in de lijst?
Om dit uit te leggen dienen we te beginnen met een stukje uitleg over ‘XML’. Dit staat voor ‘Extensible Markup Language’. Dit mag u voor het grootste deel weer vergeten, enkel het ‘language’ stukje is belangrijk. XML is namelijk een taal. En deze taal gebruikt elementen en attributen om gegevens te structureren. Laten we dit illustreren met een voorbeeld. Mensen maken al eeuwenlang documenten en hierbij wordt gebruik gemaakt van een opmaak. Deze opmaak definieert de structuur, betekenis en weergave van de informatie. In het geval van computers is opmaak uitgegroeid tot codeopmaak. Hierbij worden codes gebruikt om de structuur, de weergave en, in het geval van XML, de betekenis van gegevens te definiëren. Kortom, XML is een taal die u niet hoeft te kennen en die u eigenlijk ook niet ziet, maar die er voor zorgt dat alles voor u leesbaar en begrijpelijk is. Kortom, het geeft betekenis.
Maar wat zijn XML External Entities (XXE) dan? Nu dat we weten wat XML is kunnen we wat verder in de geschiedenis duiken. Zo is XML een jaar of tien geleden de standaard geworden en sindsdien is, zoals te verwachten was, het gebruik flink toegenomen. Hierdoor is het ook voor de cybercriminelen een stuk interessanter geworden. En een van die kwetsbaarheden die XML met zich meebrengt zijn dus XML External Entities, ofwel XXE.
Helaas heb ik slechts nieuws voor u, want het wordt nog technischer. Het is namelijk mogelijk om in XML via de syntax (in dit geval is de syntax een taalregel) <!ENTITY entity-name SYSTEM “URI/URL”> een eigen identiteit te creëren. Dit kan op twee manieren gedaan worden, via een internal entity in het document zelf. Of door een extern document te importeren via een URL waarin deze definitie staat, een external entity. En dit laatste geval dat is waar de kwetsbaarheid XXE gebruik van maakt.
Bij een typische XXE-aanval wordt op de plaats van de URL een XML bestand meegegeven waarin kwaadwillige code staat. In plaats van nare code kan het echter ook een verwijzing zijn naar een bepaald bestandspad. Dus bijvoorbeeld “c://users//admin/pass.docx” om toegang te krijgen tot bepaalde waardevolle data. Kortom, er zijn nogal wat opties.
Dat ligt er echt maar net aan waar de aanvaller naar op zoek is. Er zijn namelijk vele mogelijkheden om deze kwetsbaarheid te benutten. Enkele algemene gevolgen van XXE-exploitatie zijn:
Dit is waar we u het goede nieuws brengen. Deze kwetsbaarheid doet zich namelijk maar voor op éen specifieke plek. Dit maakt het in theorie heel gemakkelijk om deze dreiging permanent te verwijderen. Hoe dan? Nou door geen XML te gebruiken en over te schakelen naar een simpeler data format, zoals JSON. Maar wat nou als jouw applicatie of web-service vol zit met XML? Dan wordt het een lastiger verhaal. Het enige dat je dan kunt doen is het nemen van stappen ter preventie van een XXE. Denk hierbij aan XML-validatie, zodat niet zomaar ongecontroleerd alle XML geparsed (verwerkt) wordt.
Maakt u veel gebruik van XML voor uw applicatie of web-service en heeft u geen idee hoe het met de veiligheid hiervan gesteld is? Natuurlijk kunt u ook bij Rootsec terecht om dit eens te laten uitpluizen. Wij maken snel voor u inzichtelijk of er kwaadaardige XML-files aanwezig zijn en vertellen u precies wat u kunt doen om deze te verwijderen en om dit in de toekomst te voorkomen. Voor meer informatie verwijs ik u graag naar onze website of naar ons telefoonnummer 036 760 0451.
Automated page speed optimizations for fast site performance