Nemivam ve zvyku jsem preposilat upozorneni na bezpecnosni chyby (a uz vubec ne reprodukovat je vlastnimi slovy), nakonec, vazni zajemci jsou jiste prihlaseni v listu pro takove zpravy vyhrazenem, ale tentokrat udelam vyjimku, protoze jde o velmi nebezpecnou chybu a oficialni security advisory se stale jeste pripravuje.

Tyka se pouze stroju, na kterych jsou neprivilegovani uzivatele (ti, kteri nemaji, a co je podstatne - ani nadale nemaji mit - opravneni superuzivatele). Druhou podminkou je, ze taci uzivatele musi mit k dispozici alespon jeden dynamicky linkovany root-suid program (na beznych instalacich splneno bez problemu - treba ping).

Uz davno se vi, ze moznost premluvit systemovy dynamicky linker aby k suid programu prilinkoval jinou knihovnu nez autor puvodne zamyslel je bezpecnostni chyba. Proto se system chova tak, ze kdyz zjisti, ze js spousten suid program a soucasne jsou nastaveny environmentove promenne pozadujici zmenu linkovacich pravidel pak environmentove promenne zrusi (program se tak spousti podle defaultnich pravidel).

Kvuli netestovani navratovych hodnot systemovych funkci (coz zpusobi, ze se nepozna, ze se pozadovana akce ve skutecnosti nepovedla) se ale da dosahnout stavu, ze linker environmentove promenne nezrusi (on se pokusi, ale nepovede se mu to) a program spusti. Tim se uzivatelsky kod snadno dostane k rootovskym opravnenim.

Zajistit, aby se volani unsetenv() nepovedlo je pomerne snadne - staci program spustit s poskozenym environmentem.

Chyba je nebezpecna tim, ze je velmi snadno pochoptelna a vyuzitelna i lidmi, kteri maji minimum "prunikarskych" zkusenosti - staci trocha zkusenosti programatorskych.

Pokdu si k tomu budete hledat dalsi informace muzete narazit na dohady, ktere verze jsou napadnutelne. Podle meho nazoru jsou napadnutelne v teto chvili naprosto vsechny 7.x a novejsi a ze starsich take 6.3 a 6.4.

Na ohrozenych systemech je treba vymenit ld-elf.so.1 (u AMT64 systemu take ld-elf32.so.1). Patch pro 8.x/HEAD je zde:

http://www.freebsd.org/cgi/cvsweb.cgi/src/libexec/rtld-elf/rtld.c.diff?r1=1.144;r2=1.145

pro 7.x:

http://www.freebsd.org/cgi/cvsweb.cgi/src/libexec/rtld-elf/rtld.c.diff?r1=1.124.2.6;r2=1.124.2.7

Nanestesti, pro 6.3/6.4 neni trivialni oprava mozna (protoze unsetenv() zde nevraci navratovou hodnotu). Mozna to je ta posledni kapka, ktera by mela zacit spravce od zastaravajici 6.4 vyhanet.

Jeste jednou - stroju, kde nejsou lokalni neprivilegovani uzivatele se problem netyka.


                                                Dan
--
FreeBSD mailing list (users-l@freebsd.cz)
http://www.freebsd.cz/listserv/listinfo/users-l

Odpovedet emailem