Mitigasi SSI Injection adalah rangkaian tindakan keamanan untuk mencegah penyerang mengeksekusi perintah sistem operasi atau menyisipkan kode berbahaya melalui direktif Server Side Includes (SSI) yang rentan pada aplikasi web berbasis server Apache atau web server lain yang mendukung SSI. Kerentanan ini terjadi ketika aplikasi gagal memvalidasi atau membersihkan input dari pengguna sebelum memasukkannya ke dalam file yang diproses oleh juru bahasa SSI.
Langkah paling mendasar dan efektif dalam mitigasi SSI Injection adalah menonaktifkan fitur SSI pada level konfigurasi server web jika memang tidak digunakan, atau membatasi eksekusi perintah shell secara ketat. Pengembang juga wajib menerapkan validasi input yang ketat menggunakan teknik whitelisting untuk setiap data yang diterima dari parameter HTTP, formulir, atau cookie.
Mekanisme Kerja dan Risiko SSI Injection
Server Side Includes adalah bahasa scripting sisi server yang sederhana yang biasanya digunakan untuk menyisipkan dokumen eksternal ke dalam halaman web HTML. Ketika web server mengonfigurasi file dengan ekstensi tertentu (.shtml) untuk diproses oleh modul SSI (seperti mod_include di Apache), server akan mencari direktif khusus yang diawali dengan format <!--#... -->.
Jika aplikasi web menerima input pengguna dan menampilkannya kembali di halaman .shtml tanpa penyaringan (sanitization), penyerang dapat menyisipkan direktif berbahaya. Contoh paling berbahaya adalah penggunaan perintah exec yang memungkinkan penyerang menjalankan perintah sistem operasi secara langsung di server target.
Tabel Matriks Risiko dan Dampak SSI Injection
| Direktif SSI | Fungsi Normal | Potensi Eksploitasi / Risiko |
|---|---|---|
<!--#include --> |
Menyisipkan file lokal (header, footer). | Pembacaan file sensitif sistem (misal: /etc/passwd). |
<!--#echo --> |
Menampilkan variabel lingkungan server. | Kebocoran informasi konfigurasi dan variabel internal. |
<!--#exec --> |
Menjalankan perintah sistem atau CGI. | Eksekusi kode jarak jauh (RCE), pengambilalihan server penuh. |
<!--#set --> |
Menetapkan nilai pada variabel. | Manipulasi alur logika aplikasi atau variabel SSI lainnya. |
Langkah Teknis Mitigasi SSI Injection pada Web Server
Pengamanan tidak hanya bergantung pada kode aplikasi, tetapi juga konfigurasi infrastruktur server web. Berikut adalah langkah-langkah teknis pengetatan konfigurasi:
1. Konfigurasi Apache Web Server
Jika server Apache tidak memerlukan fungsionalitas SSI, nonaktifkan modul include sepenuhnya. Jika SSI mutlak diperlukan, batasi penggunaannya hanya pada direktif penyisipan file tanpa izin eksekusi perintah shell.
# Menonaktifkan SSI secara total pada direktori tertentu
<Directory "/var/www/html">
Options -Includes
</Directory>
# Mengizinkan penyisipan file (Include) tetapi MELARANG eksekusi perintah (Exec)
<Directory "/var/www/html/dynamic">
Options IncludesNoExec
</Directory>
2. Validasi dan Sanitasi Input Pengguna
Semua data yang berasal dari klien (GET, POST, COOKIE, HEADER) wajib dianggap berbahaya. Terapkan validasi berbasis whitelisting dengan ekspresi reguler (Regex) yang hanya mengizinkan karakter alfanumerik tertentu jika input tersebut harus dirender.
Contoh implementasi pembersihan karakter khusus SSI di PHP sebelum data diproses atau dirender:
<?php
function sanitize_ssi($input) {
// Menghapus karakter yang sering digunakan dalam injeksi SSI
$pattern = '/[<\-#!>]/';
$cleaned = preg_replace($pattern, '', $input);
return $cleaned;
}
$username = sanitize_ssi($_POST['username']);
echo "Selamat datang, " . htmlspecialchars($username, ENT_QUOTES, 'UTF-8');
?>
Troubleshooting dan Deteksi Celah SSI Injection
Untuk memastikan aplikasi web Anda bebas dari kerentanan ini, lakukan pengujian keamanan secara berkala menggunakan teknik berikut:
- Payload Pengujian Dasar: Masukkan payload uji coba seperti
<!--#echo var="DATE_LOCAL"-->pada form input. Jika tanggal server muncul di halaman hasil, aplikasi terindikasi rentan. - Analisis Log Akses: Periksa file log web server untuk mendeteksi pola permintaan yang mencurigakan yang mengandung karakter direktif SSI.
- Pemeriksaan Ekstensi File: Pastikan file yang tidak memerlukan pemrosesan SSI tidak menggunakan ekstensi
.shtmlatau diaktifkan handler SSI-nya di konfigurasi server.