Ranjivost u podsustavu eBPF koja dopušta izvršavanje koda na razini Linux kernela

U podsustavu eBPF identificirana je ranjivost (CVE-2021-4204), koja vam omogućuje pokretanje rukovatelja unutar Linux kernela u posebnom virtualnom računalu s JIT-om, omogućujući lokalnom neprivilegiranom korisniku da postigne eskalaciju privilegija i izvrši svoj kod na Razina jezgre Linuxa. Problem se pojavljuje od Linux kernela 5.8 i ostaje neriješen (uključujući izdanje 5.16). Status ažuriranja koja se generiraju za rješavanje problema u distribucijama može se pratiti na ovim stranicama: Debian, RHEL, SUSE, Fedora, Ubuntu, Arch. Objavljeno je da je napravljen radni exploit koji se planira objaviti 18. siječnja (korisnici i programeri dobili su tjedan dana da poprave ranjivost).

Ranjivost je uzrokovana netočnom provjerom eBPF programa poslanih na izvršenje. Podsustav eBPF pruža pomoćne funkcije čiju ispravnu upotrebu provjerava poseban verifikator. Neke funkcije zahtijevaju prosljeđivanje vrijednosti PTR_TO_MEM kao argumenta, a kako bi spriječio moguća prekoračenja međuspremnika, verifikator mora znati veličinu memorije pridružene argumentu. Za funkcije bpf_ringbuf_submit i bpf_ringbuf_discard, podaci o veličini prenesene memorije nisu prijavljeni verifikatoru, što se može koristiti za prepisivanje memorijskih područja izvan granice međuspremnika prilikom izvršavanja posebno dizajniranog eBPF koda.

Da bi izvršio napad, korisnik mora biti u mogućnosti učitati vlastiti BPF program, a mnoge novije Linux distribucije blokiraju ovu mogućnost prema zadanim postavkama (uključujući neprivilegirani pristup eBPF-u sada je prema zadanim postavkama zabranjen u samoj jezgri, počevši od izdanja 5.16). Na primjer, ranjivost se može iskoristiti u zadanoj konfiguraciji u Ubuntu 20.04 LTS, ali u okruženjima Ubuntu 22.04-dev, Debian 11, openSUSE 15.3, RHEL 8.5, SUSE 15-SP4 i Fedora 33 pojavljuje se samo ako je administrator postavio kernel.unprivileged_bpf_disabled parametar na 0. Kao zaobilazno rješenje za blokiranje ranjivosti, možete spriječiti izvođenje BPF programa od strane neprivilegiranih korisnika naredbom “sysctl -w kernel.unprivileged_bpf_disabled=1”.

Izvor: opennet.ru

Dodajte komentar