SHTML Security Best Practices: Mengatasi Celah SSI & RCE

SHTML (Server Side Includes HTML) adalah ekstensi file yang menginstruksikan web server untuk memproses arahan khusus (directives) di dalam dokumen sebelum mengirimkannya ke browser. Tanpa konfigurasi yang tepat, direktif SSI seperti #exec membuka celah keamanan fatal berupa Remote Code Execution (RCE), injeksi perintah sistem, dan Cross-Site Scripting (XSS). Artikel ini membahas praktik terbaik pengamanan SHTML untuk memitigasi risiko tersebut.

Ancaman utama pada file berformat SHTML bersumber dari penyalahgunaan fungsi eksekusi perintah eksternal. Jika pengguna dapat mengunggah file SHTML atau memanipulasi parameter input yang diproses oleh server, penyerang dapat menjalankan perintah shell arbitrer di tingkat sistem operasi.

Matriks Risiko dan Mitigasi Keamanan SHTML

Vektor Ancaman Penyebab Utama Dampak Risiko Solusi Mitigasi
Remote Code Execution (RCE) Penggunaan direktif #exec cmd yang tidak dibatasi. Pengambilalihan server oleh penyerang. Nonaktifkan total perintah #exec pada konfigurasi server.
Cross-Site Scripting (XSS) Menampilkan variabel input pengguna tanpa sanitasi melalui #echo. Pencurian sesi pengguna atau manipulasi DOM. Gunakan enkode output atau hindari penampilan input mentah.
Information Disclosure Menyertakan file sensitif (misal: /etc/passwd atau file konfigurasi DB) via #include. Kebocoran kredensial dan struktur sistem. Batasi direktori akses Includes menggunakan IncludesNOEXEC.

Langkah Teknis Pengamanan Server Web

1. Konfigurasi Apache HTTP Server

Pada server Apache, modul mod_include harus dikonfigurasi dengan hati-hati. Hindari penggunaan opsi Includes secara bebas pada direktori yang dapat diunggah oleh publik (seperti folder /uploads/). Gunakan opsi IncludesNOEXEC agar direktif penyertaan file tetap berjalan namun fungsi eksekusi perintah sistem (#exec) dimatikan secara permanen.

<Directory "/var/www/html">
    # Izinkan SSI tapi LARANG eksekusi perintah sistem
    Options +IncludesNOEXEC
    AddType text/html .shtml
    AddOutputFilter INCLUDES .shtml
</Directory>

2. Konfigurasi Nginx

Nginx tidak memiliki dukungan natif SSI seluas Apache, namun modul ngx_http_ssi_module menyediakan fungsi serupa. Pastikan direktif ssi hanya diaktifkan pada direktori internal yang aman dan matikan pemrosesan SSI pada direktori unggahan pengguna.

location / {
    ssi on;
    # Batasi agar tidak mengeksekusi perintah berbahaya
}

location /uploads/ {
    ssi off;
    # Cegah eksekusi SSI pada folder unggahan
</code>

3. Validasi dan Sanitasi Unggahan File

Jika aplikasi web Anda memungkinkan pengguna mengunggah file, terapkan validasi ekstensi yang ketat. Jangan pernah mengizinkan ekstensi .shtml, .stm, atau .shtm diunggah melalui form pengguna. Batasi jenis file hanya pada format aman seperti .jpg, .png, atau .pdf, serta simpan file tersebut di luar direktori eksekusi skrip.

Troubleshooting dan Deteksi Dini

Jika server Anda menunjukkan lonjakan penggunaan CPU yang tidak wajar atau terdapat file asing berekstensi SHTML di direktori publik, lakukan langkah-langkah investigasi berikut:

  • Periksa log akses web (access.log) untuk mencari pola permintaan yang mencurigakan, seperti injeksi parameter pada URL yang memuat file SHTML.
  • Gunakan perintah pemindaian integritas file seperti AIDE atau Tripwire untuk mendeteksi perubahan tidak sah pada direktori web root.
  • Lakukan audit file secara berkala menggunakan perintah find /var/www -name "*.shtml" untuk memastikan tidak ada file SHTML liar yang disisipkan oleh penyerang.