Root zranitelnost v sudo, ovlivňující Linux Mint a Elementary OS.

V nástroji sudo, používané k organizaci provádění příkazů jménem jiných uživatelů, byla odhalena zranitelnost (CVE-2019-18634), 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í sudo 1.8.31, 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 chybě 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 bezjmennými kanály 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

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster