
Pada artikel ini kami akan menjelaskan apa itu injeksi entitas XML eksternal, jelaskan beberapa contoh umum, jelaskan bagaimana menemukan dan menggunakan berbagai jenis injeksi XXE, dan juga menggeneralisasi cara mencegah serangan dengan bantuan mereka.
Apa itu injeksi entitas XML eksternal?
Menyuntikkan entitas XML eksternal (juga dikenal sebagai XXE) adalah kerentanan keamanan web yang dapat memungkinkan penyerang mengganggu pemrosesan data XML oleh suatu aplikasi. Seringkali memungkinkan penyerang untuk melihat file dalam sistem file server aplikasi dan berinteraksi dengan server atau sistem eksternal yang dapat diakses oleh aplikasi itu sendiri.
Dalam beberapa situasi, penyerang dapat memanfaatkan serangan XXE untuk mengkompromikan server inti atau infrastruktur internal lainnya dengan mengeksploitasi kerentanan XXE untuk melakukan serangan pemalsuan permintaan sisi-server (SSRF).
Bagaimana kerentanan XXE muncul?
Beberapa aplikasi menggunakan format XML untuk mentransfer data antara browser dan server. Aplikasi yang melakukan ini hampir selalu menggunakan pustaka standar atau platform API untuk memproses data XML di server. Kerentanan XXE muncul karena spesifikasi XML berisi berbagai fungsi yang berpotensi berbahaya, dan parser standar mendukung fungsi-fungsi ini, bahkan jika mereka biasanya tidak digunakan oleh aplikasi.
Entitas eksternal XML adalah jenis entitas XML khusus yang nilainya spesifik dimuat dari file DTD di mana mereka ditulis. Entitas eksternal sangat menarik dari sudut pandang keamanan, karena mereka memungkinkan Anda untuk mendefinisikan entitas berdasarkan konten path file atau URL.
Jenis-jenis serangan XXE apa yang ada?
- Menggunakan XXE untuk mengekstrak file, di mana entitas eksternal termasuk konten file ditentukan dan dikembalikan dalam respons aplikasi.
- Menggunakan XXE untuk melakukan serangan SSRF, di mana entitas eksternal ditentukan berdasarkan URL sistem internal.
- Menggunakan ekstraksi buta informasi XXE pada saluran kontrol, di mana data sensitif ditransfer dari server aplikasi ke sistem yang dikendalikan oleh penyerang.
- Menggunakan blind XXE untuk mengembalikan data dari pesan kesalahan ketika penyerang dapat memicu pesan kesalahan yang berisi informasi yang diperlukan.
- Menggunakan XXE untuk mengekstrak file
Untuk melakukan serangan injeksi bentuk XXE, yang mengekstrak file sewenang-wenang dari sistem file server, Anda harus memodifikasi XML yang disajikan dalam salah satu dari dua cara:
- Masukkan (atau modifikasi) elemen DOCTYPE yang mendefinisikan entitas eksternal yang berisi path file.
- Ubah nilai data dalam XML yang dikembalikan dalam respons aplikasi untuk menggunakan entitas eksternal tertentu.
Misalnya, anggap aplikasi belanja memeriksa jumlah stok produk dengan mengirimkan XML berikut ke server:
<?xml version="1.0" encoding="UTF-8"?> <stockCheck><productId>381</productId></stockCheck> XXE, XXE /etc/passwd, XXE: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE foo [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]> <stockCheck><productId>&xxe;</productId></stockCheck>
Struktur XXE ini mendefinisikan entitas eksternal & xxe, yang nilainya adalah konten dari file / etc / passwd, dan menggunakan entitas dengan nilai productId. Ini menyebabkan respons aplikasi untuk memasukkan konten file:
Invalid product ID: root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin bin:x:2:2:bin:/bin:/usr/sbin/nologin ...
Dalam kasus kerentanan nyata XXE, sering kali akan ada sejumlah besar nilai data dalam XML yang dikirimkan, yang mana saja yang dapat digunakan dalam respons aplikasi. Untuk pengujian sistematis kerentanan XXE, sebagai suatu peraturan, perlu untuk memeriksa setiap simpul data dalam XML secara terpisah, menggunakan entitas tertentu dan melihat status respons.
Selain mengekstraksi data sensitif, cara lain untuk menggunakan serangan XXE adalah menggunakannya untuk permintaan sisi server palsu (SSRF).
Ini adalah kerentanan yang berpotensi serius, dengan bantuannya, aplikasi server dapat digunakan untuk mengeksekusi permintaan HTTP ke URL apa pun yang dapat diakses server.
Untuk menggunakan kerentanan XXE untuk melakukan serangan SSRF, Anda harus mendefinisikan entitas XML eksternal menggunakan URL yang ingin Anda akses dan gunakan entitas tertentu dengan nilai data. Jika Anda dapat menggunakan entitas tertentu dengan nilai data yang dikembalikan dalam respons aplikasi, Anda dapat melihat respons dari URL dalam respons aplikasi dan dengan demikian mendapatkan interaksi dua arah dengan sistem server. Jika tidak, Anda hanya dapat melakukan serangan SSRF buta (yang juga dapat memiliki konsekuensi kritis).
Dalam contoh berikut menggunakan XXE, entitas eksternal memaksa server untuk mengeksekusi permintaan HTTP internal ke sistem internal dalam infrastruktur sistem:
<!DOCTYPE foo [ <!ENTITY xxe SYSTEM "http://internal.vulnerable-website.com/"> ]>
Menggunakan XXE untuk melakukan serangan SSRF:
Banyak jenis kerentanan XXE buta. Ini berarti bahwa aplikasi tidak mengembalikan nilai entitas eksternal spesifik apa pun dalam tanggapannya, dan oleh karena itu pencarian langsung file di sisi server tidak mungkin.
Kerentanan buta XXE masih dapat dideteksi dan dieksploitasi, tetapi metode yang lebih maju diperlukan. Terkadang Anda dapat menggunakan metode eksternal untuk mencari kerentanan dan menggunakannya untuk mengekstrak data. Kadang-kadang juga dapat menyebabkan kesalahan parsing XML yang menghasilkan pengungkapan data sensitif dalam pesan kesalahan.
Cari dan gunakan kerentanan buta XXE:
Kemampuan untuk menyerang dengan injeksi XXE jelas dalam banyak kasus, karena lalu lintas HTTP normal aplikasi mencakup permintaan yang berisi data XML. Dalam kasus lain, kemampuan untuk menyerang kurang terlihat. Namun, jika Anda melihat di tempat yang tepat, Anda akan menemukan peluang untuk serangan XXE di kueri yang tidak mengandung XML.
XInclude Attacks
Beberapa aplikasi menerima data yang dikirim oleh klien, memasukkannya di sisi server ke dalam dokumen XML, dan kemudian menguraikannya. Contoh dari ini adalah ketika data klien ditempatkan dalam permintaan backend SOAP, yang kemudian diproses oleh layanan backend SOAP.
Dalam hal ini, Anda tidak dapat menjalankan serangan XXE klasik karena Anda tidak mengendalikan seluruh dokumen XML dan karenanya tidak dapat menentukan atau memodifikasi elemen DOCTYPE. Namun, Anda dapat menggunakan XInclude sebagai gantinya. XInclude adalah bagian dari spesifikasi XML, yang memungkinkan Anda membuat dokumen XML dari dokumen bersarang. Anda dapat menempatkan serangan XInclude pada nilai data apa pun dalam dokumen XML, sehingga serangan itu dapat dilakukan dalam situasi di mana Anda mengelola hanya satu elemen data yang ditempatkan dalam dokumen XML di sisi server.
Untuk melakukan serangan XInclude, Anda harus mereferensikan namespace XInclude dan menentukan path ke file yang ingin Anda libatkan. Sebagai contoh:
<foo xmlns:xi="http://www.w3.org/2001/XInclude"> <xi:include parse="text" href="file:///etc/passwd"/></foo>
Beberapa aplikasi memungkinkan pengguna untuk mengunggah file, yang kemudian diproses di sisi server. Beberapa format file umum menggunakan XML atau mengandung subkomponen XML. Contoh format XML adalah format dokumen Office seperti DOCX dan format gambar seperti SVG.
Misalnya, suatu aplikasi memungkinkan pengguna untuk mengunggah gambar dan memproses atau memverifikasinya di server setelah mengunduh. Bahkan jika aplikasi mengharapkan untuk menerima format PNG atau JPEG, pustaka pemrosesan gambar yang digunakan dapat mendukung gambar SVG. Karena format SVG menggunakan XML, penyerang dapat mengirim gambar SVG berbahaya dan dengan demikian dapat menyerang kerentanan XXE.
Menggunakan XXE dengan mengunggah file gambar:
Sebagian besar permintaan POST menggunakan tipe konten default yang dibuat oleh formulir HTML, seperti aplikasi / x-www-form-urlencoded. Beberapa situs berharap menerima permintaan dalam format ini, tetapi mengizinkan jenis konten lain, termasuk XML.
Misalnya, jika permintaan reguler berisi yang berikut:
POST /action HTTP/1.0 Content-Type: application/x-www-form-urlencoded Content-Length: 7 foo=bar : POST /action HTTP/1.0 Content-Type: text/xml Content-Length: 52 <?xml version="1.0" encoding="UTF-8"?><foo>bar</foo>
Jika aplikasi menerima permintaan yang berisi XML di isi pesan dan mem-parsing konten sebagai XML, Anda bisa mendapatkan kesempatan untuk menyerang XXE hanya dengan memformat ulang permintaan untuk menggunakan format XML.
Cara menemukan dan memeriksa kerentanan XXE
Sebagian besar kerentanan XXE dapat ditemukan dengan cepat dan andal menggunakan pemindai kerentanan web Burp Suite.
- Pengujian manual kerentanan XXE biasanya meliputi:
- Menguji ekstraksi file dengan mendefinisikan entitas eksternal berdasarkan file sistem operasi yang diketahui dan menggunakan objek ini dalam data yang dikembalikan dalam respons aplikasi.
- Menguji kerentanan buta XXE dengan menetapkan entitas eksternal berdasarkan URL sistem yang Anda kelola dan memantau interaksi dengan sistem ini. Klien Burp Collaborator sangat ideal untuk tujuan ini.
- Pengujian untuk masuknya data pengguna non-XML yang rentan ke dalam dokumen server XML menggunakan serangan XInclude untuk mencoba mendapatkan file sistem operasi yang diketahui.
Bagaimana mencegah kerentanan XXE
Hampir semua kerentanan XXE muncul karena kenyataan bahwa parsing pustaka aplikasi XML mendukung fungsi XML yang berpotensi berbahaya sehingga aplikasi tidak perlu atau tidak dimaksudkan untuk digunakan. Cara termudah dan paling efektif untuk mencegah serangan XXE adalah menonaktifkan fitur-fitur ini.
Sebagai aturan, cukup menonaktifkan resolusi entitas eksternal dan menonaktifkan dukungan XInclude. Ini biasanya dapat dilakukan dengan menggunakan opsi konfigurasi atau secara program mengabaikan perilaku default. Untuk informasi lebih lanjut tentang menonaktifkan fitur yang tidak perlu, lihat dokumentasi parsing pustaka XML atau API.
Anda dapat menggunakan
laboratorium khusus sebagai tempat pelatihan untuk menguji keterampilan mengeksploitasi kerentanan tersebut.
Konfigurasi prosesor ganda terbaru dari server khusus dengan prosesor Intel Scalable 2019 tersedia di
DEDIC.SH :
- 2x Xeon Silver 4214 - total 24 core
- 2x Xeon Gold 5218 - total 32 core
- 2x Xeon Gold 6240 - konfigurasi dengan 36 core.
Biaya server dengan dua Xeon Silver 4214 -
dari 15210 rubel / bulanKami juga siap mengumpulkan
konfigurasi apa pun untuk Anda -
kirim surat kepada kami !
Jika kekuatan besar dari server khusus tidak diperlukan -
VDS dari 150 rubel / bulan adalah yang Anda butuhkan!