V subsystému eBPF, který umožňuje spouštění zpracovatelů uvnitř jádra Linux v speciální virtuální stroji s JIT, byla nalezena zranitelnost (CVE-2021-4204), která umožňuje místnímu nepřidělenému uživateli získat vyšší oprávnění a spustit svůj kód na úrovni jádra Linux. Problém se projevuje od jádra Linux 5.8 a zatím zůstává neopravený (týká se i vydání 5.16). Stav přípravy aktualizací k odstranění problému v distribucích lze sledovat na těchto stránkách: Debian, RHEL, SUSE, Fedora, Ubuntu, Arch. Bylo oznámeno, že byl vytvořen funkční exploit, který se plánuje publikovat 18. ledna (uživatelům a vývojářům byla dána týdenní lhůta k odstranění zranitelnosti).
Zranitelnost byla způsobena nesprávnou kontrolou předávaných eBPF programů k vykonání. Subsystém eBPF poskytuje pomocné funkce, jejichž správnost používání kontroluje speciální verifikátor. Některé funkce vyžadují předání hodnoty PTR_TO_MEM jako argumentu a pro zabránění možnému přetečení vyrovnávací paměti musí verifikátor znát velikost paměti související s argumentem. Pro funkce bpf_ringbuf_submit a bpf_ringbuf_discard nebyly informace o velikosti předávané paměti oznámeny verifikátoru, což mohlo být využito k přepsání oblastí paměti mimo vyrovnávací paměť při vykonávání speciálně vytvořeného eBPF kódu.
Pro provedení útoku musí mít uživatel možnost nahrát svůj BPF program, a mnoho nových distribucí Linuxu tuto možnost ve výchozím nastavení blokuje (včetně nepřiděleného přístupu k eBPF, který je nyní ve výchozím nastavení zakázán i v samotném jádře, počínaje vydáním 5.16). Například zranitelnost může být využita ve výchozí konfiguraci v Ubuntu 20.04 LTS, ale v prostředích Ubuntu 22.04-dev, Debian 11, openSUSE 15.3, RHEL 8.5, SUSE 15-SP4 a Fedora 33 se projevuje pouze tehdy, pokud administrátor nastavil parametr kernel.unprivileged_bpf_disabled na hodnotu 0. Jako obcházení blokování zranitelnosti je možné zakázat vykonávání BPF programů nepřiděleným uživatelům příkazem „sysctl -w kernel.unprivileged_bpf_disabled=1“.
Zdroj: opennet.ru
