Serangan XML External Entity - Rumah IT

Baru

recent

Serangan XML External Entity

Serangan XML External Entity

Menurut OWASP, Serangan XML External Entity atau sering disingkat XXE adalah jenis serangan terhadap aplikasi yang mem-parsing input XML. Serangan ini terjadi ketika input XML yang berisi referensi ke entitas eksternal diproses oleh parser XML yang dikonfigurasi dengan lemah . Serangan ini dapat menyebabkan pengungkapan data rahasia, penolakan layanan, pemalsuan permintaan sisi server, pemindaian port dari perspektif mesin tempat parser berada, dan dampak sistem lainnya.


Standar XML 1.0 mendefinisikan struktur dokumen XML. Standar mendefinisikan konsep yang disebut entitas, yang merupakan unit penyimpanan dari beberapa jenis. Ada beberapa jenis entitas yang berbeda, entitas parsing umum/parameter eksternal sering disingkat menjadi entitas eksternal, yang dapat mengakses konten lokal atau jarak jauh melalui pengenal sistem yang dideklarasikan. Pengidentifikasi sistem diasumsikan sebagai URI yang dapat direferensikan (diakses) oleh prosesor XML saat memproses entitas.

Prosesor XML kemudian mengganti kemunculan entitas eksternal bernama dengan konten yang direferensikan oleh pengidentifikasi sistem. Jika pengidentifikasi sistem berisi data tercemar dan prosesor XML mendereferensikan data tercemar ini, prosesor XML dapat mengungkapkan informasi rahasia yang biasanya tidak dapat diakses oleh aplikasi. Vektor serangan serupa menerapkan penggunaan DTD eksternal, lembar gaya eksternal, skema eksternal, dll. yang, jika disertakan, memungkinkan serangan gaya penyertaan sumber daya eksternal serupa.


Yang menjadi faktor risiko XXE adalah :

  • Aplikasi mem-parsing dokumen XML.
  • Data tercemar diperbolehkan dalam bagian pengidentifikasi sistem entitas, dalam deklarasi tipe dokumen (DTD).
  • Prosesor XML dikonfigurasi untuk memvalidasi dan memproses DTD.
  • Prosesor XML dikonfigurasi untuk menyelesaikan entitas eksternal dalam DTD.

Dampak Serangan XML External Entity

Serangan XXE dapat berdampak baik pada aplikasi yang rentan, dan pada sistem lain yang terhubung dengannya.

Pada aplikasi yang ditargetkan, penyerang mungkin dapat mengambil data sensitif seperti kata sandi, atau melakukan penjelajahan direktori untuk mendapatkan akses ke jalur sensitif di server lokal. XXE juga dapat digunakan untuk melakukan jenis serangan penolakan layanan (DoS) dengan mengakses sumber daya dalam jumlah besar atau membuka terlalu banyak utas di server lokal. 

Pada sistem lain yang terhubung, penyerang mungkin memanfaatkan akses mereka ke aplikasi yang ditargetkan untuk mendapatkan akses ke direktori lain di jaringan, melakukan pemindaian port, atau melakukan serangan pemalsuan permintaan sisi server (SSRF).

Dalam kasus ekstrem, pustaka prosesor XML mungkin rentan terhadap masalah kerusakan memori sisi klien, yang memungkinkan eksekusi kode jarak jauh di bawah hak istimewa aplikasi. 

Cara Kerja Serangan XML External Entity

Beberapa aplikasi menggunakan format XML untuk mengirimkan data antara browser dan server. Aplikasi yang melakukan ini hampir selalu menggunakan library standar atau API platform untuk memproses data XML di server. Kerentanan XXE muncul karena spesifikasi XML berisi berbagai fitur yang berpotensi berbahaya, dan parser standar mendukung fitur ini meskipun biasanya tidak digunakan oleh aplikasi.

Entitas eksternal XML adalah jenis entitas XML khusus yang nilai yang ditentukan diambil dari luar DTD tempat mereka dideklarasikan. Entitas eksternal sangat menarik dari perspektif keamanan karena memungkinkan entitas untuk didefinisikan berdasarkan konten jalur file atau URL.

Jenis-Jenis Serangan XML External Entity

1. Resource Exhaustion Attacks

Serangan berbasis XML yang paling dasar, meskipun tidak sepenuhnya merupakan serangan entitas XML eksternal. Serangan ini dimitigasi di sebagian besar parser XML modern, tetapi dapat membantu mengilustrasikan cara kerja serangan XML. Contoh :
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE laugh [
    <!ELEMENT laugh ANY>
    <!ENTITY LOL "LOL">
    <!ENTITY LOL1 "&LOL1;&LOL1;&LOL1;&LOL1;&LOL1;&LOL1;&LOL1;">
    <!ENTITY LOL2 "&LOL2;&LOL2;&LOL2;&LOL2;&LOL2;&LOL2;&LOL2;">
    <!ENTITY LOL3 "&LOL3;&LOL3;&LOL3;&LOL3;&LOL3;&LOL3;&LOL3;">
]>
<laugh>&LOL3;</laugh>
Parser XML mem-parsing kode ini dan memperluas setiap entitas, menghasilkan sejumlah besar "LOL". Contoh di atas menghasilkan beberapa ratus string LOL, tetapi dalam contoh skala penuh, kode tersebut dapat menghasilkan miliaran baris keluaran, menghabiskan memori di server. Cara alternatif untuk mencapai efek yang sama adalah dengan mereferensikan string yang sangat panjang atau tidak terbatas, seperti string /dev/urandom pada sistem operasi Linux.

2. Data Extraction Attacks

Entitas eksternal (ditentukan pada server yang dikendalikan oleh penyerang) dapat mereferensikan URI pada server lokal untuk mengambil konten sensitif dari sistem file. Sebagian besar server menggunakan direktori yang sama untuk file sistem yang sensitif, menjadikannya usaha yang mudah bagi penyerang.

Misalnya, kode berikut akan mengembalikan konten file login.defs, yang menentukan pengaturan login, pada sistem Linux yang rentan:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE malicious [
    <!ELEMENT malicious ANY>
    <!ENTITY external SYSTEM "file:////etc/login.defs">
]>
<malicious>&external;</malicious>
Elemen penting lainnya dari serangan XXE adalah mereka dapat digunakan untuk memindai port atau mengambil data dari host lain yang terhubung ke sistem target. Misalnya, jika sistem target dapat terhubung ke server file di alamat IP 10.0.0.5, penyerang dapat mengambil data sensitif dari server seperti ini:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE malicious [
    <!ELEMENT malicious ANY>
    <!ENTITY external SYSTEM "http://10.0.0.5/sensitive.txt">
]>
<malicious>&external;</malicious>


3. SSRF Attacks

Penyerang dapat menggunakan serangan XXE lebih dari sekedar mengambil data sensitif. Dampak lain yang mungkin terjadi adalah XXE dapat digunakan untuk melakukan pemalsuan permintaan sisi server atau server-side request forgery (SSRF). Serangan SSRF melibatkan penyerang yang mengeksploitasi aplikasi sisi server untuk membuat permintaan HTTP ke URL apa pun yang dapat dijangkau server.

Untuk melakukan serangan SSRF melalui kerentanan XXE, penyerang perlu menentukan entitas XML eksternal dengan URL target yang ingin dijangkau dari server, dan menggunakan entitas ini dalam nilai data. Jika penyerang berhasil menempatkan nilai data ini dalam respons aplikasi, mereka akan dapat melihat konten URL dalam respons aplikasi, yang memungkinkan interaksi dua arah dengan sistem backend. Jika respons aplikasi tidak tersedia, penyerang masih dapat melakukan serangan SSRF secara buta.

Berikut adalah contoh entitas eksternal yang menyebabkan server membuat permintaan HTTP backend ke sistem internal dalam jaringan organisasi:
<!DOCTYPE malicious [ <!ENTITY external SYSTEM "http://sensitive-system.company.com/"> ]>


4. File Retrieval

Penyerang mengeksploitasi XXE untuk mengambil file yang berisi definisi entitas eksternal dari konten file. Aplikasi mengirimkan file sebagai tanggapannya. Untuk melakukan jenis serangan injeksi XXE ini dan mengambil file arbitrer dari sistem file server, penyerang harus memodifikasi XML dengan:
  • Memperkenalkan atau mengedit elemen DOCTYPE yang mendefinisikan entitas dengan jalur ke file target.
  • Mengedit nilai data dalam XML yang dikirimkan, dikembalikan oleh aplikasi, dan menggunakan entitas eksternal yang ditentukannya.
Misalnya, aplikasi belanja memeriksa tingkat stok produk dengan mengirimkan XML berikut ke server:
<?xml version="1.0" encoding="UTF-8"?>
<stockCheck><productId>381</productId></stockCheck>
Aplikasi tidak melakukan pertahanan khusus terhadap serangan XXE, sehingga Anda dapat mengeksploitasi kerentanan XXE untuk mengambil file /etc/passwd dengan mengirimkan muatan XXE berikut:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]>
<stockCheck><productId>&xxe;</productId></stockCheck>
Muatan XXE ini menentukan entitas eksternal &xxe; yang nilainya adalah konten file /etc/passwd dan menggunakan entitas di dalam productIdnilai tersebut. Ini menyebabkan respons aplikasi menyertakan konten file:

Invalid product ID: root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
...

5. Blind XXE

Penyerang mengeksploitasi kerentanan blind XXE untuk mengambil atau mengekstraksi data. Misalnya, penyerang dapat mencuri data out-of-band, mendorong server aplikasi untuk mengirimkan data sensitif ke sistem eksternal di bawah kendali mereka.

Seorang penyerang mungkin juga mengeksploitasi blind XXE untuk menerima pesan kesalahan yang berisi data sensitif. Penyerang memicu pesan kesalahan penguraian yang memaparkan data.

Cara Mencegah Serangan XML External Entity

Hampir semua kerentanan XXE muncul karena pustaka parsing XML aplikasi mendukung fitur XML yang berpotensi berbahaya yang tidak diperlukan atau tidak ingin digunakan oleh aplikasi. Cara termudah dan paling efektif untuk mencegah serangan XXE adalah dengan menonaktifkan fitur tersebut.

Umumnya, cukup menonaktifkan resolusi entitas eksternal dan menonaktifkan dukungan untuk XInclude. Ini biasanya dapat dilakukan melalui opsi konfigurasi atau dengan mengesampingkan perilaku default secara terprogram. Lihat dokumentasi untuk pustaka parsing XML atau API Anda untuk mengetahui detail tentang cara menonaktifkan kemampuan yang tidak diperlukan.

Referensi :
1. https://owasp.org/www-community/vulnerabilities/XML_External_Entity_(XXE)_Processing
2. https://portswigger.net/web-security/xxe
3. https://www.hackerone.com/knowledge-center/xxe-complete-guide-impact-examples-and-prevention
All Rights Reserved by Rumah IT - Rumah Teknologi Informasi © 2013 - 2022
Powered By Blogger

Contact Form

Name

Email *

Message *

Powered by Blogger.