eBPF apakšsistēmas ievainojamība, kas ļauj izpildīt kodu Linux kodola līmenī

eBPF apakšsistēmā ir identificēta ievainojamība (CVE-2021-4204), kas ļauj palaist apdarinātājus Linux kodola iekšienē īpašā virtuālajā mašīnā ar JIT, ļaujot vietējam nepievilinātam lietotājam sasniegt privilēģiju eskalāciju un izpildīt savu kodu Linux kodola līmenis. Problēma parādās kopš Linux kodola 5.8, un tā joprojām nav novērsta (ieskaitot versiju 5.16). To atjauninājumu statusu, kas tiek ģenerēti, lai novērstu problēmu izplatījumos, var izsekot šādās lapās: Debian, RHEL, SUSE, Fedora, Ubuntu, Arch. Paziņots, ka ir izveidots strādājošs exploit, kuru plānots publicēt 18. janvārī (lietotājiem un izstrādātājiem ir dota nedēļa ievainojamības novēršanai).

Ievainojamību izraisa nepareiza izpildei nosūtīto eBPF programmu pārbaude. eBPF apakšsistēma nodrošina palīgfunkcijas, kuru pareizu lietošanu pārbauda īpašs verificētājs. Dažām funkcijām ir jānodod PTR_TO_MEM vērtība kā arguments, un, lai novērstu iespējamu bufera pārpildīšanu, pārbaudītājam ir jāzina ar argumentu saistītās atmiņas apjoms. Funkcijām bpf_ringbuf_submit un bpf_ringbuf_discard verificētājam netika ziņots par pārsūtītās atmiņas lielumu, ko varētu izmantot, lai pārrakstītu atmiņas apgabalus ārpus bufera robežas, izpildot īpaši izstrādātu eBPF kodu.

Lai veiktu uzbrukumu, lietotājam ir jāspēj ielādēt pašam savu BPF programmu, un daudzi jaunākie Linux izplatījumi pēc noklusējuma bloķē šo iespēju (tostarp tagad pašā kodolā, sākot ar 5.16. laidienu, pēc noklusējuma ir aizliegta bezpriviliģēta piekļuve eBPF). Piemēram, ievainojamību var izmantot Ubuntu 20.04 LTS noklusējuma konfigurācijā, bet vidēs Ubuntu 22.04-dev, Debian 11, openSUSE 15.3, RHEL 8.5, SUSE 15-SP4 un Fedora 33 tā parādās tikai tad, ja administrators ir iestatījis parametru kernel.unprivileged_bpf_disabled uz 0. Kā risinājumu ievainojamības bloķēšanai varat novērst BPF programmu izpildi nepievilcīgiem lietotājiem, izmantojot komandu “sysctl -w kernel.unprivileged_bpf_disabled=1”.

Avots: opennet.ru

Pievieno komentāru