Kerentanan suntikan entiti luaran XML ialah apa yang sering kita panggil kerentanan XXE. XML ialah format penghantaran data yang digunakan secara meluas, dan banyak aplikasi mengandungi kod untuk memproses data XML Secara lalai, banyak pemproses XML yang lapuk atau tidak dikonfigurasikan dengan betul akan merujuk kepada entiti luaran.
Jika penyerang boleh memuat naik atau menambah kandungan berniat jahat pada dokumen XML, melalui kod yang terdedah, kebergantungan atau penyepaduan, mereka boleh menyerang pemproses XML yang cacat. Kejadian kelemahan XXE tidak ada kaitan dengan bahasa pembangunan Selagi data xml dihuraikan dalam aplikasi dan data dikawal oleh pengguna, aplikasi mungkin terdedah kepada serangan XXE. Artikel ini mengambil program java sebagai contoh untuk memperkenalkan punca dan pembaikan kelemahan XXE. Untuk butiran tentang kerentanan XXE, sila lihat CWE-611: Sekatan Tidak Wajar bagi Rujukan Entiti Luar XML ('XXE')(http://cwe.mitre.org/data/definitions/611.html).
Kerentanan XXE boleh digunakan untuk mengekstrak data, melaksanakan permintaan pelayan jauh, mengimbas sistem dalaman, melakukan serangan penafian perkhidmatan dan serangan lain . Kesan perniagaan bergantung terutamanya pada perujuk yang terjejas dan keperluan perlindungan data.
Sejak 2018, sebanyak 92 maklumat kerentanan yang berkaitan dengannya telah dikeluarkan dalam CVE. Beberapa CVE adalah seperti berikut:
CVE-2018-8027 | Apache Camel 2.20.0 到 2.20.3 和2.21.0 Core 在 XSD 验证处理器中存在 XXE 漏洞。 |
---|---|
CVE-2018-13439 | 微信支付 Java SDK 中的 WXPayUtil 类中存在XXE漏洞。 |
CVE-2018-1000548 | 在版本号小于 14.3 的 Umlet 中,在文件解析中存在XML外部实体注入漏洞,可能导致机密数据泄露、拒绝服务、服务器端请求伪造。此攻击可以通过特制的 UXF 文件进行攻击。 |
CVE-2018-1364 |
IBM Content Bavigator 2.0 和 3.0 版本中在处理XML数据时,易受XML外部实体(XXE)攻击。远程攻击者可以利用此漏洞暴露敏感信息或占用内存资源。 |
Bahagian ini menggunakan sumber kod sampel untuk membayar SDK Java sumber terbuka ( https:// /pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1), nama fail sumber: WXPayUtil.java, laluan fail: java-sdk-v3srcmainjavacomgithubwxpaysdk.
Dalam kod di atas, anda boleh melihat bahawa data dihantar masuk melalui parameter formal xmlToMap pada baris 25. Data tidak ditapis dalam apa jua cara dan XML pemproses tidak mempunyai tetapan keselamatan. Data dihuraikan pada baris 32. Dalam senario sebenar, parameter strXML
juga dikawal oleh penyerang, jadi penyerang boleh membina strXML
berniat jahat untuk menjalankan serangan XXE.
Gunakan 360 Code Guard untuk mengesan kod sampel di atas, dan anda boleh mengesan kecacatan "suntikan entiti luaran XML berisiko" pada baris 32 fail. Seperti yang ditunjukkan dalam Rajah 1:
Rajah 1 Mengesan suntikan entiti luaran XML berisiko
Baris 28 dalam kod pembaikan di atas menggunakan kelas alat xml WXPayXmlUtil untuk menjana pemproses xml yang selamat. Perkara yang paling kritikal dalam kelas WXPayXmlUtil ialah baris 16, yang menggunakan setFeature untuk melumpuhkan sepenuhnya DTDS dalam pemproses xml yang dihasilkan. Seperti yang dapat dilihat dari Rajah 2, 360 Code Guard tidak mengesan kecacatan pada kod yang telah dibaiki.
Rajah 2 Contoh pembaikan kelemahan XXE
Biasa. Kaedah mengelak:
1 Gunakan format data ringkas (seperti JSON) sebanyak mungkin untuk mengelak daripada membuat siri data sensitif
2 Semua pemproses dan perpustakaan XML yang digunakan oleh sistem pengendalian asas. Pada masa yang sama, kemas kini SOAP kepada versi 1.2 atau lebih tinggi melalui pengesanan kebergantungan; 'XXE Prevention'》(https://www.owasp.org/index.php/XML_External_Entity_(XXE)_Prevention_Cheat_Sheet)
Kod berikut ialah contoh menghalang kelemahan XXE apabila menggunakan DocumentBuilderFactory untuk menghuraikan xml dalam aplikasi java :
4. Pengesahan input: Gunakan senarai putih pada bahagian pelayan untuk pengesahan dan penapisan input untuk menghalang data berniat jahat daripada muncul dalam dokumen XML, pengepala atau nod.
5. Sahkan kelemahan XML dan XXE, dan penggunaan alat ASAT boleh menemui kelemahan XXE dengan mengesan kebergantungan dan konfigurasi keselamatan.
Atas ialah kandungan terperinci Contoh analisis kerentanan suntikan entiti luaran XML. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!