I eBPF-systemet, som muliggør kørsel af behandlere til sporing, analyse af systemets funktioner og trafikstyring udført inden for Linux-kernen i en særlig virtuel maskine med JIT, er der opdaget en sårbarhed (CVE-2021-29154), der muliggør, at en lokal bruger kan få udført sin kode på kerne niveau. Problemet findes indtil version 5.11.12 (inklusive) og er endnu ikke rettet i distributioner (Debian, Ubuntu, RHEL, Fedora, SUSE, Arch). En rettelse er tilgængelig som et patch.
Ifølge de forskere, der opdagede sårbarheden, er de lykkedes med at udvikle en fungerende prototype af et exploit til 32- og 64-bit x86-systemer, som kan anvendes af en ikke-privilegeret bruger. Red Hat bemærker, at risikoen ved problemet afhænger af brugerens adgang til systemopkaldet eBPF. For eksempel i RHEL og de fleste andre Linux-distributioner i standardkonfigurationen kan sårbarheden udnyttes, når BPF JIT er aktiveret, og brugeren har ret til CAP_SYS_ADMIN. Som en midlertidig beskyttelsesforanstaltning anbefales det at deaktivere BPF JIT ved at bruge kommandoen: echo 0 > /proc/sys/net/core/bpf_jit_enable
Problemet skyldes en fejl i beregningen af offset for forgrening instruktioner under genereringen af maskinkode af JIT-kompilatoren. Især under generering af forgrening instruktioner tages det ikke i betragtning, at offsettet kan ændre sig efter optimeringsfasen. Den nævnte mangel kan bruges til at danne unormal maskinkode og udføre denne på kerneniveau.
Bemærkelsesværdigt er, at dette ikke er den eneste sårbarhed i eBPF-systemet på det seneste. I slutningen af marts blev der opdaget yderligere to sårbarheder (CVE-2020-27170, CVE-2020-27171) i kernen, der giver mulighed for at bruge eBPF til at omgå beskyttelsen mod sårbarheder af Spectre-typen, som muliggør bestemmelse af indholdet af kerne hukommelse som følge af skabelsen af forhold for spekulativ udførelse af bestemte operationer. For at udføre en Spectre-attack kræves en bestemt sekvens af instruktioner i privilegeret kode, der fører til spekulativ udførelse af instruktioner. Der er fundet flere måder at generere sådanne instruktioner i eBPF gennem manipulation med de BPF-programmer, der sendes til udførelse.
Sårbarheden CVE-2020-27170 skyldes tilstedeværelsen af pointer-manipulationer i BPF-verifikatoren, som forårsager spekulative operationer, der tilgår områder uden for bufferets grænser. Sårbarheden CVE-2020-27171 er relateret til en fejl i heltalsaritmetik (integer underflow) ved arbejde med pointere, hvilket fører til spekulativ adgang til data uden for bufferen. De nævnte problemer er allerede blevet rettet i kerneludgivelserne 5.11.8, 5.10.25, 5.4.107, 4.19.182 og 4.14.227, og har også været en del af kernelopdateringerne i de fleste Linux-distributioner. Forskere har forberedt en prototype på et exploit, der gør det muligt for en ikke-privilegeret bruger at udtrække data fra kernelens hukommelse.
Kilde: opennet.ru
