В линукс-ядре нашли критическую уязвимость.
Команда Xint Code раскрыла уязвимость, которая дает доступ к руту. CVE-2026-31431 получила оценку CVSS 7.8.
Уязвимость формировалась постепенно. Это пересечение трех независимых изменений ядра за 2011-2017 годы.
Криптошаблон authencesn в функции crypto_authenc_esn_decrypt() использует буфер назначения как scratch-пространство при перестановке байт ESN и выполняет запись по смещению assoclen + cryptlen – за границей легитимной области вывода. Сам по себе этот паттерн существовал с 2011 года и был безвреден.
Опасной комбинация стала в 2017 году, когда оптимизация in-place в algif_aead.c (коммит 72548b093ee3) установила req->src = req->dst: страницы page cache, попавшие в scatterlist через splice(), оказались в записываемом буфере назначения. Scratch-запись authencesn пересекла границу RX-буфера и попала напрямую в кешированные страницы целевого файла.
Атакующий получает полный контроль над тремя параметрами: целевой файл (любой читаемый), смещение внутри файла (через параметры splice и assoclen) и значение записываемых 4 байт (из поля seqno_lo в sendmsg).
Ядро никогда не помечает измененную страницу как dirty, поэтому файл на диске остается нетронутым, а любые on-disk checksum-проверки подмену не обнаружат. Цель эксплойта по умолчанию /usr/bin/su: в page cache инжектируется шеллкод, после чего execve("/usr/bin/su") запускает его с UID 0.
732-байтовый Python-скрипт без зависимостей воспроизвел root-шелл на Ubuntu 24.04, Amazon Linux 2023, RHEL 10.1 и SUSE 16, ветки ядер 6.12, 6.17 и 6.18. Никакой перекомпиляции, подбора смещений и повторных попыток. Для сравнения: Dirty Cow (CVE-2016-5195) требовал выигрыша в race condition, Dirty Pipe (CVE-2022-0847) – точного совпадения версии ядра.
Подписывайтесь на Телекоммуналку