Hlavní navigace

Bezpečnostní chyba v sudo dovoluje získat práva roota

Petr Krčmář

V linuxové verzi příkazu sudo mezi verzemi 1.8.6p7 a 1.8.20 včetně byla objevena vážná bezpečnostní chyba, která dovoluje místnímu uživateli získat oprávnění roota. Stačí mu k tomu právo spouštět alespoň jeden příkaz pomocí sudo. Bug je opraven v sudo verze 1.8.20p1 a distribuce už začaly s aktualizacemi. Určitě si pohlídejte, že máte záplatovanou verzi.

Chyba se nachází ve funkci get_process_ttyname(), která načítá soubor /proc/[pid]/stat a čte číslo tty z položky 7 (tty_nr). Jednotlivé položky jsou oddělené mezerami a funkce nepočítá s tím, že by položka číslo 2 (jméno souboru) mohla obsahovat mezeru. Útočník tedy spustí sudo pomocí symlinku, který obsahuje mezeru následovanou číslem neexistujícího pseudoterminálu.

Poté začne funkce sudo_ttyname_scan() prohledávat adresář /dev a snaží se zmíněný terminál najít. Místní uživatel pak může využít zapisovatelný adresář /dev/shm a předstírat, že znakovým zařízením je libovolný soubor na disku. S využitím souběhu je pak možné tento soubor použít jako standardní vstup a výstup příkazu sudo a zapsat do něj libovolná data. Výsledkem tak může být plná eskalace práv třeba pomocí zápisu do  /etc/passwd.

(Zdroje: OpenWall, Debian, Red Hat)

Našli jste v článku chybu?