Kingkope egy FreeBSD újabb verzióit érintő, helyi root jogosultság megszerzésére felhasználható exploitot tett közzé a Full-Disclosure listán. A problémát az okozza, hogy a dinamikus linker (Run-Time Link Editor - rtld) rávehető, hogy setugid-es programok (pl. ping) futtatásához mindenek előtt betöltse az LD_PRELOAD környezeti változóban meghatározott dinamikus könyvtárakat, így a setugid állomány csoportjának jogosultságával egy dinamikus könyvtár parancsokat hajthat végre. Jelenleg a FreeBSD 8.0, 7.1 és 7.0 verzióiról bizonyosodott be, hogy sebezhetőek (illetve a 7.0-val kapcsolatban jött ellenkező vélemény is, de volt ahol működött...).
Elemzés olvasható xorl blogján, ha lesz egy kis időm (kizárt dolog :P), csinálok bitvadászatot.
Frissítés: Colin Percival egy gyorsfoltot publikált, nincs kitesztelve, csak saját felelősségre használjátok!
EQ · http://rycon.hu 2009.12.01. 10:35:14
EQ · http://rycon.hu 2009.12.01. 10:59:03
LD_PRELOAD-ot megadja environban és elindítja a suid-os ping-et aminek első körben törölnie kellene az olyan környezeti változókat mint az LD_PRELOAD és még jópárat, felsorolva a kódba. Ezt meg is teszi a kernel az unsetenv() függvénnyel, csakhogy hiába van az jól megírva (és az az által használt függvények is jól), könnyen triggerelhető hiba benne, így vissza is tér a törlés előtt. Viszont az rtld.c-ben nem nézi a visszatérési értéket, így nem derül ki a számára, hogy törölte effektíve a környezeti változót avagy sem. A többi már az LD_PRELOAD története :)
Még egy-két ajánlás van spendertől is illetve a freebsd commitja, amiben fixeli a hibát.
Remélem mentettem neked pár percet és főleg azt h érthetően fogalmaztam :)
Hunger 2009.12.01. 18:42:07
EQ · http://rycon.hu 2009.12.01. 22:45:13
HoaxSpecialist · http://hacker.blog.hu 2009.12.03. 06:19:33
Hunger 2009.12.04. 12:02:11
EQ · http://rycon.hu 2009.12.27. 16:32:16