Chyby zabezpečení v subsystému eBPF linuxového jádra

V subsystému eBPF byla identifikována zranitelnost (CVE-2021-29154), která vám umožňuje spouštět obslužné programy pro trasování, analýzu provozu subsystémů a správu provozu, spouštěné uvnitř linuxového jádra ve speciálním virtuálním stroji s JIT, který umožňuje místního uživatele, aby dosáhl spuštění svého kódu na úrovni jádra. Problém se objevuje až do vydání 5.11.12 (včetně) a dosud nebyl opraven v distribucích (Debian, Ubuntu, RHEL, Fedora, SUSE, Arch). Oprava je k dispozici jako patch.

Podle výzkumníků, kteří zranitelnost identifikovali, byli schopni vyvinout funkční prototyp exploitu pro 32bitové a 64bitové systémy x86, který může používat neprivilegovaný uživatel. Red Hat však poznamenává, že závažnost problému závisí na tom, zda je systémové volání eBPF přístupné uživateli. Například na RHEL a většině ostatních distribucí Linuxu ve výchozí konfiguraci lze tuto chybu zabezpečení zneužít, pokud je povolena funkce BPF JIT a uživatel má práva CAP_SYS_ADMIN. Jako řešení se doporučuje zakázat BPF JIT pomocí příkazu: echo 0 > /proc/sys/net/core/bpf_jit_enable

Problém je způsoben chybou ve výpočtu offsetu pro instrukce větve během procesu generování strojového kódu kompilátoru JIT. Zejména při generování instrukcí pro větvení se nebere v úvahu, že se offset může změnit po průchodu fází optimalizace. Tuto chybu lze použít ke generování anomálního strojového kódu a jeho spuštění na úrovni jádra.

Je pozoruhodné, že to není jediná zranitelnost v subsystému eBPF v poslední době. Na konci března byly v jádře identifikovány další dvě zranitelnosti (CVE-2020-27170, CVE-2020-27171), díky nimž je možné pomocí eBPF obejít ochranu proti zranitelnostem třídy Spectre, které umožňují určit obsah paměti jádra v důsledku vytváření podmínek pro spekulativní provádění určitých operací . Útok Spectre vyžaduje přítomnost určité sekvence příkazů v privilegovaném kódu, která vede ke spekulativnímu provádění instrukcí. V eBPF bylo nalezeno několik způsobů, jak generovat takové instrukce prostřednictvím manipulací s programy BPF přenášenými k provedení.

Chyba zabezpečení CVE-2020-27170 je způsobena manipulací s ukazatelem v ověřovači BPF, která způsobuje spekulativním operacím přístup k oblasti mimo hranice vyrovnávací paměti. Chyba zabezpečení CVE-2020-27171 je způsobena chybou podtečení celého čísla při práci s ukazateli, což vede ke spekulativnímu přístupu k datům mimo vyrovnávací paměť. Tyto problémy již byly opraveny ve vydáních jádra 5.11.8, 5.10.25, 5.4.107, 4.19.182 a 4.14.227 a byly také zahrnuty do aktualizací jádra pro většinu distribucí Linuxu. Výzkumníci připravili prototyp exploitu, který umožňuje neprivilegovanému uživateli extrahovat data z paměti jádra.

Zdroj: opennet.ru

Přidat komentář