In het eBPF-subsysteem, dat het mogelijk maakt om handlers binnen de Linux-kernel uit te voeren in een speciale virtuele machine met JIT, is een kwetsbaarheid (CVE-2021-4204) ontdekt, die een lokale niet-privilege gebruiker in staat stelt om zijn privileges te verhogen en zijn code op kernelniveau in de Linux-kernel uit te voeren. Het probleem doet zich voor vanaf Linux-kernel 5.8 en is tot nu toe niet opgelost (onder andere in versie 5.16). De status van de updates om het probleem op te lossen in de distributies kan worden gevolgd op de volgende pagina's: Debian, RHEL, SUSE, Fedora, Ubuntu, Arch. Er is melding gedaan van de ontwikkeling van een werkende exploit die op 18 januari wordt gepubliceerd (gebruikers en ontwikkelaars hebben een week de tijd om de kwetsbaarheid te verhelpen).
De kwetsbaarheid wordt veroorzaakt door een onjuiste controle van de eBPF-programma's die voor uitvoering worden doorgegeven. Het eBPF-subsysteem biedt hulpfuncties, waarvan het juiste gebruik wordt gecontroleerd door een speciale verifier. Sommige functies vereisen dat een PTR_TO_MEM-waarde als argument wordt doorgegeven en om mogelijke buffer-overflows te voorkomen, moet de verifier de grootte van het geheugen gerelateerd aan het argument kennen. Voor de functies bpf_ringbuf_submit en bpf_ringbuf_discard werden de gegevens over de grootte van het doorgegeven geheugen niet aan de verifier verstrekt, wat kon worden gebruikt om geheugengebieden buiten de buffer te overschrijven bij de uitvoering van speciaal gevormde eBPF-code.
Voor het uitvoeren van een aanval moet de gebruiker in staat zijn zijn BPF-programma te uploaden, en veel recente Linux-distributies blokkeren deze mogelijkheid standaard (ook is niet-privileged toegang tot eBPF nu standaard verboden in de kernel, beginnend met versie 5.16). Bijvoorbeeld, de kwetsbaarheid kan worden uitgebuit in de standaardconfiguratie van Ubuntu 20.04 LTS, maar in omgevingen van Ubuntu 22.04-dev, Debian 11, openSUSE 15.3, RHEL 8.5, SUSE 15-SP4 en Fedora 33 manifesteert het zich alleen als de administrator de parameter kernel.unprivileged_bpf_disabled op 0 heeft ingesteld. Als een workaround voor de blokkering van de kwetsbaarheid kan de uitvoering van BPF-programma's door niet-privilege gebruikers worden verboden met het commando 'sysctl -w kernel.unprivileged_bpf_disabled=1'.
Bron: opennet.ru
