Ranjivost u eBPF podsistemu koji dozvoljava izvršavanje koda na nivou jezgre Linuxa

Identifikovana je ranjivost (CVE-2021-4204) u eBPF podsistemu, koja omogućava pokretanje rukovaoca unutar Linux kernela u posebnoj virtuelnoj mašini sa JIT-om, što omogućava lokalnom neprivilegovanom korisniku da postigne eskalaciju privilegija i izvršavanje svog koda na nivo Linux kernela. Problem se manifestira od Linuxa 5.8 kernela i ostaje neriješen (uključujući izdanje 5.16). Status generiranja ažuriranja s otklanjanjem problema u distribucijama može se pratiti na ovim stranicama: Debian, RHEL, SUSE, Fedora, Ubuntu, Arch. Najavljeno je kreiranje radnog exploita, koji je planiran za objavljivanje 18. januara (korisnici i programeri su dobili tjedan dana da poprave ranjivost).

Ranjivost je uzrokovana pogrešnim provjeravanjem eBPF programa dostavljenih na izvršenje. Podsistem eBPF pruža pomoćne funkcije, čiju ispravnost provjerava poseban verifikator. Neke funkcije zahtijevaju da vrijednost PTR_TO_MEM bude proslijeđena kao argument, a kako bi se spriječila moguća prekoračenja bafera, verifikator mora znati veličinu memorije povezane s argumentom. Za funkcije bpf_ringbuf_submit i bpf_ringbuf_discard, podaci o veličini prenesene memorije nisu prijavljeni verifikatoru, što bi se moglo koristiti za prepisivanje memorijskih područja izvan granice međuspremnika prilikom izvršavanja posebno kreiranog eBPF koda.

Da bi izvršio napad, korisnik mora biti u mogućnosti da učita svoj BPF program, a mnoge nedavne Linux distribucije to blokiraju prema zadanim postavkama (uključujući neprivilegirani pristup eBPF-u sada je zabranjen po defaultu u samom kernelu, počevši od izdanja 5.16). Na primjer, ranjivost se može iskoristiti u zadanoj konfiguraciji na 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 parametar kernel.unprivileged_bpf_disabled na 0. Kao rješenje za blokiranje ranjivosti, možete onemogućiti izvršavanje BPF programa od strane neprivilegiranih korisnika pomoću naredbe "sysctl -w kernel.unprivileged_bpf_disabled=1".

izvor: opennet.ru

Dodajte komentar