
# Эксплойт Proof-of-Concept для CVE-2026-31431 (Copy-Fail) Эксплойт Proof-of-Concept для CVE-2026-31431 (Copy-Fail) — уязвимости в AF_ALG и splice() ядра Linux, позволяющей отравление page cache и локальное повышение привилегий. Включает анализ, результаты лабораторных испытаний и скрипт обнаружения.
Этот репозиторий содержит углублённый анализ, Proof-of-Concept (PoC) и результаты лабораторных тестов для уязвимости CVE-2026-31431, широко известной как "Copy-Fail".
Copy-Fail использует логическую ошибку в Crypto API ядра Linux (AF_ALG) в сочетании с системным вызовом splice(). Она позволяет непривилегированному локальному атакующему выполнить отравление Page Cache, что приводит к локальному повышению привилегий (LPE).
В отличие от традиционных эксплойтов, изменяющих файлы на диске, Copy-Fail нацелен непосредственно на Page Cache (ОЗУ). Когда файл читается, ядро сохраняет его копию в ОЗУ для повышения производительности. Из-за ошибки управления памятью в алгоритме authenc на определённых версиях ядра атакующий может обмануть ядро и заставить его перезаписать эти "доступные только для чтения" страницы памяти.
Отравляя страницы памяти SETUID-бинарников, таких как /usr/bin/su, можно обойти аутентификацию и получить root-оболочку.
Тесты проводились на нескольких дистрибутивах Ubuntu с особым вниманием к влиянию бэкпортов ядра и управления патчами.
| Дистрибутив | Версия ядра | Дата патча | Результат | Наблюдение |
|---|---|---|---|---|
| Ubuntu 24.04 | 6.8.0-87-generic | Окт 2025 | ❌ Неудача | Обновления безопасности активны |
| Ubuntu 22.04 | 5.15.0-125-generic | Сен 2024 | ✅ УСПЕХ | Уязвим (без патча) |
| Ubuntu 18.04 | 4.15.0-197-generic | Ноя 2022 | ✅ УСПЕХ | Уязвим (без патча) |
Номера версий ядра могут вводить в заблуждение. В то время как "более новые" ядра, такие как 6.8, защищены патчами безопасности, более старые ядра или ядра с истёкшим сроком поддержки (EOL), такие как 4.15 и 5.15, оставались полностью уязвимыми из-за отсутствия бэкпортированных исправлений.
В ходе исследования был получен поразительный результат при тестировании двух разных систем Ubuntu 22.04 с одинаковой основной версией ядра:
| Версия ядра |
|---|
Этот тест доказывает, что безопасность системы нельзя оценивать только по номеру основной версии. Сервер под управлением 5.15.0-125 может быть взломан за секунды, тогда как 5.15.0-170 полностью блокирует атаку.
Вывод успешной эксплуатации (ядро 5.15.0-125):
$ python3 ubuntu_22.04_copy_fail_exploit.py
[*] Poisoning /usr/bin/su (Ubuntu 22.04 / Kernel 5.15)...
[+] Exploit completed. Triggering Root...
# id
uid=0(root) gid=1004(jastin) groups=1004(jastin)
# whoami
root
# export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# /bin/bash -i
root@ovh-net-dream01:/tmp#
PoC был разработан с использованием ctypes для обеспечения совместимости с различными версиями Python (в частности, для версий без встроенной поддержки os.splice).
sudo modprobe af_alg algif_aead authenc echainiv
python3 final_exploit.py
$ python3 ubuntu_18.04_copy_fail_exploit.py
[*] /bin/su zehirleniyor (Kernel 4.15)...
[+] Bellek zehirlendi! Root tetikleniyor...
# id
uid=0(root) gid=1004(jastin) groups=1004(jastin)
# whoami
root
# export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# /bin/bash -i
root@ovh-net-dream02:/tmp#
sync; echo 3 | sudo tee /proc/sys/vm/drop_caches
# 1. Проверьте версию ядра
# uname -r
# 2. Проверьте загруженные модули (безопасно, если нет вывода)
# lsmod | grep -E "algif_aead|authencesn"
# 3. Критический тест — привязка authencesn
python3 -c "
import socket
try:
s = socket.socket(38, 5, 0)
s.bind(('aead', 'authencesn(hmac(sha256),cbc(aes))'))
print('[!] КРИТИЧНО — система уязвима!')
s.close()
except:
print('[+] Безопасно — authencesn недоступен')
"
# 4. Хэш setuid-бинарников (для справки)
sha256sum /usr/bin/su /usr/bin/sudo /usr/bin/passwd
Таблица оценки:
| Результат | Значение |
|---|---|
| Нет вывода lsmod + ошибка привязки | ✅ Безопасно |
| Вывод lsmod существует ИЛИ привязка успешна | ⚠️ Уязвим, немедленно примените патчи |
Отказ от ответственности: Данное исследование и PoC предназначены только для образовательных целей и авторизованного тестирования безопасности. Использование на несанкционированных системах может повлечь юридические последствия.
| Дата патча |
|---|
| Результат |
|---|
| Статус |
|---|
| 5.15.0-125 | Сен 2024 | ✅ УСПЕХ | Уязвим (эксплойт сработал) |
| 5.15.0-170 | Янв 2026 | ❌ НЕУДАЧА | Безопасен (запатчен) |