Pengantar
XML masih digunakan dalam berbagai aplikasi, API, konfigurasi, integrasi enterprise, hingga layanan berbasis SOAP. Namun, cara aplikasi memproses XML dapat menimbulkan risiko keamanan jika parser dikonfigurasi secara tidak tepat.
Salah satu kerentanan yang perlu diperhatikan adalah XML External Entity (XXE) Injection. Serangan ini terjadi ketika aplikasi memproses input XML dari sumber yang tidak terpercaya dan parser masih mengizinkan pemrosesan external entity.
XXE dapat menyebabkan berbagai dampak, seperti pembacaan file lokal, Server-Side Request Forgery (SSRF), pemindaian jaringan internal, hingga denial-of-service. OWASP menjelaskan bahwa XXE muncul ketika XML yang tidak terpercaya diproses oleh parser yang masih mengizinkan external entity (dikutip dari: https://cheatsheetseries.owasp.org/cheatsheets/XML_External_Entity_Prevention_Cheat_Sheet.html).
baca juga : GraphQL Security: Mengenal Celah Serangan dan Cara Mengamankan API Modern
Apa Itu XML External Entity (XXE)?
XML External Entity atau XXE adalah kerentanan yang memanfaatkan fitur DTD (Document Type Definition) dan external entity pada XML.
Dalam kondisi tertentu, XML memungkinkan sebuah entity mengambil referensi dari resource eksternal. Jika parser tidak dikonfigurasi dengan aman, attacker dapat memanipulasi XML sehingga aplikasi mencoba mengakses resource yang seharusnya tidak dapat dijangkau.
Alur sederhananya adalah:
User Input → XML Parser → External Entity → Resource Eksternal
Masalah utama bukan terletak pada XML itu sendiri, tetapi pada konfigurasi parser dan cara aplikasi memproses input XML yang tidak terpercaya.
Bagaimana XXE Dapat Terjadi?
Parser XML yang Tidak Aman
Ketika aplikasi menerima XML dari pengguna, data tersebut biasanya akan diteruskan ke XML parser.
Jika parser masih mengizinkan:
- DTD.
- External entity.
- External DTD.
- External resource.
- Entity expansion.
maka input berbahaya dapat menyebabkan parser melakukan tindakan yang tidak diinginkan.
PortSwigger menjelaskan bahwa XXE dapat memungkinkan aplikasi membaca file pada filesystem server atau melakukan koneksi ke sistem lain yang dapat dijangkau oleh server (dikutip dari: https://portswigger.net/kb/issues/00100400_xml-external-entity-injection).
Dampak Serangan XXE
Membaca File Lokal
Salah satu risiko XXE adalah aplikasi dapat dipaksa mencoba membaca file dari filesystem server.
Jika file tersebut kemudian muncul dalam response atau error aplikasi, informasi sensitif berpotensi bocor.
Contoh informasi yang dapat menjadi target antara lain:
- File konfigurasi.
- Credential aplikasi.
- Environment configuration.
- Data internal aplikasi.
- File sistem tertentu.
Karena itu, XXE dapat berubah menjadi masalah information disclosure.
Server-Side Request Forgery (SSRF)
XXE juga dapat digunakan sebagai jalur menuju SSRF.
Dalam kondisi tertentu, attacker dapat menyebabkan server melakukan request ke resource yang dapat dijangkau dari jaringan server.
Hal ini menjadi berbahaya pada lingkungan cloud atau jaringan internal karena server mungkin memiliki akses ke service yang tidak tersedia secara langsung dari internet.
OWASP mencantumkan SSRF, port scanning, dan akses terhadap resource internal sebagai beberapa kemungkinan dampak XXE (dikutip dari: https://cheatsheetseries.owasp.org/cheatsheets/XML_External_Entity_Prevention_Cheat_Sheet.html).
Denial-of-Service
XXE juga dapat berkaitan dengan serangan terhadap resource parser.
Entity expansion yang dilakukan secara berlebihan dapat menyebabkan penggunaan CPU atau memory meningkat secara drastis.
Salah satu bentuk serangan yang dikenal adalah Billion Laughs, yaitu penyalahgunaan entity expansion secara rekursif untuk menghabiskan resource sistem.
Karena itu, pembatasan entity expansion dan penggunaan secure processing juga penting dalam konfigurasi parser.
baca juga : Attribute-Based Access Control (ABAC): Cara Kerja dan Perannya dalam Keamanan Akses Modern
Mengapa XXE Sering Terlewat?
Salah satu alasan XXE cukup berbahaya adalah karena kerentanannya tidak selalu terlihat pada kode aplikasi utama.

Aplikasi mungkin terlihat sederhana:
User → Upload XML → Parser → Database
Namun, parser XML yang digunakan dapat berasal dari library pihak ketiga atau dependency lain.
OWASP merekomendasikan agar developer memahami konfigurasi parser yang digunakan dan tidak mengandalkan konfigurasi default tanpa melakukan verifikasi keamanan (dikutip dari: https://cheatsheetseries.owasp.org/cheatsheets/XML_External_Entity_Prevention_Cheat_Sheet.html).
Cara Mencegah XXE Injection
Nonaktifkan DTD dan External Entity
Langkah paling penting adalah menonaktifkan pemrosesan DTD dan external entity jika aplikasi memang tidak membutuhkannya.
OWASP menyebutkan bahwa cara paling aman untuk mencegah XXE adalah menonaktifkan DTD atau external entity sepenuhnya pada XML parser (dikutip dari: https://cheatsheetseries.owasp.org/cheatsheets/XML_External_Entity_Prevention_Cheat_Sheet.html).
Gunakan XML Parser yang Aman
Pastikan library XML yang digunakan masih mendapatkan pembaruan keamanan.
Developer sebaiknya memeriksa:
- Versi parser.
- Default security configuration.
- Dukungan untuk menonaktifkan external entity.
- Dukungan secure processing.
- Batas entity expansion.
- Kemampuan membatasi akses network.
Jangan menganggap semua XML parser memiliki konfigurasi keamanan yang sama.
Validasi Input XML
Input XML tetap harus divalidasi berdasarkan struktur yang memang dibutuhkan aplikasi.
Validasi dapat membantu memastikan bahwa data sesuai dengan schema dan aturan aplikasi.
Namun, validasi input tidak boleh dianggap sebagai satu-satunya pertahanan terhadap XXE. Konfigurasi parser tetap harus diperbaiki.
Batasi Akses Network
Aplikasi yang memproses XML sebaiknya tidak memiliki akses network yang tidak diperlukan.
Jika parser berhasil dipengaruhi untuk melakukan request eksternal, pembatasan network dapat membantu mengurangi dampaknya.
Pendekatan ini sangat berguna sebagai lapisan pertahanan tambahan terhadap SSRF.
Checklist Perlindungan XXE
Sebelum aplikasi menggunakan XML di production, lakukan pemeriksaan berikut:
- Pastikan DTD dinonaktifkan jika tidak diperlukan.
- Pastikan external entity dinonaktifkan.
- Nonaktifkan external DTD.
- Gunakan XML parser yang telah diperbarui.
- Aktifkan secure processing jika tersedia.
- Batasi entity expansion.
- Validasi struktur XML.
- Batasi akses network aplikasi.
- Jangan mengandalkan konfigurasi default parser.
- Lakukan security testing terhadap fitur yang menerima XML.
XXE pada Aplikasi Modern
Walaupun banyak aplikasi modern menggunakan JSON sebagai format pertukaran data, XML belum sepenuhnya ditinggalkan.
XML masih dapat ditemukan pada:
- SOAP Web Services.
- Enterprise applications.
- File import dan export.
- Sistem integrasi antarperusahaan.
- Konfigurasi aplikasi.
- Dokumen tertentu.
- Sistem legacy.
Karena itu, developer dan security engineer tetap perlu memahami XXE, terutama ketika aplikasi menerima XML dari sumber eksternal.
baca juga : Use-After-Free (UAF): Memahami Celah Memory Corruption yang Berbahaya
Kesimpulan
XML External Entity (XXE) Injection merupakan kerentanan yang terjadi ketika aplikasi memproses XML yang tidak terpercaya menggunakan parser dengan konfigurasi yang tidak aman.
Dampaknya dapat berupa information disclosure, SSRF, akses terhadap resource internal, port scanning, hingga denial-of-service.
Pertahanan utama terhadap XXE adalah menonaktifkan DTD dan external entity, menggunakan parser yang aman dan diperbarui, melakukan validasi input, serta membatasi akses network aplikasi.
Dengan konfigurasi parser yang tepat, penggunaan XML dapat tetap dilakukan tanpa memberikan peluang yang tidak perlu bagi attacker untuk mengeksploitasi fitur external entity.









