XML External Entity Attack (XXE) 6

 

Sumber : https://portswigger.net/web-security/xxe


Pada kesempatan kali ini kita akan membahas XML External Attack (XEE) serta bagaimana cara menanggulangi atau mencegah sistem terkena dari serangan tersebut. Sebelum kita menjelaskan bagaimana cara kerja dari serangan XML External Attack (XEE), terlebih dahulu kita mengenal apa itu XML dan XML External Entity Injection.

Apa itu XML ?

XML (eXtensible Markup Language) merupakan sebuah bahasa markup seperti HTML yang didesain untuk menyimpan dan mengantarkan data. Layanan web yang menyediakan cara yang nyaman untuk berkomunikasi dan transfer data antar aplikasi web yang dibangun dalam sebuah platform serta menggunakan berbagai jenis bahasa pemrograman. Banyak sekali protokol serta standar seperti Simple Object Access Protocol (SOAP), Representational State Transfer (RESTFul), Resource Description Framework (RDF) dan lainnya yang dibangun untuk diimplementasikan ke dalam layanan web yang menggunakan XML sebagai teknologi utamanya.

Layanan Web ini kemudian di ekspos ke penyerang yang mengeksploitasi kerentanan dalam penyimpanan XML, representasi data, dan prosesor XML. untuk mempertahankan kerahasiaan, integritas dokumen XML, tanda tangan XML dan enkripsi XML yang digunakan. Namun, kontruksi keamanan ini rentan karena implementasi pembangkitan kunci yang salah pada algoritma enkripsi, dan skema verifikasi tanda tangan. 

Apa itu XEE injection ? 

XML External Entity Injection adalah sebuah kerentanan dalam keamanan web yang memungkinkan penyerang untuk mengganggu pemrosesan data XML pada suatu aplikasi. ini sering memungkinkan penyerang untuk melihat file pada sistem file server aplikasi, dan untuk berinteraksi dengan sistem back-end atau external apapun yang dapat diakses oleh aplikasi itu sendiri. XML injection attack ini merupakan serangan yang mengeksploitasi dukungan untuk entitas eksternal XML dan digunakan terhadap suatu aplikasi web yang memproses suatu input XML. Penyerang dapat menyediakan file XML dengan mendefinisi DOCTYPE yang dibuat secara khusus untuk melakukan serangan termasuk penolakan layanan, pemalsuan permintaan sisi server atau bahkan eksekusi kode jarak jauh.

Apa saja jenis serangan XEE ?

Berikut ini adalah berbagai jenis serangan terhadap XEE

  1. Memanfaatkan XEE untuk mengambil file, dimana entitas eksternal didefinisikan berisi suatu konten file, dan dikembalikan pada respons aplikasi

  2. Memanfaatkan XEE untuk melakukan serangan SSRF, dimana entitas eksternal ditentukan berdasarkan URL ke sistem back-end.

  3. Eksploitasi XEE buta exfiltrate data out-band, dimana data sensitif ditransmisikan dari sebuah server aplikasi ke sistem yang dikendalikan penyerang.

  4. Memanfaatkan XEE buta untuk mengambil data melalui pesan kesalahan dimana penyerang dapat memicu pesan kesalahan penguraian yang berisi data sensitif.

Untuk melakukan serangan XEE Injection yang mengambil sebuah file arbitrer dari sistem file server perlu untuk memodifikasi XML yang dikirimkan dengan dua cara :

  1. Perkenalan suatu elemen pada DOCTYPE yang mendefinisikan entitas eksternal yang berisi jalur ke file

  2. Edit nilai data dalam XML yang dikembalikan dalam respons aplikasi untuk menggunakan entitas eksternal yang ditentukan.

SSRF Attack

Dengan adanya kerentanan pada XEE, penyerang dapat memperoleh akses langsung ke jaringan internal dan meluncurkan serangan dari server internal terpercaya. Berikut contoh pemalsuan permintaan sisi server menggunakan payload XEE :





Jika dijalankan maka penyerang akan mengirim sebuah permintaan HTTP ke sistem internal dengan memberikan pijakan untuk serangan yang lebih lanjut.

XEE Injection lanjutan dengan menggunakan Entitas Parameter

Serangan XEE yang lebih maju sering menggunakan entitas parameter DTD. Berikut adalah contoh sederhana yang menggunakan entitas parameter untuk mendefinisikan entitas tersebut:






Dalam hal ini, ParameterEnt digantikan dengan string internal dengan definisi entitas biasa jadi mengembalikan Hello Bar

Dengan adanya fungsi ini penyerang akan menyuntikan file DTD eksternal yang berisi lebih banyak entitas parameter dengan menempatkan file paramInjection.dtd pada server mereka :




Kemudian seranganya menggunakan sebuah dokumen XMl berikut ini :





Pada XML tersebut Parser memuat DTD eksternal yang kemudian mendefinisikan entitas internal yang membungkus file target dengan tag CDATA.

Bagaimana Cara kita untuk mencegah dan melindungi web yang kita buat ?

  1. Menonaktifkan dukungan DTD

  2. Menonaktifkan dukungan entitas eksternal (di PHP) misalnya dengan mengaktifkan libxml_disable_entity_loader(true).

Untuk mengecek lebih lanjut kerentanan XEE pada aplikasi web yang telah kita buat, kita bisa menggunakan sebuah pemindai aplikasi web yang handal serta akurat yang bernama Netsparker. Netsparker ini berfungsi untuk mendeteksi kerentanan XEE, termasuk XEE out-of-band serta menandainya sebagai tingkat keparahan yang tinggi.

Dengan kita menonaktifkan fitur atau dukungan tersebut maka aplikasi yang telah kita buat akan terhindar dari serangan tersebut.


Referensi

Banach, Z. (2020). XML External Entity (XXE) Attacks and How to Avoid Them. Retrieved from Netsparker: https://www.netsparker.com/blog/web-security/xxe-xml-external-entity-attacks

Charu Gupta, R. K. (2020). A survey and classification of XML based attacks. Information Security Journal: A Global Perspective, 183 - 198.

Port Swigger. (n.d.). XML external entity (XXE) injection. Retrieved from Port Swigger: https://portswigger.net/web-security/xxe

 


Komentar