Sploitus

Exploit for CVE-2026-31431

kitploit · 2026-08-27

Exploit Code

MARKDOWN118 lines
## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-THEMALWAREGUARDIAN-CVE-2026-31431
# _**🐞 CVE-2026-31431 - Ошибка копирования**_

![](https://assets.kitploit.com/production/public/readmes/42319/b3474b238beb06c3531aac6625c81c72cdd21b9e7d98a1341343f2597a73528a.png)

![](https://img.shields.io/badge/Target-Linux%20Kernel-yellow?style=for-the-badge&logo=linux&logoColor=black) ![](https://img.shields.io/badge/CVE-2026--31431-red?style=for-the-badge) ![](https://img.shields.io/badge/Type-LPE%20+%20Container%20Escape-critical?style=for-the-badge)   
![](https://img.shields.io/badge/Window-2017%20%E2%86%92%202026-darkred?style=for-the-badge) ![](https://img.shields.io/badge/Reliability-100%25%20deterministic-brightgreen?style=for-the-badge)   
![](https://img.shields.io/badge/Disclosed-2026--04--29-orange?style=for-the-badge)

_Логическая ошибка в authencesn, передаваемая через AF_ALG и splice(), приводящая к контролируемой записи 4 байтов в кэш страниц любого читаемого файла в системе. Нет состояния гонки, нет смещений, нет скомпилированного полезного груза. Тот же самый скрипт размером 732 байта получает root на каждом дистрибутиве Linux, начиная с 2017 года._

* * *

* * *

* * *

## _**📑 Содержание**_

  * Обзор
  * Анализ первопричины 📂
    * Примитив AF_ALG + splice()
    * Оптимизация на месте 2017 года
    * Выход за границы в authencesn
    * Три безобидных изменения → одна критическая ошибка
    * Обход scatterlist до страниц кэша страниц



* * *

  * Влияние
  * Затронутые дистрибутивы
  * Проверка — Затронут ли я?



* * *

  * Эксплойт
  * Пошаговое руководство по эксплойту 📂
    * Шаг 1 — Настройка сокетов
    * Шаг 2 — Формирование записи
    * Шаг 3 — Запуск записи в кэш страниц
    * Шаг 4 — Выполнение



* * *

  * Сравнение с Dirty Cow / Dirty Pipe



* * *

  * Исправление
  * Раскрытие
  * Ссылки



* * *

* * *

* * *

## _**🔍 Обзор**_

**CVE-2026-31431** \- _Ошибка копирования_ — это логическая ошибка в криптографическом шаблоне authencesn ядра Linux. Она позволяет непривилегированному локальному пользователю выполнить контролируемую запись 4 байтов в кэш страниц любого читаемого файла в системе, не изменяя файл на диске.

Ошибка не существует ни в одном из трех компонентов по отдельности. Она возникает из их взаимодействия:``` 2011 ────────────────────────────────────────────────────────────────────── \- authencesn added to the kernel (a5079d084f8b). \- Uses the caller's destination scatterlist as scratch space. \- Reorder ESN bytes before HMAC computation. \- Only caller: internal xfrm layer. Harmless.

2015 ────────────────────────────────────────────────────────────────────── \- algif_aead.c gains AEAD support with splice() path (104880a6b470). \- splice() can deliver page cache pages to the TX scatterlist. \- AF_ALG uses out-of-place operation: req->src != req->dst. \- Page cache pages remain read-only. Not exploitable.

2017 ────────────────────────────────────────────────────────────────────── \- In-place optimization in algif_aead.c (72548b093ee3). \- Copies AAD+CT to RX buffer but chains authentication tag pages via sg_chain(). \- Sets req->src = req->dst. \- Page cache pages now reside in WRITABLE dst. \- authencesn writes past boundary → page cache corruption.

2026 ────────────────────────────────────────────────────────────────────── \- Copy Fail - CVE-2026-31431. Discovered by Theori / Xint Code. \- Exploitable across all distros since 2017.

root@kitploit:~
    
    
    ---
    ---
    ---
    
    
    
    <div id='root-cause'/>
    
    ## ***🧬 Анализ первопричин***
    
    <div id='primitive'/>
    
    ### ***Примитив AF_ALG + splice()***
    
    AF_ALG (*[AF_ALG = 38](https://docs.kernel.org/crypto/userspace-if.html#user-space-api-general-remarks)*) — это тип сокета, который предоставляет криптографический API ядра непривилегированному пользовательскому пространству. Непривилегированный процесс может:
    
    1. Открыть сокет AF_ALG / SOCK_SEQPACKET.
    2. Выполнить bind() к любому доступному шаблону AEAD, предоставляемому криптографическим API ядра.
    3. Установить криптографический ключ через setsockopt(SOL_ALG, ALG_SET_KEY, ...) на настроенном алгоритме.
    4. Вызвать accept() для получения выделенного сокета операций, который будет обрабатывать запросы на шифрование и дешифрование.
    5. Отправлять подготовленные данные с помощью sendmsg() и получать обработанный результат через recvmsg(), полностью взаимодействуя с криптографической подсистемой ядра.
    
    Он включён по умолчанию в конфигурации ядра всех основных дистрибутивов (CONFIG_CRYPTO_USER_API_AEAD=y).
    
    **[splice(2)](https://man7.org/linux/man-pages/man2/splice.2.html)** передаёт данные между файловыми дескрипторами без копирования — он передаёт ссылки на страницы, а не копии. Соответствующий поток:```
    open("/usr/bin/su")   ->  fd_file
    pipe()                ->  pipe_rd, pipe_wr
    
    # moves N bytes from the file into the pipe
    # the pipe buffer now contains a reference to the same physical page in the page cache
    splice(fd_file, pipe_wr, N)
    
    # delivers that reference to the AF_ALG socket
    # the TX scatterlist of algif_aead now points to the page cache page of /usr/bin/su
    splice(pipe_rd, alg_fd, N)