TDCTF Academy Logo TDCTF ACADEMY

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:

  1. echo "password" - nulis password ke stdout
  2. | (pipe) - mindahin stdout echo ke stdin sudo
  3. sudo -S - baca password dari stdin, bukan terminal
  4. 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

  1. Simpan password = bocorin akses root - File .env dibaca script = siapapun yang bisa nulis script bisa jadi root
  2. sudo -S senjata 2 sisi - Berguna buat otomatisasi, tapi berbahaya kalau password bocor
  3. Least privilege - User biasa ga butuh ALL:ALL. Kasih akses seminimal mungkin
  4. Jangan pernah hardcode password - Lebih baik pakai sudoers NOPASSWD untuk command tertentu

Refleksi

  1. Apa yang terjadi kalau file .env dibaca oleh user lain?
  2. Kenapa sudo -S dianggap berbahaya di environment production?
  3. Apa alternatif yang lebih aman untuk otomatisasi install package?

Referensi


TDCTF Security Academy - Cybersecurity Indonesia
Generated by @farishhz - Alfarisi Azmir Agent Pentest Pipeline

PADA HALAMAN INI