Sårbarheder i eBPF-subsystemet, der gør det muligt at køre kode på Linux-kernens niveau

To nye sårbarheder er blevet identificeret i eBPF-subsystemet, der muliggør udførelse af håndteringsprogrammer inden i Linux-kernen i en særlig virtuelt maskine med JIT. Begge sårbarheder giver mulighed for at køre brugerens kode med kernel-rettigheder uden for den isolerede eBPF-virtuelt maskine. Information om problemerne er offentliggjort af Zero Day Initiative-teamet, der afholder Pwn2Own-konkurrencer, hvor der i år blev demonstreret tre angreb på Ubuntu Linux, der udnyttede tidligere ukendte sårbarheder (det vides ikke, om sårbarhederne i eBPF er relateret til disse angreb).

  • CVE-2021-3490 — sårbarheden er forårsaget af manglende kontrol af grænseoverskridelser for 32-bit værdier ved udførelse af bitoperationer AND, OR og XOR i eBPF ALU32. Angriberen kan udnytte denne fejl til at læse og skrive data uden for grænserne for den tildelte buffer. Problemet med XOR-operationen optræder fra version 5.7-rc1 af kernen, mens AND og OR optræder fra udgivelsen 5.10-rc1.
  • CVE-2021-3489 — sårbarheden skyldes en fejl i implementeringen af ringbufferen og er relateret til, at funktionen bpf_ringbuf_reserve ikke kontrollerede, om størrelsen af det tildelte hukommelsesområde kunne være mindre end den faktiske størrelse på ringbufferen. Problemet optræder fra version 5.8-rc1 af udgivelsen.

Status for rettelsen af sårbarhederne i distributionerne kan spores på disse sider: Ubuntu, Debian, RHEL, Fedora, SUSE, Arch). Rettelser er også tilgængelige som patches (CVE-2021-3489, CVE-2021-3490). Muligheden for at udnytte problemet afhænger af tilgængeligheden af systemopkaldet eBPF for brugeren. For eksempel, i standardkonfigurationen i RHEL kræves brugerrettigheden CAP_SYS_ADMIN for at udnytte sårbarheden.

En anden sårbarhed i Linux-kernen kan nævnes — CVE-2021-32606, som tillader en lokal bruger at hæve sine rettigheder til root-niveau. Problemet optræder fra kernen Linux 5.11 og skyldes en race condition i implementeringen af CAN ISOTP-protokollen, som gør det muligt at ændre bindingsparametre til socket på grund af manglende ordentlig låsning i funktionen isotp_setsockopt() under behandlingen af flaget CAN_ISOTP_SF_BROADCAST.

Efter lukningen af ISOTP-socket fortsætter bindningen til modtager-socketen med at gælde, som kan fortsætte med at bruge de strukturer, der er knyttet til socketen, efter frigivelsen af den tilknyttede hukommelse (use-after-free på grund af opkaldet til isotp_rcv() til allerede frigivet isotp_sock-struktur). Gennem manipulation af data kan man opnå, at pegepinden til funktionen sk_error_report() kan overskrives, hvilket muliggør udførelse af ens egen kode på kerneliveau.

Kilde: opennet.ru

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster