Forskere fra virksomheden Xint har opdaget en sårbarhed i Linux-kernen (CVE-2026-31431), der gør det muligt for en privilegeret bruger at opnå root-adgang til systemet. Problemet har fået kodenavnet Copy Fail. En prototyper til et exploit er tilgængelig. Muligheden for at udnytte sårbarheden er blevet demonstreret i Ubuntu 24.04 LTS, Amazon Linux 2023, RHEL 10.1 og SUSE 16, men det bemærkes, at pakker med kerner fra andre distributioner, herunder Debian, Arch, Fedora, Rocky og Alma, også er påvirket, men disse er ikke testet separat.
Sårbarheden skyldes en logisk fejl i crypto API (AF_ALG) i Linux-kernen, der opstod, da der i 2017 blev foretaget en optimering, som fjernede unødvendig bufferhåndtering ved at udføre in-place operationer med blokkryptering AEAD (Authenticated Encryption with Associated Data). Problemet opstod som følge af en uovervejet brug af funktionen splice(), der overfører data mellem filbeskrivelser og pipes uden at kopiere, ved at sende referencer til elementer i sidetcachet. Efter optimeringen blev der sendt en direkte reference til elementer i sidetcachet med filens data til socketen AF_ALG til dekryptering i en scatterlist i stedet for en reference til en separat buffer.
Senere i dekrypteringsprocessen blev de bundet via reference data fra autentificeringstaget ("authentication tag") blandet med de ekstra autentificerbare data (AAD, Associated Authenticated Data) og ciphertext, der blev kopieret til RX-bufferen, og offset for skrivning til autentificeringstaget blev beregnet ud fra de kopierede data uden tilstrækkelig kontrol, hvilket gjorde det muligt at overskrive vilkårlige områder i sidetcachet.
Sårbarheden gør det muligt at overskrive 4 bytes ved en valgt offset ved hver anmodning, hvilket giver en angriber mulighed for gennem at sende en serie af anmodninger at ændre indholdet af enhver fil i sidetcachet, som er tilgængelig for læsning, efter først at have fået den placeret i cache. Da indholdet fra filerne ved læseoperationer først leveres fra sidetcachet, vil kernen eller processen, når de læser data fra filen, modtage ikke de faktiske, men de ændrede data, hvilket kan bruges til at injicere kode i udførelsesfiler eller indlæste delte biblioteker.
For executing code with root privileges, it is sufficient to achieve modification of the page cache for any executable file with the suid root flag.
The proposed exploit reads the executable file /usr/bin/su and modifies the loaded content of this file in the page cache to inject its own code. Upon the subsequent execution of the 'su' utility, the modified copy from the page cache will be loaded into memory instead of the original executable file from the storage.
The exploit is universal, does not require adaptation to distributions or kernel versions, and can be used with any distributions. Since a shared page cache is used for all containers with container isolation, the vulnerability can be exploited to gain access to the host environment from within the container (an exploit for bypassing isolation in Kubernetes is promised to be published later).
The vulnerability was identified using AI after about an hour of experiments analyzing the kernel cryptosystem code. The issue appears starting from Linux kernel 4.14, released in 2017, and is fixed in kernels 6.18.22, 6.19.12, and 7.0. The status of vulnerability remediation in distributions can be assessed on the following pages: Debian, Ubuntu, SUSE/openSUSE, RHEL, Gentoo, Arch,
Fedora, ROSA.
As a workaround for protection, one can disable the algif_aead kernel module, which is used in OpenSSL when the afalg engine is explicitly enabled and in certain applications (to check for such running applications, use the command 'lsof | grep AF_ALG'):
echo 'install algif_aead /bin/false' > /etc/modprobe.d/disable-algif.conf
rmmod algif_aead
Kilde: opennet.ru
