XXE-injectie

XXE-injectie

Een geüpload XML-bestand dat de eigen bestanden van de server leest.

Wat is XXE-injectie?

XXE verandert een XML-parser in een primitief voor het lezen van bestanden en het vervalsen van verzoeken. De aanvaller declareert een SYSTEM-entiteit in een DOCTYPE, en de parser inline een lokaal bestand, of het antwoord van een interne URL, voordat uw code het document ziet. Dat maakt het eerder een parserconfiguratiefout dan een invoervormfout. U wijst een upload van een inkooporder naar file:///etc/passwd en leest deze terug in het herhaalde leveranciersveld. Vervolgens repareert u libxmljs.parseXml(..., { noent: true }) : wijs DOCTYPE- en entiteitsdeclaraties af, en parseer terwijl de resolutie van externe entiteiten en DTD's uitgeschakeld is.

Wat je leert in XXE-injectie

XXE-injectie — Trainingsstappen

  1. Zoek de intakefunctie

    Met Brackwell Logistics kan elke geregistreerde leverancier een inkooporder indienen door deze als XML-bestand te uploaden. Het formulier neemt het document, parseert het op de servers van Brackwell en leest de leverancier en het totaal terug. Bob opent de functie om te zien hoe deze zich gedraagt ​​voordat hij deze aanraakt.

  2. Waar het parseren plaatsvindt

    Eén regel op die pagina is de hele reden waarom Bob geïnteresseerd is.

  3. Upload een normale bestelling

    Kijk eerst hoe de functie zich normaal gedraagt. Bob voegt een gewone inkooporder toe en verzendt deze. Het netwerkpaneel van de browser registreert het verzoek en het antwoord van de server, precies wat een ontwikkelaar ziet in DevTools.

  4. Wat de parser herhaalde

    De bestelling werd netjes geparseerd. Eén detail in het antwoord vertelt Bob hoe hij het moet aanvallen.

  5. Begin met een normaal bestand

    Bob opent de gewone inkooporder in zijn editor. Op dit moment is het precies hoe het eruit ziet: een leverancier en een totaal, duidelijke data. Met XML kan een document een externe entiteit declareren, een benoemde tijdelijke aanduiding waarvan de waarde de parser ergens anders vandaan haalt. Bob staat op het punt er een toe te voegen.

  6. Bewapen het bestand

    Bob voegt een DOCTYPE toe dat een externe entiteit declareert die naar een bestand op schijf verwijst, en wijst vervolgens het leveranciersveld naar die entiteit. Het bestand wordt nog steeds geparseerd als een inkooporder. Hij begint met het bestand dat elke Linux-box heeft, om te bewijzen dat de parser de referentie überhaupt volgt.

  7. De entiteit

    Er waren slechts twee regels nodig.

  8. Upload het gemaakte bestand

    Bob dient zijn vervaardigde bestand in via dezelfde intakefunctie. Voor de browser is het gewoon weer een upload van een inkooporder.

  9. Het bestand komt terug

    Het antwoord is geen leveranciersnaam. Het is het wachtwoordbestand van de server, dat van de schijf wordt gelezen en rechtstreeks wordt teruggestuurd via de normale uitvoer van de upload.

  10. Kennis check

    Je hebt zojuist een upload van een inkooporder gezien en de bestanden van de server gelezen. Leg vast waarom.

Dekking van beveiligingsframeworks

OWASP Top 10

  • A02:2025 Security Misconfiguration
  • A05:2021 Security Misconfiguration

CWE

  • CWE-611 Improper Restriction of XML External Entity Reference
  • CWE-918 Server-Side Request Forgery (SSRF)

CIS Controls

  • CIS 16 Application Software Security

NIST CSF

  • PR.AT-02 Individuals in specialized roles are provided with awareness and training so that they possess the knowledge and skills to perform relevant tasks with cybersecurity risks in mind
  • PR.PS Platform Security