Definisi SSI Injection
Server Side Includes (SSI) Injection adalah kerentanan keamanan web yang terjadi ketika aplikasi mengizinkan pengguna untuk menyuntikkan kode SSI ke dalam halaman web yang diproses oleh server. SSI adalah direktif yang digunakan pada server web untuk menambahkan konten dinamis ke dalam file HTML statis sebelum dikirim ke browser klien. Jika input pengguna tidak divalidasi dengan benar, penyerang dapat mengeksekusi perintah sistem, membaca file sensitif, atau melakukan serangan Remote Code Execution (RCE).
Mekanisme Serangan
Serangan ini terjadi saat server web dikonfigurasi untuk memproses direktif SSI (biasanya dengan ekstensi file .shtml, .shtm, atau .stm). Penyerang memasukkan perintah SSI ke dalam kolom input (seperti form pencarian atau profil pengguna) yang kemudian direfleksikan oleh server ke halaman web. Berikut adalah contoh sintaks dasar yang disuntikkan:
<!--#exec cmd="ls -la"-->Jika server mengeksekusi perintah tersebut, output dari perintah sistem akan ditampilkan langsung di halaman web, memberikan akses kepada penyerang untuk melihat struktur direktori atau menjalankan skrip berbahaya.
| Komponen | Deskripsi |
|---|---|
| Direktif | Perintah SSI (contoh: #exec, #include, #echo) |
| Vektor | Input form, parameter URL, header HTTP |
| Dampak | RCE, Pencurian Data, Defacement |
| Target | Server web dengan modul mod_include aktif |
Vektor Serangan Umum
Penyerang biasanya menargetkan input yang dipantulkan kembali ke pengguna tanpa sanitasi. Beberapa direktif yang sering disalahgunakan meliputi:
#exec cmd: Menjalankan perintah shell sistem operasi.#include virtual: Membaca file lokal (misalnya file konfigurasi atau/etc/passwd).#echo var: Mengungkapkan variabel lingkungan server yang mungkin berisi kunci API atau informasi sensitif.
Langkah Mitigasi dan Pertahanan
Untuk mencegah SSI Injection, pengembang harus menerapkan strategi pertahanan berlapis:
- Nonaktifkan SSI: Jika tidak diperlukan, matikan modul
mod_includepada konfigurasi server web (Apache/Nginx). - Validasi Input: Terapkan whitelist pada semua input pengguna. Tolak karakter khusus seperti
<,>,#, dan". - Encoding Output: Selalu lakukan HTML encoding pada data yang ditampilkan kembali ke browser untuk mencegah interpretasi perintah oleh server.
- Prinsip Least Privilege: Jalankan proses server web dengan akun pengguna yang memiliki hak akses seminimal mungkin untuk membatasi dampak jika terjadi eksekusi perintah.
Tabel Perbandingan Mitigasi
| Metode | Efektivitas | Tingkat Kesulitan |
|---|---|---|
| Disable SSI | Sangat Tinggi | Mudah |
| Input Sanitization | Tinggi | Sedang |
| Output Encoding | Tinggi | Sedang |
| WAF (Web Application Firewall) | Menengah | Mudah |
Penting untuk dicatat bahwa penggunaan WAF dapat membantu mendeteksi pola serangan SSI, namun tidak menggantikan kebutuhan akan penulisan kode yang aman (secure coding) di sisi aplikasi.