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
.