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)