Jak vykonat skript suid

Pavel Kankovsky peak na argo.troja.mff.cuni.cz
Sobota Únor 5 13:49:02 CET 2000


On Fri, 4 Feb 2000, Petr Simek wrote:

>   execl("/bin/sh", "/bin/sh", "/usr/bin/my-killlprm.sh", NULL);
> 
> V tom skriptu jsou radky -
> 
>   #!/bin/sh
>   sleep 3
>   IDS=`ps -axf | grep "lpd LPRM" | grep -v grep | awk '{print $1}'`

Nerad to rikam, ale mate tam IMHO diru velkou jak vrata do hangaru, ve
kterem Amici montovali rakety Saturn 5. A jestli do toho programu pridate
prikaz setreuid(geteuid(), -1), ktery tady byl doporucovan (a uz nic
jineho), tak tu diru akorat poradne posichrujete.

Vyzkousejte si treba toto (bez zaruky):

	mkdir /tmp/sploit
	cat >/tmp/sploit/sleep <<EOF
	#!/bin/sh
	echo 'you are own3d'
	EOF
	chmod +x /tmp/sploit/sleep
	PATH=/tmp/sploit:$PATH program

To, ze nejde delat set[ug]id skripty, ma jednu trivialni a jednu hlubsi
pricinu (nejmene). Ta trivialni je ta, ze bez urcitych triku ze strany
jadra je tam race condition (1. jadro otevre skript, 2. podiva se na
nej, 3. zavre skript, 4. jadro spusti se intepreter se jmenem skriptu,
5. interpreter otevre skript...pritom mezi 1. a 5. muze dojit k tomu, ze
jmeno zacne znamenat neco jineho), ta hlubsi je v tom, ze skutecna
semantika programu ve skriptovacim jazyce (specialne sh a spol.) je
typicky velice zavisla na "zivnotnim prostredi" procesu (environment,
umask, cwd, rlimity, otevrene soubory, obsluha signalu a urcite jeste
neco), ktere je prakticky uplne v rukach nepritele. Program, ktery
provede dostatecne bezpecnou sanaci tohoto prostredi, neni vubec
trivialni zalezitost.

--Pavel Kankovsky aka Peak  [ Boycott Microsoft--http://www.vcnet.com/bms ]
"Resistance is futile. Open your source code and prepare for assimilation."



Další informace o konferenci Linux