Sårbarhet i eBPF-delsystemet som tillater kodekjøring på Linux-kjernenivå

En sårbarhet (CVE-2021-4204) er identifisert i eBPF-undersystemet, som lar deg kjøre behandlere inne i Linux-kjernen i en spesiell virtuell maskin med JIT, slik at en lokal uprivilegert bruker kan oppnå rettighetseskalering og kjøre koden deres på Linux-kjernenivå. Problemet har dukket opp siden Linux-kjernen 5.8 og forblir uløst (inkludert versjon 5.16). Statusen til oppdateringer som genereres for å fikse problemet i distribusjoner kan spores på disse sidene: Debian, RHEL, SUSE, Fedora, Ubuntu, Arch. Det har blitt annonsert at det er opprettet en fungerende utnyttelse, som er planlagt publisert 18. januar (brukere og utviklere har fått en uke til å fikse sårbarheten).

Sårbarheten er forårsaket av feil verifisering av eBPF-programmer som er overført for kjøring. eBPF-delsystemet gir hjelpefunksjoner, hvis korrekt bruk bekreftes av en spesiell verifikator. Noen funksjoner krever å sende en PTR_TO_MEM-verdi som et argument, og for å forhindre mulig bufferoverløp, må verifikatoren vite størrelsen på minnet som er knyttet til argumentet. For funksjonene bpf_ringbuf_submit og bpf_ringbuf_discard ble ikke data om størrelsen på det overførte minnet rapportert til verifikatoren, som kan brukes til å overskrive minneområder utenfor buffergrensen ved utføring av spesialdesignet eBPF-kode.

For å utføre et angrep må brukeren kunne laste inn sitt eget BPF-program, og mange nyere Linux-distribusjoner blokkerer denne muligheten som standard (inkludert uprivilegert tilgang til eBPF er nå forbudt som standard i selve kjernen, fra og med versjon 5.16). For eksempel kan sårbarheten utnyttes i standardkonfigurasjonen i Ubuntu 20.04 LTS, men i miljøene Ubuntu 22.04-dev, Debian 11, openSUSE 15.3, RHEL 8.5, SUSE 15-SP4 og Fedora 33 vises den kun hvis administratoren har satt parameteren kernel.unprivileged_bpf_disabled til 0. Som en løsning for å blokkere sårbarheten kan du forhindre kjøring av BPF-programmer av uprivilegerte brukere med kommandoen "sysctl -w kernel.unprivileged_bpf_disabled=1".

Kilde: opennet.ru

Legg til en kommentar