SUID scripts / revisited
Gabor Zahemszky
ZGabor at CoDe.hu
2001. Május. 16., Sze, 17:10:13 CEST
Sziasztok!
Tan meg vannak akik emlekeznek Zelenak kollega levelere, amibol reszben a
listan, reszben privat levelekben nemi anyazas kerekedett. Osszefoglalva:
ZG Ur (nem en :-) felhivta a tarsasag figyelmet egy, a SysAdmin nevu ujsagban
megjelent cikkre, amely a SUID-es scriptek hatranyairol ertekezett. En
akkor a cikket nem olvastam, de a cimre reagaltam. Mostanra vettem a
faradsagot es elolvastam.
Elso megjegyzes: most mar ertem, hogy honnan vette Zelenak kollega a csh-s
peldajat, amit sajnos elfelejtett kiprobalni az eppen aktualis FBSD
verzion, igy Sziszi kellett, hogy jelezze, nalunk nem mukodik.
Masodik megjegyzes: a cikk sajnos rosszabb, mint vartam: ugyanis olyan
dolgokat ir le, amik jo par eve ismert es _javitott_ hibak. Ugyhogy
aki olvasta volna, annak megsugom:
a) a cikkben emlitett, IFS-attack neven ismert tamadas kb 20 eve
ismert, es tan mar a legelso ksh verzioban javitva van (igaz, ez nem
feltetlenul mondhato el a Bourne-shell-ek mindegyikerol, de ha egyszer ksh-t
javasol a szerzo, akkor ezt nem artana tudni). Amugy egy felmondat.
IFS-attack meg most is hasznalhato, az igaz, hogy a cikkben emlitettol
teljesen eltero modon, es igen nehezen hasznalhato ki script-elleni
tamadasnal, azaz felni nem nagyon kell.
b) a cikkben emlitett tamadas, miszerint elinditom a scriptet, majd
lecserelem egy masikra, _tudtommal_ ugyszinten eleg regota javitva van eleg
sok rendszer kerneljeben - leven ez se ujkeletu huba
c) vegul a tan legugyesebb tamadas, azaz a script 'a;ronda_parancs'
forma lenyegesen egyszerubben megkerulheto lett volna, ha arra hivja fol a
szerzo a figyelmet, hogy a scripten belul a valtozohivatkozasokat $var
helyett "$var" formaban kene hasznalni.
Az mar csak hab a tortan, hogy a szerzo ugy talal tobb hibat a
peldaprogramban a benne levonel, hogy javitas cimszoval O maga csempeszik
bele ujabbakat. (Lasd az O altala belerakott, majd kijavitott tmp-attack.)
Brr. Azert mindenkinek javasolt elolvasni, de sajnos nehany helyen
santitanak mind a peldak, mind a kovetkeztetesek (peldaul az, hogy a - sok
helyen nem mukodo - SUID-os shell script helyett az udvozito megoldas perl
script hasznalata - marmint nyilvan SUID-osan; meg az udvozito a sudo -
ugyanezekkel a scriptekkel; vegul az ugyszinten javasolt C-beli wrapper
hasznalata. Amelyek egyike sem jo megoldas. Ugyanis a jo megoldas:
hibatlan - vagy legalabbis kevesebb hibaval megaldott - programok irasa.)
Azert koszonet a kolleganak, hogy felhivta a figyelmet a cikkre.
ZGabor at CoDe dot HU
--
#!/bin/ksh
Z='21N16I25C25E30, 40M30E33E25T15U!' ;IFS=' ABCDEFGHIJKLMNOPQRSTUVWXYZ ';set $Z ;for i { [[ $i = ? ]]&&print $i&&break;[[ $i = ??? ]]&&j=$i&&i=${i%?};typeset -i40 i=8#$i;print -n ${i#???};[[ "$j" = ??? ]]&&print -n "${j#??} "&&j=;typeset +i i;};IFS=' 0123456789 ';set $Z;X=;for i { [[ $i = , ]]&&i=2;[[ $i = ?? ]]||typeset -l i;X="$X $i";typeset +l i;};print "$X"
További információk a(z) BSD levelezőlistáról