Er zijn twee nieuwe kwetsbaarheden ontdekt in het eBPF-systeem, dat de uitvoering van handlers binnen de Linux-kernel mogelijk maakt in een speciale virtuele machine met JIT. Beide kwetsbaarheden stellen een aanvaller in staat om zijn eigen code met kernelrechten uit te voeren, buiten de geĆÆsoleerde eBPF-virtuele machine. Informatie over de problemen is gepubliceerd door het Zero Day Initiative-team, dat de Pwn2Own-wedstrijden organiseert, waarin dit jaar drie aanvallen op Ubuntu Linux zijn gedemonstreerd die gebruikmaakten van eerder onbekende kwetsbaarheden (of deze kwetsbaarheden in eBPF verband houden met de genoemde aanvallen is niet bekend).
- CVE-2021-3490 ā de kwetsbaarheid wordt veroorzaakt door het ontbreken van grenscontrole van 32-bits waarden bij het uitvoeren van bitbewerkingen AND, OR en XOR in de eBPF ALU32. Een aanvaller kan deze fout misbruiken om gegevens buiten de grenzen van de toegekende buffer te lezen en te schrijven. Het probleem met de XOR-bewerking doet zich voor vanaf kernelversie 5.7-rc1, terwijl AND en OR vanaf versie 5.10-rc1 problematisch zijn.
- CVE-2021-3489 ā de kwetsbaarheid wordt veroorzaakt door een fout in de implementatie van de ringbuffer en houdt in dat de functie bpf_ringbuf_reserve niet controleerde of de grootte van het toegewezen geheugen kleiner kon zijn dan de werkelijke grootte van de ringbuffer. Dit probleem doet zich voor vanaf versie 5.8-rc1.
De status van de kwetsbaarheden in de distributies kan op de volgende pagina's worden gevolgd: Ubuntu, Debian, RHEL, Fedora, SUSE, Arch. Patches zijn ook beschikbaar voor de kwetsbaarheden (CVE-2021-3489, CVE-2021-3490). De mogelijkheid om het probleem te exploiteren hangt af van de beschikbaarheid van de eBPF-systeemaanroep voor de gebruiker. In de standaardconfiguratie van RHEL is bijvoorbeeld het hebben van de CAP_SYS_ADMIN-rechten vereist om de kwetsbaarheid te exploiteren.
Daarnaast is er nog een andere kwetsbaarheid in de Linux-kernel - CVE-2021-32606, die een lokale gebruiker in staat stelt zijn privileges te verhogen tot root-niveau. Het probleem doet zich voor vanaf kernelversie 5.11 en is veroorzaakt door een raceconditie in de implementatie van het CAN ISOTP-protocol, waardoor het mogelijk is om de socketbindingparameters te wijzigen door het ontbreken van juiste vergrendelingen in de functie isotp_setsockopt() bij het verwerken van de CAN_ISOTP_SF_BROADCAST-vlag.
Na het sluiten van de ISOTP-socket blijft de binding aan de ontvangende socket actief, die de aan de socket gerelateerde structuren kan blijven gebruiken na het vrijgeven van het bijbehorende geheugen (use-after-free door de aanroep van isotp_rcv() naar een al vrijgegeven isotp_sock-structuur). Door manipulatie van de gegevens kan de functie-pointer sk_error_report() worden overschreven, waardoor je eigen code op het kernel-niveau kan worden uitgevoerd.
Bron: opennet.ru
