Pasang Aplikasi Tanpa Mengetahui Password Sudo
Overview
Pernah lihat saya install ntfs-3g dan samba
padahal cuma lewat chat Telegram? Saya tidak perlu tahu password
sudo secara interaktif - cukup modal file script
.sh dan password sekali simpan.
Bayangkan begini: Kamu kasih orang kunci rumah, tapi orang itu tinggal di luar kota. Selama masih pegang kuncinya, dia bisa masuk kapan aja tanpa minta izin lagi.
Teknik: Echo Pipe ke sudo -S
Perintah sudo biasanya butuh terminal interaktif untuk
minta password. Tapi ada flag -S yang bikin sudo baca
password dari stdin (input stream), bukan dari
keyboard.
Cara Kerja
echo "password_rahasia" | sudo -S apt install -y nginx
Penjelasan:
echo "password"- nulis password ke stdout|(pipe) - mindahin stdoutechoke stdinsudosudo -S- baca password dari stdin, bukan terminal- Kalau password cocok, perintah jalan dengan privilege root
Tanpa Pipe (Normal)
sudo apt install nginx
# Terminal: "Password for labkom:"
# User: [mengetik manual]
Dengan Pipe (From Script)
#!/bin/bash
echo "labkom" | sudo -S apt install -y nginx
# Tidak perlu interaksi - langsung jalan
Kenapa Ini Bisa Terjadi di Server Ini?
Ada 3 faktor yang membuat teknik ini berhasil:
1. User labkom Punya Sudo Access
labkom ALL=(ALL:ALL) ALL
Artinya user labkom bisa menjalankan perintah APAPUN
sebagai root. Cuma butuh password yang benar.
2. Password Disimpan di File
Saya tulis password ke /home/labkom/.env:
SUDO_PASSWORD=labkom
Trus script bash tinggal baca dari situ:
PASS=$(grep SUDO_PASSWORD /home/labkom/.env | cut -d= -f2)
echo "$PASS" | sudo -S apt install -y samba
3. Script Bash Bisa Dieksekusi
Saya bikin file .sh, isi dengan perintah sudo + pipe,
lalu jalankan:
bash /home/labkom/install.sh
Selesai. Tanpa sekali pun minta password interaktif.
Dampak Keamanan
| Aspek | Risiko |
|---|---|
| Password di file | Siapa pun yang bisa baca .env tahu password
sudo |
| No audit trail | Perintah jalan tanpa jejak di terminal user |
| Remote execution | Attacker cukup akses shell (lewat web/cron) untuk eksekusi root |
| Privilege escalation | Dari user biasa langsung jadi root tanpa autentikasi ulang |
Remediasi
1. Hapus Password dari File .env
rm /home/labkom/.env
# Atau hapus baris SUDO_PASSWORD
2. Gunakan sudoers NOPASSWD (Lebih Aman dari Simpan Password)
Edit /etc/sudoers.d/labkom:
labkom ALL=(ALL) NOPASSWD: /usr/bin/apt, /usr/bin/systemctl
Ini lebih aman karena:
- Tidak ada password disimpan di file
- Cuma perintah tertentu yang bisa dijalankan tanpa password
- Tidak bisa dipipe via
sudo -S
3. Batasi sudo Access
Jangan kasih ALL:ALL ALL. Kasih perintah spesifik aja:
labkom ALL=(ALL) /usr/bin/apt, /bin/mount, /bin/umount
4. Aktifkan Logging sudo
Semua perintah sudo tercatat di /var/log/auth.log:
tail -f /var/log/auth.log | grep sudo
5. Jangan Gunakan Password Sederhana
Password labkom terlalu mudah ditebak. Gunakan password
kuat + beda dengan username.
Lessons Learned
- Simpan password = bocorin akses root - File
.envdibaca script = siapapun yang bisa nulis script bisa jadi root sudo -Ssenjata 2 sisi - Berguna buat otomatisasi, tapi berbahaya kalau password bocor- Least privilege - User biasa ga butuh
ALL:ALL. Kasih akses seminimal mungkin - Jangan pernah hardcode password - Lebih baik pakai sudoers NOPASSWD untuk command tertentu
Refleksi
- Apa yang terjadi kalau file
.envdibaca oleh user lain? - Kenapa
sudo -Sdianggap berbahaya di environment production? - Apa alternatif yang lebih aman untuk otomatisasi install package?
Referensi
- sudo man page - -S flag
- OWASP - Insecure Direct Object Reference (analog: file .env = objek yang tidak seharusnya terekspos)
- CWE-798 - Use of Hard-coded Credentials
- Ubuntu Sudoers Guide
TDCTF Security Academy - Cybersecurity Indonesia
Generated by @farishhz - Alfarisi Azmir Agent Pentest Pipeline