Az eBPF alrendszer biztonsági rése, amely lehetővé teszi a Linux kernel szintjén történő kódfuttatást

Egy sebezhetőséget (CVE-2021-4204) azonosítottak az eBPF alrendszerben, amely lehetővé teszi kezelők futtatását a Linux kernelen belül egy speciális virtuális gépen JIT-vel, lehetővé téve a helyi, jogosulatlan felhasználók számára a jogosultságok kiszélesítését és a kód végrehajtását a Linux kernel szinten. A probléma a Linux kernel 5.8-as verziója óta jelentkezik, és továbbra is megoldatlan (beleértve az 5.16-os kiadást is). A disztribúciók problémájának megoldására generált frissítések állapota a következő oldalakon követhető nyomon: Debian, RHEL, SUSE, Fedora, Ubuntu, Arch. Bejelentették, hogy elkészült egy működő exploit, amelyet a tervek szerint január 18-án tesznek közzé (a felhasználók és a fejlesztők egy hetet kaptak a sérülékenység kijavítására).

A sérülékenységet a végrehajtásra továbbított eBPF programok helytelen ellenőrzése okozza. Az eBPF alrendszer olyan segédfunkciókat biztosít, amelyek helyes használatát speciális hitelesítő ellenőrzi. Egyes függvények megkövetelik a PTR_TO_MEM érték átadását argumentumként, és az esetleges puffertúlcsordulás elkerülése érdekében az ellenőrzőnek ismernie kell az argumentumhoz tartozó memória méretét. A bpf_ringbuf_submit és bpf_ringbuf_discard függvények esetében az átvitt memória méretére vonatkozó adatokat nem jelentették az ellenőrzőnek, amelyek a pufferhatáron túli memóriaterületek felülírására használhatók speciálisan tervezett eBPF kód végrehajtásakor.

A támadás végrehajtásához a felhasználónak be kell tudnia tölteni saját BPF-programját, és sok újabb Linux-disztribúció alapértelmezés szerint blokkolja ezt a képességet (többek között az eBPF-hez való jogosulatlan hozzáférést alapértelmezés szerint magában a kernelben tiltják, az 5.16-os kiadástól kezdve). A sérülékenység például az Ubuntu 20.04 LTS alapértelmezett konfigurációjában kihasználható, de az Ubuntu 22.04-dev, Debian 11, openSUSE 15.3, RHEL 8.5, SUSE 15-SP4 és Fedora 33 környezetben csak akkor jelenik meg, ha a rendszergazda beállította a kernel.unprivileged_bpf_disabled paramétert 0-ra. A biztonsági rés blokkolásának elkerülő megoldásaként a „sysctl -w kernel.unprivileged_bpf_disabled=1” paranccsal megakadályozhatja a BPF-programok jogosulatlan felhasználók általi futtatását.

Forrás: opennet.ru

Hozzászólás