Kategori OWASP: MASVS-CODE: Kualitas Kode
Ringkasan
Injeksi XML eXternal Entity (XXE) adalah serangan terhadap aplikasi yang mem-parsing input XML. Serangan XXE terjadi saat input XML yang tidak tepercaya dengan referensi ke entity eksternal diproses oleh parser XML yang dikonfigurasi dengan lemah. Serangan ini dapat digunakan untuk mengatur beberapa insiden, termasuk penolakan layanan, akses sistem file, atau pemindahan data yang tidak sah.
Dampak
Saat mengurai dokumen XML, aplikasi dapat memproses DTD (Definisi Jenis Dokumen, juga dikenal sebagai entitas eksternal) yang ada dalam dokumen. Penyerang dapat mengeksploitasi perilaku ini dengan menyuntikkan 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 melewati langkah-langkah keamanan perimeter.
Terakhir, jika aplikasi memperluas DTD, hal ini dapat menciptakan situasi dengan beberapa iterasi entitas yang dirujuk, sehingga menghabiskan resource perangkat dan menyebabkan penolakan layanan.
Mitigasi
Menonaktifkan DTD
Cara teraman untuk mencegah XXE adalah dengan selalu menonaktifkan DTD (entitas eksternal) sepenuhnya. Bergantung pada parser yang digunakan, metode ini bisa 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 DTD tidak dapat dinonaktifkan sepenuhnya, entity eksternal dan deklarasi jenis dokumen eksternal harus dinonaktifkan dengan cara yang khusus untuk setiap parser.
Karena banyaknya mesin parsing XML di pasar, cara untuk mencegah serangan XXE berbeda-beda 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 menyuntikkan kode arbitrer dalam preamble dokumen XML. Hal ini harus diverifikasi di sisi server, karena kontrol sisi klien dapat dilewati.
Menggunakan library lain
Jika library atau metode yang digunakan tidak dapat dikonfigurasi dengan aman, pertimbangkan untuk menggunakan library atau metode lain. XML Pull Parser dan SAX Parser dapat dikonfigurasi dengan aman, sehingga tidak mengizinkan DTD dan entitas.
Resource
- XXE OWASP
- Tips praktis Pencegahan XXE OWASP
- Konstanta XML: FEATURE_SECURE_PROCESSING
- XML Pull Parser
- SAX Parser