##
# CVE-2026-31431 — Полный технический анализ
> **Классификация:** локальное повышение привилегий (LPE) — ядро Linux
> **Воздействие:** `непривилегированный пользователь → root`
> **Затронутый модуль:** `algif_aead` (подсистема AF_ALG ядра)
Ядро Linux предоставляет интерфейс криптографии пользовательскому пространству под названием **AF_ALG** (сокет семейства `AF_ALG`). Этот интерфейс позволяет непривилегированным процессам использовать криптографические ускорители ядра — шифрование, хеширование, генерацию ключей — без необходимости в root.
Один из его модулей — **`algif_aead`** , который реализует режим AEAD (_Authenticated Encryption with Associated Data_), используемый такими алгоритмами, как AES-GCM или ChaCha20-Poly1305.
Ошибка заключается в том, как `algif_aead` обрабатывает операции **`sendmsg()` \+ `recvmsg()`**, когда выходной буфер меньше ожидаемого. Ядро выполняет операцию копирования (`copy_to_user`) без корректной проверки размера, что приводит к:
Переполнение буфера → запись за пределы памяти ядра
└─ memcpy в адрес, частично контролируемый пользователем
Эта запись за пределы границ позволяет перезаписать соседние управляющие структуры ядра в памяти — в частности, указатели на функции или структуры `cred` — для повышения привилегий.
### Почему для эксплуатации не требуется root?
Потому что `AF_ALG` доступен непривилегированным пользователям. Любой процесс может открыть сокет `AF_ALG` и отправлять данные без предварительной аутентификации. Эксплойту не нужна никакая вспомогательная уязвимость.
// Это может сделать любой пользователь системы
int fd = socket(AF_ALG, SOCK_SEQPACKET, 0);
⚠️ Если вы видите `algif_aead` в `lsmod` и ваше ядро `6.2.x` на Ubuntu 23.04, **вы подвержены риску**.
> ⚠️ **Этическое предупреждение:** этот раздел носит исключительно образовательный характер. Эксплуатация систем без явного разрешения незаконна и наказуема. Примеры предназначены для контролируемых лабораторных сред.
2. Отправить sendmsg() с буфером завышенного размера
3. recvmsg() с меньшим буфером → триггер ошибки
### Концептуальный минимальный эксплойт (C)
int fd = socket(AF_ALG, SOCK_SEQPACKET, 0);
bind(fd, (struct sockaddr *)&sa, sizeof(sa));
setsockopt(fd, SOL_ALG, ALG_SET_KEY, key, sizeof(key));
setsockopt(fd, SOL_ALG, ALG_SET_AEAD_AUTHSIZE, NULL, 16);
// Большой буфер → триггер записи за пределы границ
// ... построение msghdr с cmsg ALG_OP_ENCRYPT
// recvmsg с недостаточным буфером → ядро пишет за пределы границ
recv(op_fd, small_buf, sizeof(small_buf), 0);
// Если эксплойт сработал, теперь мы root
> Это упрощённая схема. Настоящий эксплойт требует дополнительных примитивов формирования heap для выравнивания записи за пределы границ со структурой `task_struct->cred`.
Следующие репозитории содержат задокументированные рабочие реализации:
* **copy-fail-c** — эксплойт на чистом C, требует компиляции
* **copy-fail-tiny-elf** — автономный ELF-бинарник, не требует компиляции
`
#### Типичное использование (лаборатория)
# Клонировать и скомпилировать copy-fail-c
git clone
# Ожидаемый результат на уязвимой системе:
wget
Эксплуатирует веб-уязвимость (RCE) → доступ как www-data
Расчётное время от доступа `www-data` до root: ** ⚠️ Это может сломать программное обеспечение, использующее AEAD-шифрование через AF_ALG (редко встречается на стандартных веб-серверах).
### Смягчение с помощью sysctl — ограничение пользовательских namespace
# Отключить непривилегированные user namespaces (ломает некоторые функции Docker)
sudo sysctl -w kernel.unprivileged_userns_clone=0
echo "kernel.unprivileged_userns_clone=0" | sudo tee -a /etc/sysctl.d/99-hardening.conf
sudo sysctl -p /etc/sysctl.d/99-hardening.conf
### Смягчение с помощью AppArmor — блокировка AF_ALG
Создать профиль AppArmor, запрещающий доступ к `AF_ALG`:
network af_alg, # запретить в конкретных профилях
Для веб-процесса (пример nginx/www-data):
# Добавить в профиль AppArmor для www-data или nginx
sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.nginx
### Снижение воздействия — усиление защиты www-data
Хотя это не предотвращает повышение привилегий, это уменьшает начальную поверхность атаки:
* NVD: `
* Коммит ядра с исправлением: подсистема `crypto/algif_aead.c`
* PoC: `
* PoC ELF: `
* Соответствующее уведомление безопасности Ubuntu: USN-XXXX-1
> **Документ подготовлен в академических целях** — системный администратор, 2026
The full story
This article is one source in a clustered incident — the cluster page carries the summary, timeline and every other outlet covering it.
