PATH Hijacking — Root Script Calls Binary by Relative Name
Root tarafindan calistirilan bir SUID binary veya sudo betigi, bir komutu mutlak yol yerine goreli isimle (orn. 'cat', 'service') cagiriyorsa; saldirgan kontrol ettigi bir dizini PATH'in basina ekleyip ayni isimde sahte bir binary birakarak root yetkisiyle kod calistirir.
- Dusuk yetkili shell (user)
- Root olarak calisan ve goreli komut cagiran bir SUID binary veya sudo izinli betik
- Yazilabilir bir dizin ve PATH'i degistirebilme imkani
Komutlar
strings /usr/local/bin/{{USER}}_helper export PATH=/tmp:$PATH echo -e '#!/bin/bash\n/bin/bash -p' > /tmp/service && chmod +x /tmp/service echo 'int main(){ setuid(0); setgid(0); system("/bin/bash -p"); return 0; }' > /tmp/cat.c && gcc /tmp/cat.c -o /tmp/cat sudo PATH=/tmp:$PATH /usr/local/bin/{{USER}}_helper find / -perm -4000 -type f 2>/dev/null sudo -l Mantik
PATH hijacking, root yetkisiyle calisan bir programin (SUID binary ya da sudo ile calistirilan bir betik) bir alt komutu mutlak yol yerine goreli isimle cagirmasina dayanir. Ornegin program icinde system("service apache2 start") veya system("cat /etc/...") gibi bir cagri varsa, kabuk komutu $PATH icinde sirayla arar. Saldirgan, yazilabilir bir dizini PATH’in basina koyup ayni isimde sahte bir binary birakirsa, kendi kodu root olarak calisir.
Enumeration
Ilk adim, root olarak calisan ve goreli komut cagiran bir hedef bulmaktir:
find / -perm -4000 -type f 2>/dev/nullile ozel SUID binary’leri tespit et. Sistem disi / yerel (orn./usr/local/bin,/opt) binary’ler oncelikli adaylardir.stringsile binary icinde komut isimlerini ara.cat,ps,id,service,cp,chmodgibi isimler slash icermeden geciyorsa goreli cagri ihtimali yuksektir.- Yetkili betikler icin
sudo -lciktisini incele.(root) NOPASSWD: /path/script.shgibi bir kayit ve betigin icinde goreli komut cagrisi PATH hijack’a acik olabilir.
Exploitation
Temel akis: kontrol edilen dizini PATH’in basina al, hedefin cagirdigi komut adiyla bir payload birak, sonra hedefi tetikle.
- Sahte komut bir script olabilir (
#!/bin/bash+/bin/bash -p). Burada-pkritik: bash, EUID ile gercek UID farkliysa normalde yetkileri dusurur;-pbunu engeller ve root shell verir. - SUID binary
bashshell yerine dogrudanexecvpile compiled bir binary cagiriyorsa veya script’in-pile bile yetkisi dususuyorsa,setuid(0); setgid(0); system("/bin/bash")iceren bir C binary derlemek daha guvenilirdir. - Tetikleme: SUID binary icin dogrudan binary’yi calistir; sudo betigi icin
sudo /path/script.shile cagir.
Sudo Yolu ve Gotcha’lar
sudocogu dagitimdasecure_pathkullanir; bu durumda sudo, kendi sabit PATH’ini dayatir ve env’den gelen PATH yok sayilir — bu durumda sudo uzerinden PATH hijack calismaz.sudo -lciktisindakienv_resetvesecure_pathsatirlarini kontrol et.- Eger sudoers’ta
Defaults env_keep += "PATH"veya betigeSETENV:etiketi varsa,sudo PATH=/tmp:$PATH ...ile PATH korunur ve hijack mumkun olur. - SUID binary’lerde
secure_pathyoktur; sinirlama sadece bash’in privilege drop davranisidir — bunu-pveya Csetuid(0)ile asariz. - Payload dizini olarak
/tmppratiktir ama betigin calistigi cwd’yi de degerlendir. Bazen./PATH’te varsa (cok nadir) cwd’ye payload birakmak yeterlidir. - Isi bitince
/tmpicindeki sahte binary’leri temizle ve PATH’i eski haline dondur (cleanup).