Az eBPF alrendszerében, amely lehetővé teszi az írók indítását a Linux kernelén belül egy speciális virtuális gépen JIT-tel, egy sebezhetőséget (CVE-2021-4204) fedeztek fel, amely lehetővé teszi, hogy egy helyi, nem privilegizált felhasználó jogosultságokat szerezzen és kódot futtasson a Linux kernel szintjén. A probléma a Linux 5.8-as verziójától kezdődően jelentkezik és egyelőre még nem javították (érinti a 5.16 kiadást is). A problémával kapcsolatos frissítések állapotát a következő oldalakon lehet nyomon követni: Debian, RHEL, SUSE, Fedora, Ubuntu, Arch. Bejelentették egy működő exploit elkészítését, amelyet január 18-án terveznek közzétenni (a felhasználóknak és fejlesztőknek egy hét áll rendelkezésükre a sebezhetőség megszüntetésére).
A sebezhetőséget a végrehajtásra szánt eBPF programok helytelen ellenőrzése okozza. Az eBPF alrendszer segédfunkciókat biztosít, amelyek használatát egy speciális ellenőr ellenőrzi. Néhány funkció megköveteli, hogy a PTR_TO_MEM érték kerüljön átadásra argumentumként, és hogy elkerüljük a potenciális puffertúlfutásokat, az ellenőrnek ismernie kell az argumentumhoz kapcsolódó memória méretét. A bpf_ringbuf_submit és bpf_ringbuf_discard funkcióknál a memória méretére vonatkozó információk nem voltak közölve az ellenőrrel, ami lehetőséget adott a memória területek felülírására a pufforon kívül, a speciálisan megformált eBPF kód végrehajtása során.
A támadáshoz a felhasználónak lehetőséget kell biztosítania a saját BPF programjának betöltésére, és sok újabb Linux disztribúció alapértelmezés szerint letiltja ezt a lehetőséget (beleértve a nem privilegizált hozzáférést is, amely most alapértelmezés szerint le van tiltva a kernel szintjén, a 5.16 kiadástól kezdődően). Például a sebezhetőség kihasználható az alapértelmezett konfigurációnál az Ubuntu 20.04 LTS-ben, de az Ubuntu 22.04-dev, Debian 11, openSUSE 15.3, RHEL 8.5, SUSE 15-SP4 és Fedora 33 környezetekben csak akkor lép fel, ha az adminisztrátor a kernel.unprivileged_bpf_disabled paramétert 0-ra állította. A sebezhetőség blokkolásának alternatív megoldásaként tiltható a BPF programok végrehajtása nem privilegizált felhasználók számára a „sysctl -w kernel.unprivileged_bpf_disabled=1” paranccsal.
Forrás: opennet.ru
