Kategori OWASP: MASVS-CODE: Kualitas Kode
Ringkasan
Injeksi Entity Eksternal XML (XXE) adalah serangan terhadap aplikasi yang menguraikan input XML. Serangan XXE terjadi saat input XML yang tidak tepercaya dengan referensi ke entity eksternal diproses oleh parser XML yang dikonfigurasi secara lemah. Serangan ini dapat digunakan untuk melakukan beberapa insiden, termasuk denial of service, akses sistem file, atau pemindahan data yang tidak sah.
Dampak
Saat mengurai dokumen XML, aplikasi dapat memproses DTD (Definisi Jenis Dokumen, juga dikenal sebagai entity eksternal) yang terdapat dalam dokumen. Penyerang dapat mengeksploitasi perilaku ini dengan memasukkan kode berbahaya sebagai DTD. Kode ini kemudian dapat mengakses bagian sistem file perangkat, yang hanya dapat diakses oleh aplikasi dan berpotensi berisi data sensitif. Selain itu, kode berbahaya ini dapat membuat permintaan dari perangkat, yang berpotensi mengabaikan langkah-langkah keamanan perimeter.
Terakhir, jika aplikasi memperluas DTD, hal ini dapat menciptakan situasi dengan beberapa iterasi entitas yang direferensikan, yang menghabiskan resource perangkat dan menyebabkan denial of service.
Mitigasi
Menonaktifkan DTD
Cara teraman untuk mencegah XXE adalah dengan selalu menonaktifkan DTD (entity eksternal) secara menyeluruh. Bergantung pada parser yang digunakan, metode ini dapat mirip dengan contoh berikut untuk library XML Pull Parser:
Java
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
Kotlin
val factory = XmlPullParserFactory.newInstance()
factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true)
Menonaktifkan DTD juga membuat parser aman dari serangan denial of service. Jika tidak dapat menonaktifkan DTD sepenuhnya, entitas eksternal dan deklarasi jenis dokumen eksternal harus dinonaktifkan dengan cara yang spesifik untuk setiap parser.
Karena banyaknya mesin penguraian XML di pasar, cara untuk mencegah serangan XXE berbeda dari satu mesin ke mesin lainnya. Anda mungkin perlu membaca dokumentasi mesin untuk mengetahui informasi selengkapnya.
Melakukan pembersihan input
Aplikasi harus dikonfigurasi ulang agar tidak mengizinkan pengguna memasukkan kode arbitrer dalam pengantar dokumen XML. Hal ini harus diverifikasi sisi server, karena kontrol sisi klien dapat diabaikan.
Menggunakan library lain
Jika library atau metode yang digunakan tidak dapat dikonfigurasi dengan aman, library atau metode yang berbeda harus dipertimbangkan. XML Pull Parser dan SAX Parser dapat dikonfigurasi dengan cara yang aman, sehingga melarang DTD dan entity.
Referensi
- OWASP XXE
- Tips Praktis Pencegahan XXE OWASP
- Konstanta XML: FEATURE_SECURE_PROCESSING
- XML Pull Parser
- Parser SAX