V nástroji , používané k organizaci provádění příkazů jménem jiných uživatelů, zranitelnost (), což umožňuje zvýšit své oprávnění v systému na uživatele root. Problém se projevuje od vydání sudo 1.7.1 pouze při použití v souboru /etc/sudoers volby „pwfeedback“, která je ve výchozím stavu deaktivována, ale je aktivována v některých distribucích, jako je Linux Mint a Elementary OS. Problém byl vyřešen ve vydání , vydaném před několika hodinami. V distribucích zůstává zranitelnost zatím neopravená.
Volba „pwfeedback“ zapíná zobrazení znaku „*“ po každém zadaném znaku při zadávání hesla. Kvůli v implementaci funkce getln(), definované v souboru tgetpass.c, může být předaný přes standardní vstup (stdin) příliš dlouhý řetězec hesla za určitých podmínek zapsán do vyhrazeného bufferu a přepsat další data na zásobníku. Přetečení nastává během provádění kódu sudo s právy root.
Podstatou problému je, že při použití speciálního znaku ^U (vymazání řádku) a při selhání operace zápisu se kód odpovědný za vymazání zobrazených znaků „*“ resetuje údaje o dostupné velikosti bufferu, ale nevrací naším hodnotám směrovač na aktuální pozici v bufferu. Dalším faktorem, který napomáhá exploataci, je absence automatického vypínání režimu „pwfeedback“ při příjmu dat ne z terminálu, ale přes vstupní proud (tato nedostatečnost umožňuje vytvořit podmínky pro vznik chyby zápisu, například na systémech s jednosměrnými chyba nastává při pokusu o zápis za konec kanálu pro čtení).
Jelikož útočník může plně ovládat přepis dat na zásobníku, není obtížné vytvořit exploit, který umožní zvýšit své oprávnění na uživatele root. Problém může být zneužit jakýmkoli uživatelem, bez ohledu na práva na používání sudo a přítomnost specifických uživatelských nastavení v sudoers. Pro zablokování problému je třeba se ujistit, že v /etc/sudoers není nastavení „pwfeedback“ a v případě potřeby jej deaktivovat („Defaults !pwfeedback“). Pro ověření přítomnosti problému lze provést kód:
$ perl -e ‘print((«A» x 100 . «\x{00}») x 50)’ | sudo -S id
Heslo: Chyba segmentace
Zdroj: opennet.ru
