Zraniteľnosť v subsystéme eBPF, ktorá umožňuje spúšťanie kódu na úrovni jadra Linuxu

V subsystéme eBPF bola identifikovaná zraniteľnosť (CVE-2021-4204), ktorá vám umožňuje spúšťať obslužné programy v jadre Linuxu v špeciálnom virtuálnom stroji s JIT, čo umožňuje miestnemu neprivilegovanému používateľovi dosiahnuť eskaláciu privilégií a spustiť svoj kód na Úroveň jadra Linuxu. Problém sa objavuje od jadra Linuxu 5.8 a zostáva neopravený (vrátane vydania 5.16). Stav aktualizácií generovaných na odstránenie problému v distribúciách je možné sledovať na týchto stránkach: Debian, RHEL, SUSE, Fedora, Ubuntu, Arch. Bolo oznámené, že bol vytvorený pracovný exploit, ktorého zverejnenie je plánované na 18. januára (používatelia a vývojári dostali týždeň na opravu zraniteľnosti).

Zraniteľnosť je spôsobená nesprávnym overením programov eBPF odoslaných na vykonanie. Subsystém eBPF poskytuje pomocné funkcie, ktorých správne používanie overuje špeciálny overovač. Niektoré funkcie vyžadujú odovzdanie hodnoty PTR_TO_MEM ako argumentu a aby sa zabránilo možnému pretečeniu vyrovnávacej pamäte, overovateľ musí poznať veľkosť pamäte spojenej s argumentom. Pri funkciách bpf_ringbuf_submit a bpf_ringbuf_discard neboli overovateľovi oznámené údaje o veľkosti prenesenej pamäte, ktoré by sa dali použiť na prepísanie pamäťových oblastí za hranicou vyrovnávacej pamäte pri vykonávaní špeciálne navrhnutého kódu eBPF.

Na vykonanie útoku musí mať používateľ možnosť načítať svoj vlastný program BPF a mnohé najnovšie distribúcie Linuxu túto možnosť predvolene blokujú (vrátane neprivilegovaného prístupu k eBPF je teraz v samotnom jadre štandardne zakázaný, počnúc vydaním 5.16). Zraniteľnosť sa dá napríklad zneužiť v predvolenej konfigurácii v Ubuntu 20.04 LTS, ale v prostrediach Ubuntu 22.04-dev, Debian 11, openSUSE 15.3, RHEL 8.5, SUSE 15-SP4 a Fedora 33 sa zobrazí iba vtedy, ak správca nastavil parameter kernel.unprivileged_bpf_disabled na 0. Ako obísť na zablokovanie tejto chyby zabezpečenia môžete zabrániť spusteniu programov BPF neprivilegovanými používateľmi pomocou príkazu „sysctl -w kernel.unprivileged_bpf_disabled=1“.

Zdroj: opennet.ru

Pridať komentár