CategoriesInternet

Pengenalan pada Expression Language Injection: Ancaman, Contoh dan Pencegahannya

      Dalam era digital saat ini, di mana pengembangan aplikasi web semakin berkembang pesat, penting bagi para pengembang untuk memahami dan melindungi aplikasi mereka dari berbagai jenis serangan siber. Salah satu ancaman yang sering terjadi adalah “Expression Language Injection” atau injeksi bahasa ekspresi. Ini adalah jenis serangan yang memanfaatkan celah dalam bahasa ekspresi yang digunakan dalam aplikasi web untuk menjalankan kode berbahaya. Dalam artikel ini, kita akan menjelaskan konsep Expression Language Injection, cara kerjanya, dan langkah-langkah pencegahannya.

Apa itu Expression Language Injection?

       Expression Language (EL) adalah sebuah bahasa yang digunakan untuk mengevaluasi ekspresi di dalam template web. Bahasa ini memungkinkan pengembang untuk menyuntikkan kode dinamis ke dalam template, yang kemudian akan dievaluasi dan di-render oleh aplikasi web. Misalnya, EL sering digunakan untuk menampilkan nilai variabel, mengakses properti objek, dan melakukan operasi matematika sederhana di dalam halaman web.

       Namun, jika tidak diimplementasikan dengan benar, bahasa ekspresi ini bisa menjadi titik lemah yang memungkinkan serangan oleh penyerang. Expression Language Injection terjadi ketika penyerang berhasil menyisipkan kode berbahaya ke dalam ekspresi yang akan dievaluasi oleh bahasa ekspresi. Ini dapat mengakibatkan eksekusi kode yang tidak diinginkan, akses tidak sah ke data sensitif, atau gangguan pada kinerja aplikasi.

Bagaimana Expression Language Injection Bekerja?

       Expression Language Injection mirip dengan serangan injeksi lainnya, seperti SQL Injection. Penyerang memanfaatkan input yang tidak diotentikasi atau tidak divalidasi dengan benar oleh aplikasi. Mereka menyisipkan kode berbahaya ke dalam ekspresi yang dievaluasi oleh bahasa ekspresi. Ketika ekspresi dievaluasi, kode berbahaya juga dieksekusi.

Beberapa contoh Expression Language (EL) Injection

Dasar-dasar EL Injection
Misalkan ada sebuah website yang menampilkan informasi pengguna berdasarkan input yang diberikan. URL-nya mungkin terlihat seperti ini:

				
					http://contoh.com/profil?username=${input}
				
			

Jika input tidak divalidasi dengan benar, seorang penyerang dapat memberikan input berbahaya seperti ${7*7}. Aplikasi, jika rentan, akan mengevaluasi ekspresi ini dan menampilkan hasilnya (49) daripada menampilkan profil pengguna yang dimaksud.

Mengakses Informasi Sensitif
Misalkan sebuah aplikasi menggunakan EL untuk mengakses data spesifik pengguna:

				
					Selamat datang, ${user.name}!
				
			

Jika input tidak divalidasi dan disanitasi dengan benar, seorang penyerang mungkin akan memasukkan ${user.password}. Jika aplikasinya rentan, hal itu bisa secara tidak sengaja menampilkan kata sandi pengguna pada halaman.

Eksekusi Kode Jarak Jauh (Remote Code Execution)
Beberapa aplikasi menggunakan EL untuk scripting dinamis. Contohnya:

				
					${Runtime.getRuntime().exec('ls')}

				
			

Jika input tidak divalidasi dengan benar, seorang penyerang dapat memberikan input seperti ${Runtime.getRuntime().exec('rm -rf /')}. Jika aplikasi mengevaluasi input ini, hal itu bisa menyebabkan eksekusi perintah sembarang di server, yang berpotensi menyebabkan konsekuensi yang sangat serius.

Membypass Kontrol Akses
Misalkan sebuah aplikasi menggunakan EL untuk memeriksa peran pengguna untuk kontrol akses:

				
					
    Selamat datang, Admin!


				
			

Jika input tidak divalidasi, seorang penyerang bisa memasukkan ${true}. Ini berpotensi membypass pemeriksaan otorisasi dan memungkinkan akses tidak sah ke fitur administratif.

Server-Side Request Forgery (SSRF)
Bayangkan sebuah aplikasi yang mengambil data eksternal berdasarkan input pengguna:

				
					${HttpURLConnection.open('http://contoh.com/data?input=' + input).getInputStream()}

				
			

Jika input tidak disanitasi dengan benar, seorang penyerang bisa memberikan URL berbahaya yang mengarah ke sumber daya internal:

				
					input=http://server-internal/halaman-admin

				
			

Langkah-langkah Pencegahan

  • Validasi Input
    Pastikan semua input dari pengguna divalidasi dengan baik sebelum digunakan dalam ekspresi. Hindari menerima input yang berisi karakter yang dapat dieksekusi seperti tanda dollar “$” atau tanda kurung kurawal “{“.
  • Escape String Output
    Saat menampilkan hasil ekspresi, pastikan untuk menghindari evaluasi ulang. Escape atau sanitasi data sebelum ditampilkan pada halaman web.
  • Penerapan Whitelist
    Buatlah whitelist yang berisi fungsi-fungsi atau ekspresi yang diizinkan. Hanya izinkan penggunaan fungsi-fungsi yang ada dalam daftar putih ini.
  • Pemisahan Konteks
    Pisahkan konteks aplikasi dan ekspresi yang dievaluasi. Jangan biarkan input pengguna langsung mempengaruhi ekspresi yang akan dievaluasi.
  • Update Perangkat Lunak
    Pastikan perangkat lunak bahasa ekspresi yang digunakan selalu diperbarui ke versi terbaru, karena biasanya versi terbaru memiliki perbaikan keamanan yang lebih baik.

Kesimpulan

Expression Language Injection merupakan ancaman serius bagi keamanan aplikasi web jika tidak ditangani dengan benar. Penting bagi para pengembang untuk memahami risiko ini dan mengambil langkah-langkah pencegahan yang sesuai. Dengan validasi input yang cermat, penggunaan whitelist, dan pemisahan konteks, risiko serangan ini dapat dikurangi secara signifikan. Mengutamakan keamanan dalam pengembangan aplikasi web adalah langkah yang sangat penting untuk melindungi data dan integritas sistem.

Published by Dhendik Dwi Prasetyo