Sploitus

Exploit for CVE-2026-31431

kitploit · 2026-08-27

Exploit Code

MARKDOWN78 lines
## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-GR-1M-CVE-2026-31431
# CVE-2026-31431 — Copy Fail

中文版

**732 байта до root на каждом крупном дистрибутиве Linux**

CVE-2026-31431 (Copy Fail) — логическая ошибка в криптографическом шаблоне `authencesn` ядра Linux. Она позволяет непривилегированному локальному пользователю выполнить детерминированную контролируемую запись 4 байт в page cache любого читаемого файла в системе.

## Обзор

  * **ID CVE:** CVE-2026-31431
  * **Тип:** локальное повышение привилегий / побег из контейнера
  * **Затронуты:** ядра Linux с `CONFIG_CRYPTO_AUTHENC` (практически все крупные дистрибутивы с 2017 года)
  * **Обнаружено:** Xint Code Research Team, при начальном участии исследователя Theori Тэяна Ли



## Как это работает

Ошибка объединяет два поведения:

  1. **AF_ALG + splice** : `splice()` передаёт страницы page cache по ссылке в scatterlist сокета AF_ALG. Для режима in-place расшифровки AEAD страницы тега (из page cache целевого файла) остаются привязанными к выходному scatterlist через `sg_chain()`.

  2. **Запись в scratch-область authencesn** : `crypto_authenc_esn_decrypt()` использует `dst[assoclen + cryptlen]` (за пределами тега, в страницах page cache) как scratch-пространство для перестановки порядкового номера ESN, записывая 4 байта, контролируемые атакующим, и никогда не восстанавливая их.




Повреждённая страница **никогда не помечается как грязная** , поэтому файл на диске остаётся неизменным. Но именно page cache в памяти фактически читается — что делает повреждение немедленно видимым во всей системе.

## Эксплойт

Эксплойт повреждает page cache `/usr/bin/su` (или любого setuid-бинарника) небольшим шеллкодом, по 4 байта за раз. После всех итераций запуск `su` выполняет полезную нагрузку и даёт root-оболочку.

### Python (exp.py)

  
Требуется Python 3.10+ (для `os.splice`). Используются только модули стандартной библиотеки.   


root@kitploit:~
    
    
    python3 exp.py
    

### Golang (exp.go)

  
Без зависимости от Python. Компиляция и запуск: 

root@kitploit:~
    
    
    go run exp.go
    go build -ldflags "-w -s" -trimpath -o exp exp.go
    
    tinygo build -o exp exp.go
    

## Влияние

Возможность| Подробности  
---|---  
  
## Ссылки

  * copy.fail — официальное уведомление
  * Блог Xint — Copy Fail: 732 байта до root
  * Запись NVD
  * переписан на C



## Отказ от ответственности

Этот репозиторий опубликован исключительно в образовательных целях и для защитных исследований. Не используйте этот код на системах, которыми вы не владеете или на тестирование которых у вас нет явного разрешения.