Command Injection — OWASP (Bahasa Indonesia)
Command Injection adalah serangan keamanan pada aplikasi web di mana penyerang mencoba memanipulasi program dengan memasukkan perintah sistem operasi berbahaya ke dalam aplikasi. Serangan ini terjadi ketika input pengguna tidak diverifikasi dengan benar dan memungkinkan penyerang untuk menyisipkan perintah sistem operasi ke dalam sistem.
Contoh umum dari serangan celah command injection adalah ketika sebuah aplikasi menerima input pengguna yang kemudian diteruskan ke perintah sistem operasi tanpa verifikasi terlebih dahulu. Dalam contoh ini, seorang penyerang dapat memasukkan perintah berbahaya ke dalam input pengguna yang kemudian dijalankan oleh sistem operasi.
Impact / Dampak
Serangan celah command injection dapat memiliki dampak yang serius pada keamanan aplikasi dan sistem yang terkait. Penyerang dapat menggunakan celah ini untuk mendapatkan akses ke sistem, mencuri atau menghapus data, atau melakukan tindakan berbahaya lainnya. Oleh karena itu, penting untuk melindungi aplikasi dari serangan ini dengan mengimplementasikan teknik-teknik seperti validasi input, sanitasi data, dan penggunaan parameterized queries.
Contoh Kasus
Misalkan sebuah aplikasi web memiliki fitur untuk memproses input pengguna yang kemudian dijalankan sebagai perintah sistem operasi di belakang layar. Pengguna diminta untuk memasukkan alamat IP yang akan dipindai untuk mengecek apakah alamat IP tersebut aktif atau tidak.
Namun, jika aplikasi tidak memvalidasi input pengguna dengan benar, seorang penyerang dapat memasukkan input berbahaya seperti:
127.0.0.1; rm -rf /
Input di atas mengandung perintah sistem operasi yang berbahaya, di mana perintah ini akan menghapus semua file di direktori root. Jika input ini diproses oleh aplikasi tanpa validasi, maka perintah tersebut akan dijalankan oleh sistem operasi.
Gambar di atas merupakan contoh eksploitasi command injection dengan menyisipkan perintah uname -a
pada sistem MacOS.
Mitigasi / Antisipasi
Oleh karena itu, penting untuk memvalidasi input pengguna dengan benar dan memastikan bahwa input yang diterima oleh aplikasi adalah yang diharapkan. Contoh cara melindungi aplikasi dari serangan celah command injection termasuk:
- Gunakan fungsi pemfilteran untuk menghapus karakter yang tidak diinginkan dari input pengguna.
- Validasi input dengan memastikan bahwa input sesuai dengan format yang diharapkan.
Dengan mengimplementasikan teknik-teknik ini, celah command injection pada aplikasi web dapat dicegah dan keamanan aplikasi dapat dijaga dengan baik.
Contoh Kasus & Vulnerable Code
Misalkan sebuah aplikasi web memiliki fitur untuk memproses input pengguna yang kemudian dijalankan sebagai perintah sistem operasi di belakang layar. Pengguna diminta untuk memasukkan alamat IP yang akan dipindai untuk mengecek apakah alamat IP tersebut aktif atau tidak.
Namun, jika aplikasi tidak memvalidasi input pengguna dengan benar, seorang penyerang dapat memasukkan input berbahaya seperti:
ip=127.0.0.1; rm -rf /
Di bawah ini merupakan contoh kode PHP yang rentan terhadap command injection:
<?php
$ip = $_POST['ip'];
$result = shell_exec("ping -c 4 " . $ip);
echo $result;
?>
Pada kode di atas, variabel $ip
diambil dari input pengguna menggunakan metode POST dan kemudian digunakan sebagai argumen untuk perintah shell "ping". Namun, kode tersebut tidak melakukan validasi dan sanitasi pada variabel $ip
, sehingga memungkinkan penyerang untuk menyisipkan perintah shell yang tidak diinginkan.
Saya berikan contoh lainnya, jika penyerang memasukkan input berikut ini:
ip=127.0.0.1; ls -la
Maka perintah shell yang dieksekusi akan menjadi:
ping -c 4 127.0.0.1; ls -la
Sehingga perintah “ls -la” juga akan dieksekusi, yang dapat memungkinkan penyerang untuk membaca atau menghapus file yang tidak seharusnya dapat diaksesnya.
Secure Code
Untuk mencegah serangan Command Injection, kode di atas perlu dimodifikasi untuk memvalidasi dan membersihkan input pengguna sebelum menggunakannya dalam perintah shell. Misalnya, dengan menggunakan fungsi escapeshellarg()
untuk membersihkan argumen perintah:
<?php
$ip = $_POST['ip'];
$clean_ip = escapeshellarg($ip);
$result = shell_exec("ping -c 4 " . $clean_ip);
echo $result;
?>
Dengan memperbarui kode seperti ini, karakter khusus seperti tanda kutip (“), titik koma (;), dan tanda kurung (() akan diubah menjadi karakter yang aman sehingga tidak dapat disisipkan dalam perintah shell yang dieksekusi.