Chyba zabezpečení v subsystému eBPF, která umožňuje spouštění kódu na úrovni jádra Linuxu

V subsystému eBPF byla identifikována zranitelnost (CVE-2021-4204), která vám umožňuje spouštět obslužné programy uvnitř linuxového jádra ve speciálním virtuálním počítači s JIT, což umožňuje místnímu neprivilegovanému uživateli dosáhnout eskalace oprávnění a spouštět svůj kód na Úroveň linuxového jádra. Problém se objevuje od linuxového jádra 5.8 a zůstává neopravený (včetně vydání 5.16). Stav aktualizací generovaných k vyřešení 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 pracovní exploit, jehož zveřejnění je plánováno na 18. ledna (uživatelé a vývojáři dostali týden na opravu zranitelnosti).

Chyba zabezpečení je způsobena nesprávným ověřením programů eBPF přenášených ke spuštění. Subsystém eBPF poskytuje pomocné funkce, jejichž správné použití ověřuje speciální ověřovatel. Některé funkce vyžadují předání hodnoty PTR_TO_MEM jako argument, a aby se zabránilo možnému přetečení vyrovnávací paměti, musí ověřovatel znát velikost paměti spojené s argumentem. U funkcí bpf_ringbuf_submit a bpf_ringbuf_discard nebyly ověřovateli hlášeny údaje o velikosti přenesené paměti, které bylo možné použít k přepsání oblastí paměti za hranicí vyrovnávací paměti při provádění speciálně navrženého kódu eBPF.

Aby mohl uživatel provést útok, musí mít možnost nahrát svůj vlastní program BPF a mnoho současných distribucí Linuxu tuto možnost ve výchozím nastavení blokuje (včetně neprivilegovaného přístupu k eBPF je nyní v samotném jádře standardně zakázáno, počínaje verzí 5.16). Zranitelnost lze například zneužít 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 objeví pouze v případě, že správce nastavil parametr kernel.unprivileged_bpf_disabled na 0. Jako náhradní řešení pro zablokování této chyby zabezpečení můžete zabránit spouštění programů BPF neprivilegovanými uživateli pomocí příkazu „sysctl -w kernel.unprivileged_bpf_disabled=1“.

Zdroj: opennet.ru

Přidat komentář