Injeksi Entity Eksternal XML (XXE)

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