Algemene aanvallen

Deze aanvallen zijn niet specifiek voor scripts. Sommige gewone programma's hebben (of hadden) er ook last van. Toch zullen ze meer in scripts voorkomen omdat de programmeurs van scripts vaak een beetje aanrommelen, terwijl programma's meestal door echte programmeurs worden geschreven.

Symlink attack

#!/bin/sh

grep "Chapter" chap01.txt > /tmp/chapters.tmp
echo "Number of chapters:"
wc -l /tmp/chapters.tmp
echo "Names of chapters:"
cat /tmp/chapters.tmp
rm /tmp/chapters.tmp

Dit script telt het aantal hoofdstukken in chap01.txt en meld vervolgens de titels van deze hoofdstukken. Hiervoor gebruikt het een tijdelijk bestand /tmp/chapters.tmp. Helaas kan elke gebruiker in de /tmp directory schrijven, en gebruiker h4x0r maakt hier gebruik van: hij maakt een symlink van /tmp/chapters.tmp naar bijvoorbeeld /etc/shadow en wacht tot het script uitgevoerd wordt door de root (die bezig is een boek over veilige scripts schrijven). Zodra dit gebeurt, wordt /etc/shadow overschreven door wat onnuttige hoofdstuk-namen en is het onmogelijk geworden om in te loggen op het systeem.

De root-gebruiker had natuurlijk nooit zijn root-account mogen gebruiken voor het schrijven van een boek, maar het bovenstaande script is natuurlijk ook een voorbeeld. Bedenk de gevolgen als een script data naar een bestand schrijft wat door de gebruiker te beinvloeden is:

#!/bin/sh

grep "porn" /var/spool/mail/* >> /tmp/email.log
cat /tmp/email.log | mail -s "Someone is mailing porn around!" sysadmin
rm /tmp/email.log

Bovenstaand script kan gebruikt worden door de systeembeheerder om tegen te gaan dat mensen tijdens werktijd zich vermaken met onnodig bloot. Als een hacker van dit script af weet kan hij vrij gemakkelijk het systeem aanvallen. Het enige wat hij hoeft te doen is een symlink te maken van /tmp/email.log naar /etc/passwd en iemand een e-mail te sturen met de volgende tekst op een regel:

porn::0:0::/:

De persoon die het mailtje leest zal waarschijnlijk niet eens doorhebben wat dit is en het negeren. De hacker heeft ondertussen een account "porn" erbij gemaakt, met superuser rechten.

Kritieke races

TEMPFILE=/tmp/bla.$$
test -x TEMPFILE && exit 1
...

Om bovenstaande aanval met symlinks onmogelijk te maken, wordt in dit script getest of het bestand al bestaat. Als het niet bestaat gaat het script gewoon door, maar als het al bestaat is dat een teken van een mogelijke aanval en stopt het script meteen.

Dit lijkt misschien heel veilig, maar als het een hacker lukt om de symlink te installeren precies nadat de test is uitgevoerd, lukt het hem alsnog om een bepaald bestand te overschrijven. Het vereist goede timing om deze actie tot een succes te leiden, maar het is zeker niet onmogelijk.