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

V subsystému eBPF byly identifikovány dvě nové zranitelnosti, které vám umožňují spouštět handlery uvnitř linuxového jádra ve speciálním virtuálním stroji s JIT. Obě chyby zabezpečení umožňují spouštět váš kód s právy jádra mimo izolovaný virtuální stroj eBPF. Informaci o problémech zveřejnil tým Zero Day Initiative, který provozuje soutěž Pwn2Own, během níž byly letos demonstrovány tři útoky na Ubuntu Linux, které využívaly dosud neznámé zranitelnosti (zda zranitelnosti v eBPF s těmito útoky souvisejí, není hlášeno) .

  • CVE-2021-3490 – Chyba zabezpečení je způsobena nedostatkem 32bitové kontroly mimo hranice při provádění bitových operací AND, OR a XOR v eBPF ALU32. Útočník může využít této chyby ke čtení a zápisu dat mimo hranice přidělené vyrovnávací paměti. Problém s operacemi XOR se objevuje od verze jádra 5.7-rc1 a AND a OR - od verze 5.10-rc1.
  • CVE-2021-3489 – Chyba zabezpečení je způsobena chybou v implementaci kruhové vyrovnávací paměti a je způsobena skutečností, že funkce bpf_ringbuf_reserve nezkontrolovala možnost, že by velikost oblasti přidělené paměti mohla být menší než skutečná velikost z ringbuf. Problém se objevuje od vydání 5.8-rc1.

Stav opravných zranitelností v distribucích lze sledovat na těchto stránkách: Ubuntu, Debian, RHEL, Fedora, SUSE, Arch). Opravy jsou také k dispozici jako opravy (CVE-2021-3489, CVE-2021-3490). Zda lze problém zneužít, závisí na tom, zda je systémové volání eBPF přístupné uživateli. Například ve výchozí konfiguraci v RHEL vyžaduje zneužití chyby zabezpečení, aby měl uživatel práva CAP_SYS_ADMIN.

Samostatně si můžeme všimnout další zranitelnosti v jádře Linuxu - CVE-2021-32606, která umožňuje místnímu uživateli zvýšit svá oprávnění na kořenovou úroveň. Problém je zřejmý od linuxového jádra 5.11 a je způsoben sporem v implementaci protokolu CAN ISOTP, který umožňuje změnit parametry vazby soketu kvůli chybějícímu nastavení správných zámků ve funkci isotp_setsockopt() při zpracování příznaku CAN_ISOTP_SF_BROADCAST.

Po uzavření soketu ISOTP zůstane v platnosti vazba na soket příjemce, který může pokračovat v používání struktur přidružených k soketu poté, co se uvolní paměť s nimi spojená (use-after-free kvůli volání isotp_rcv() přístup k již uvolněné struktuře isotp_sock). Prostřednictvím manipulace s daty můžete přepsat ukazatel na funkci sk_error_report() a spustit svůj kód na úrovni jádra.

Zdroj: opennet.ru

Přidat komentář