XML (Extensible Markup Language) sudah menjadi tulang punggung pertukaran data di banyak aplikasi enterprise selama lebih dari dua dekade. Dari konfigurasi server, integrasi API SOAP, sampai dokumen office seperti Microsoft Office dan PDF, XML digunakan di mana-mana. Namun di balik fleksibilitasnya, XML menyembunyikan satu celah keamanan yang sering luput dari perhatian developer: XML External Entity (XXE) Injection.
Menurut klasifikasi OWASP Top 10, XXE pernah menduduki posisi A4 sebagai salah satu ancaman web paling serius pada tahun 2017. Meskipun di OWASP Top 10 2021 kategori ini digabung ke dalam Security Misconfiguration (A05), kerentanannya tetap nyata dan banyak ditemukan di aplikasi produksi. Data dari CWE (Common Weakness Enumeration) mencatat CWE-611 (Improper Restriction of XML External Entity Reference) masih muncul di ribuan laporan kerentanan setiap tahunnya.
Artikel ini akan membahas secara lengkap apa itu XXE, bagaimana cara kerjanya, dampak serangan yang pernah terjadi, dan langkah-langkah praktis untuk mencegahnya. Pemahaman tentang XXE penting bagi developer yang masih menangani XML di aplikasi modern.
Apa Itu XXE (XML External Entity Injection)?
XML External Entity (XXE) Injection adalah kerentanan keamanan web yang mengeksploitasi parser XML dengan konfigurasi tidak aman. Serangan ini terjadi ketika aplikasi memproses input XML dari pengguna. Parser yang tidak aman akan mengizinkan deklarasi external entity untuk membaca file lokal, melakukan request ke sistem internal, atau mengeksekusi denial of service.
Untuk memahami XXE, perlu mengenal konsep XML Entity terlebih dahulu. Dalam XML, entity adalah cara untuk merepresentasikan unit data. Ada entity internal yang didefinisikan di dalam DTD (Document Type Definition), dan ada entity eksternal yang mereferensikan sumber daya dari luar dokumen, seperti file sistem atau URL. Masalah muncul ketika parser XML memproses entity eksternal tanpa validasi yang memadai.
Bayangkan XML seperti surat yang bisa menyertakan lampiran dari luar. Entity eksternal ibarat lampiran yang mengatakan “tolong ambil isi file /etc/passwd dan masukkan ke sini.” Jika parser tidak dikonfigurasi untuk menolak “lampiran” semacam itu, penyerang bisa membaca data sensitif dari server. Baca juga: Cara Mengamankan REST API: Panduan Lengkap Berdasarkan OWASP API Security Top 10 untuk memahami bagaimana API modern juga rentan terhadap konfigurasi yang lemah.
Contoh Payload XXE Sederhana
Berikut adalah contoh payload XXE yang mencoba membaca file /etc/passwd dari server:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
<!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
<user>
<name>&xxe;</name>
</user>
Jika parser XML memproses payload ini tanpa proteksi, isi file /etc/passwd akan dimasukkan ke dalam elemen <name> dan dikembalikan dalam response. Inilah esensi serangan XXE: menyalahgunakan fitur entity XML untuk mengakses sumber daya yang seharusnya tidak bisa diakses.
Bagaimana Cara Kerja Serangan XXE?
Serangan XXE bekerja melalui tiga komponen utama: DTD (Document Type Definition), entity eksternal, dan parser XML yang rentan. DTD adalah bagian dari dokumen XML yang mendefinisikan struktur dan aturan validasi. Di dalam DTD, penyerang bisa mendeklarasikan entity eksternal yang mengarah ke sumber daya sensitif.
Proses serangan dimulai ketika penyerang mengirimkan payload XML berbahaya ke endpoint aplikasi yang menerima input XML. Saat parser memproses dokumen, ia akan mencoba menyelesaikan (resolve) entity eksternal yang dideklarasikan. Jika parser tidak membatasi akses ke entity eksternal, penyerang bisa melakukan beberapa jenis serangan.
Jenis-Jenis Serangan XXE
- File Disclosure: Membaca file sensitif dari server, seperti file konfigurasi, kredensial, atau source code. Menggunakan protokol
file://atauphp://. - Server-Side Request Forgery (SSRF): Memaksa server melakukan request HTTP ke sistem internal yang tidak bisa diakses dari luar. Ini bisa digunakan untuk memindai port internal atau mengakses metadata cloud.
- Denial of Service (DoS): Dikenal sebagai “Billion Laughs Attack,” di mana entity rekursif menyebabkan ekspansi eksponensial yang menghabiskan memori server.
- Data Exfiltration: Mengirim data sensitif ke server yang dikontrol penyerang melalui entity eksternal yang memanggil URL dengan parameter berisi data curian.
Apa Dampak Serangan XXE yang Pernah Terjadi?
Serangan XXE bukan sekadar teori. Beberapa insiden nyata menunjukkan betapa seriusnya dampak kerentanan ini terhadap organisasi besar maupun kecil.
Pada tahun 2018, peneliti keamanan menemukan kerentanan XXE di Microsoft Office yang memungkinkan penyerang membaca file lokal melalui dokumen Word yang telah dimodifikasi. Kerentanan ini memengaruhi jutaan pengguna Microsoft Office di seluruh dunia sebelum akhirnya ditambal. Kasus lain terjadi pada Salesforce, di mana peneliti menemukan XXE di API mereka yang bisa digunakan untuk mengakses data internal.
Di Indonesia, laporan BSSN (Badan Siber dan Sandi Negara) tahun 2024 mencatat bahwa serangan terhadap aplikasi web termasuk dalam kategori ancaman siber tertinggi. Ini mencakup injeksi dan eksploitasi kerentanan parser yang menarget infrastruktur pemerintah dan sektor swasta.
Menurut data dari CWE Top 25 Most Dangerous Software Weaknesses, CWE-611 (XXE) konsisten berada di peringkat 20 besar kelemahan perangkat lunak paling berbahaya. Ini membuktikan bahwa meskipun teknologi sudah berkembang ke REST API dan JSON, sistem yang masih bergantung pada XML tetap terekspos risiko XXE. Baca juga: Cross-Site Scripting (XSS): Jenis, Eksploitasi, dan Mitigasi Lengkap untuk memahami ancaman web lain dari OWASP Top 10 yang juga perlu diwaspadai developer.
Bagaimana Cara Mencegah XXE di Aplikasi Web?
Mencegah XXE lebih sederhana dibandingkan banyak kerentanan web lainnya. Kuncinya adalah konfigurasi parser XML yang aman. Berikut langkah-langkah praktis yang bisa diterapkan developer.
1. Nonaktifkan Entity Eksternal dan DTD
Langkah paling efektif adalah menonaktifkan pemrosesan DTD dan entity eksternal sepenuhnya. Hampir semua library parser XML modern menyediakan opsi ini:
- Java (SAXParser): Setel
http://apache.org/xml/features/disallow-doctype-declketrue. - Python (lxml): Gunakan
etree.XMLParser(resolve_entities=False). - PHP (libxml): Panggil
libxml_disable_entity_loader(true)sebelum memproses XML. - .NET: Setel
XmlReaderSettings.DtdProcessing = DtdProcessing.Prohibit.
2. Gunakan Format Data yang Lebih Aman
Jika memungkinkan, gunakan JSON sebagai format pertukaran data utama. JSON tidak memiliki konsep entity eksternal seperti XML, sehingga secara inheren lebih aman dari XXE. Namun, jika aplikasi harus mendukung XML karena kebutuhan integrasi dengan sistem legacy atau standar industri seperti SOAP, pastikan parser dikonfigurasi dengan ketat.
3. Validasi dan Sanitasi Input
Terapkan validasi input di sisi server untuk semua data XML yang masuk. Gunakan whitelist untuk elemen dan atribut yang diizinkan, dan tolak dokumen XML yang mengandung deklarasi DOCTYPE atau DTD. Teknik ini efektif sebagai lapisan pertahanan tambahan.
4. Patch dan Update Rutin
Pastikan library parser XML selalu diperbarui ke versi terbaru. Vendor parser secara rutin merilis patch keamanan. Selain itu, lakukan vulnerability scanning berkala menggunakan tools seperti OWASP ZAP atau Burp Suite untuk mendeteksi kerentanan XXE di aplikasi.
FAQ: Pertanyaan Umum tentang XXE
Apakah aplikasi yang menggunakan JSON bisa terkena XXE?
Tidak secara langsung. XXE spesifik terjadi pada parser XML. JSON tidak mendukung entity eksternal. Namun, jika aplikasi menerima JSON tetapi backend-nya mengkonversi ke XML untuk diproses lebih lanjut, jalur serangan XXE tetap mungkin terjadi. Selalu periksa seluruh rantai pemrosesan data.
Apakah XXE masih relevan di tahun 2026?
Ya. Meskipun banyak aplikasi modern beralih ke JSON dan REST API, XML masih banyak digunakan di sistem enterprise, integrasi perbankan, asuransi, pemerintahan, dan protokol seperti SAML dan SOAP. Selama XML masih diproses, risiko XXE tetap ada.
Apa perbedaan XXE dengan SSRF?
Keduanya berbeda tetapi bisa saling terkait. XXE adalah kerentanan spesifik pada parser XML. SSRF adalah kemampuan untuk memaksa server melakukan request ke sistem lain. XXE bisa digunakan untuk melakukan SSRF jika parser mengizinkan entity eksternal yang memanggil URL internal. Dengan kata lain, XXE bisa menjadi vektor untuk serangan SSRF.
Kesimpulan
XML External Entity (XXE) Injection adalah kerentanan klasik yang tetap relevan hingga saat ini. Meskipun OWASP menggabungkannya ke dalam kategori Security Misconfiguration, dampaknya bisa sangat serius: dari pencurian data sensitif, pemindaian jaringan internal, hingga denial of service. Fakta bahwa CWE-611 masih bertengger di peringkat atas daftar kelemahan perangkat lunak paling berbahaya menunjukkan bahwa banyak organisasi belum menerapkan mitigasi yang memadai.
Pencegahannya relatif sederhana: nonaktifkan pemrosesan DTD dan entity eksternal di parser XML, gunakan JSON jika memungkinkan, lakukan validasi input yang ketat, dan pastikan library parser selalu dalam versi terkini. Untuk developer yang bekerja dengan sistem legacy atau integrasi enterprise, memahami dan memitigasi XXE adalah kompetensi keamanan yang wajib dikuasai.
Keamanan aplikasi web adalah perjalanan yang membutuhkan konsistensi. Setiap kerentanan yang dipahami dan dimitigasi adalah langkah maju menuju aplikasi yang lebih tangguh.