V OpenBSD byla 37 let stará chyba umožňující získání roota

OpenBSD Autor: Petr Hercík

Bezpečnostní firma Calif zveřejnila exploit, který na OpenBSD 7.9 umožňuje lokální eskalaci oprávnění a získání oprávnění roota. Útok skládá dohromady dvě chyby v jádře: celočíselné přetečení čítače připojení sdílené paměti a následnou chybu typu use-after-free. Přestože jedna ze slabin sahá až ke kódu BSD z roku 1988, samotný útok není vzdálený a útočník musí mít předem možnost spouštět na systému vlastní procesy.

Vstupním bodem je systémové volání shmat(), které připojuje segmenty sdílené paměti k adresnímu prostoru procesu. Jádro v něm udržuje čítač shm_nattch jako 16bitové číslo typu short se znaménkem, jehož maximum je 32 767. Exploit vytvoří 127 segmentů sdílené paměti a následně 259 procesů. Tím čítač přeteče a jeho hodnota se změní na −32 643.

Záporný čítač pak rozbije správu objektu. Jádro uvolní paměť, kterou přitom jiné procesy stále používají, a vznikne tak souběh vedoucí k use-after-free. Exploit pak využije další zápis mimo vyhrazenou oblast a přepíše čítače členství v multicastových skupinách. Při zavření příslušného socketu se tyto čítače sníží a změna se promítne do položek tabulky stránek. Výsledkem je možnost upravovat uživatelskou paměť z privilegovaného režimu.

Tím útok překoná hardwarové ochrany SMAP a SMEP, které mají jádru bránit v přístupu k uživatelským stránkám, respektive procesoru ve vykonávání kódu z nich v režimu jádra. Nakonec exploit přepíše ukazatel na funkci v jádře a přesměruje jeho běh na vlastní kód.

OpenBSD obě chyby opravilo v září, obě opravy jsou dostupné přes syspatch pro OpenBSD 7.9. Oprava přetečení byla vydána také pro verzi 7.8. Podle zveřejněných informací nebylo chybám přiděleno CVE a nejsou známé případy jejich zneužití v praxi.

(Zdroj: The Hacker News)

Našli jste v článku chybu?

Autor zprávičky

Petr Krčmář pracuje jako šéfredaktor serveru Root.cz. Studoval počítače a média, takže je rozpolcen mezi dva obory. Snaží se dělat obojí, jak nejlépe umí.