I eBPF-subsystemen, som gjør det mulig å kjøre håndterere for sporing, analyse av subsystemene og trafikkstyring, som kjøres inne i Linux-kjernen i en spesiallaget virtuell maskin med JIT, er det avdekket en sårbarhet (CVE-2021-29154) som lar en lokal bruker kjøre sin egen kode på kjernenivå. Problemet manifesterer seg frem til og med versjon 5.11.12 (inkludert), og er ennå ikke fikset i distribusjonene (Debian, Ubuntu, RHEL, Fedora, SUSE, Arch). En løsning er tilgjengelig i form av en patch.
Ifølge forskerne som avdekket sårbarheten, har de klart å utvikle en fungerende prototype av en exploit for 32- og 64-bits x86-systemer, som kan brukes av ikke-privilegerte brukere. Red Hat bemerker at faren ved problemet avhenger av tilgjengeligheten av systemkall for eBPF for brukeren. For eksempel, i RHEL og de fleste andre Linux-distribusjoner i standardkonfigurasjonen, kan sårbarheten utnyttes når BPF JIT er aktivert og brukeren har CAP_SYS_ADMIN-rettigheter. Som en arbeidsomvei anbefales det å deaktivere BPF JIT ved hjelp av kommandoen: echo 0 > /proc/sys/net/core/bpf_jit_enable
Problemet skyldes en feilkalkulering av forskyvningen for grener i JIT-kompilatorens generering av maskinkode. Spesielt, under generering av greninstruksjoner, tas det ikke hensyn til at forskyvningen kan endre seg etter optimaliseringsstadiet. Den nevnte mangelen kan brukes til å konstruere unormal maskinkode og få den til å kjøre på kjernenivå.
Det er bemerkelsesverdig at dette ikke er den eneste sårbarheten i eBPF-subsystemet i det siste. På slutten av mars ble det oppdaget ytterligere to sårbarheter (CVE-2020-27170, CVE-2020-27171) i kjernen, som gir mulighet til å bruke eBPF for å omgå beskyttelsen mot Spectre-klasse sårbarheter, som muliggjør identifisering av innholdet i kjernens minne som følge av å skape forhold for spekulativ utførelse av bestemte operasjoner. For en Spectre-angrep er det nødvendig med en spesifikk sekvens med instruksjoner i privilegert kode som fører til spekulativ utførelse av instruksjoner. Det er funnet flere måter å generere slike instruksjoner i eBPF gjennom manipulering av de BPF-programmene som sendes for utførelse.
Sårbarheten CVE-2020-27170 skyldes tilstedeværelsen av manipulasjoner med pekere i BPF-verifieren, som forårsaker spekulative operasjoner som tilgår områder utenfor bufferets grenser. Sårbarheten CVE-2020-27171 er relatert til en feil i heltallsaritmetikk (integer underflow) ved arbeid med pekere, som fører til spekulativ tilgang til data utenfor bufferet. De nevnte problemene er allerede løst i kjernutgavene 5.11.8, 5.10.25, 5.4.107, 4.19.182, og 4.14.227, samt inkludert i oppdateringer av kjernen for de fleste Linux-distribusjoner. Forskere har utviklet et prototype av et eksploit som lar en ikke-privilegert bruker trekke ut data fra kjerneminnet.
Kilde: opennet.ru
