
Эксплойт для локального повышения привилегий CVE-2026-31431 (Copy Fail), нацеленный на повреждение страничного кэша ядра Linux через модуль AF_ALG AEAD. Включает PoC, правила обнаружения, настройку лабораторной среды и скрипты для смягчения для авторизованного тестирования безопасности.
██████╗ ██████╗ ██████╗ ██╗ ██╗ ███████╗ █████╗ ██╗██╗
██╔════╝██╔═══██╗██╔══██╗╚██╗ ██╔╝ ██╔════╝██╔══██╗██║██║
██║ ██║ ██║██████╔╝ ╚████╔╝ █████╗ ███████║██║██║
██║ ██║ ██║██╔═══╝ ╚██╔╝ ██╔══╝ ██╔══██║██║██║
╚██████╗╚██████╔╝██║ ██║ ██║ ██║ ██║██║███████╗
╚═════╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝╚═╝╚══════╝
algif_aead
-yellow?style=for-the-badge&logo=linux&logoColor=black)
⚠️ ТОЛЬКО ДЛЯ АВТОРИЗОВАННОГО ИСПОЛЬЗОВАНИЯ — Данный репозиторий предназначен строго для пентестеров, исследователей безопасности и защитников, действующих в рамках законного разрешения. Неправомерное использование является уголовным преступлением.
Copy Fail — это уязвимость локального повышения привилегий (LPE), раскрытая 29 апреля 2026 года, затрагивающая практически все основные дистрибутивы Linux, работающие на ядрах, выпущенных с 2017 года.
Непривилегированный пользователь ──► AF_ALG + splice() ──► Запись 4 байт в кэш страниц ──► ROOT
Уязвимость происходит из ошибочной оптимизации на месте, внедрённой в 2017 году (коммит 72548b093ee3) в модуле algif_aead пользовательского крипто API ядра Linux (AF_ALG).
AF_ALG (пользовательский крипто API)
└── модуль algif_aead
└── шаблон authencesn ◄── УЯЗВИМО
└── оптимизация на месте (2017)
└── req->src == req->dst ◄── страницы из splice() попадают в изменяемый список рассеяния dst
Шаг 1: Открыть сокет AF_ALG AEAD
socket(AF_ALG, SOCK_SEQPACKET, 0)
Шаг 2: Отправить страницы splice(), ссылающиеся на целевой файл
(страницы кэша страниц привилегированного бинарника, например /usr/bin/sudo)
Шаг 3: Запустить черновую запись authencesn
authencesn использует буфер dst как черновик →
записывает 4 контролируемых байта ЗА пределами легитимной области вывода
Шаг 4: Запись в кэше страниц для целевого файла теперь повреждена
(файл на диске не тронут — изменена только копия в памяти)
Шаг 5: Запустить изменённый бинарник → ROOT
Кэш страниц ядра Linux хранит в памяти копии файлов. Когда файл читается, его страницы кэшируются. Системный вызов splice() может напрямую ссылаться на эти кэшированные страницы. Передавая страницы кэша страниц в список рассеяния AF_ALG AEAD, черновая запись authencesn попадает внутрь этих кэшированных страниц, тем самым эффективно пропатчивая копию в памяти любого читаемого файла — включая привилегированные бинарники, такие как sudo, pkexec или passwd.
Исправление в основной ветке откатывает ошибочную оптимизацию 2017 года:
# Исправлено в коммите: a664bf3d603d
git show a664bf3d603d
CVE-2026-31431-CopyFail/
│
├── 📄 README.md ← Вы здесь
├── 📄 LICENSE ← Лицензия (исследовательская/образовательная)
├── 📄 DISCLAIMER.md ← Политика юридического и этического использования
├── 📄 CHANGELOG.md ← История версий
│
├── 📂 docs/
│ ├── vulnerability-analysis.md ← Глубокий анализ: первопричина и механизмы
│ ├── exploitation-walkthrough.md ← Пошаговая методология
│ ├── affected-kernels.md ← Полная матрица версий ядер/дистрибутивов
│ ├── detection.md ← Покрытие защитных средств (Defender, Tenable, Wazuh)
│ └── references.md ← Все CVE, блоги, рекомендации
│
├── 📂 exploit/
│ ├── README.md ← Использование, предварительные требования, протестированные дистрибутивы
│ ├── copyfail.py ← Эталонный PoC (образовательный)
│ ├── trigger.c ← C-триггер AF_ALG + splice()
│ └── variants/
│ ├── ubuntu.py ← Вариант для Ubuntu
│ ├── rhel.py ← Вариант для RHEL/CentOS
│ └── amazon_linux.py ← Вариант для Amazon Linux
│
├── 📂 detection/
│ ├── yara/
│ │ └── copyfail.yar ← YARA-правило для артефактов эксплойта
│ ├── sigma/
│ │ └── copyfail_lpe.yml ← Sigma-правило для SIEM/SOC
│ └── scripts/
│ ├── check_vulnerable.sh ← Быстрая проверка ядра на уязвимость
│ └── detect_algif_aead.sh ← Проверка, загружен ли модуль
│
├── 📂 mitigation/
│ ├── README.md ← Обзор смягчающих мер
│ ├── disable_algif_aead.sh ← Отключение затронутого модуля ядра
│ ├── patch-notes.md ← Детали патча основной ветки
│ └── kubernetes-hardening.md ← Усиление защиты K8s / контейнеров
│
├── 📂 lab/
│ ├── Vagrantfile ← Воспроизводимая уязвимая VM
│ ├── setup.sh ← Скрипт начальной настройки лаборатории
│ └── docker/
│ └── Dockerfile ← Уязвимый контейнер Ubuntu
│
├── 📂 reports/
│ ├── pentest-report-template.md ← Шаблон отчёта для клиента
│ └── sample-finding.md ← Пример описания находки
│
└── 📂 assets/
├── demo.gif ← (Опционально) демонстрация в терминале
└── diagrams/
└── page-cache-write.png ← Схема атаки
Всегда тестируйте в изолированной, авторизованной среде. Никогда не запускайте эксплойты на продуктивных системах.
# Клонировать репозиторий
git clone https://github.com/0xFuffM3/CVE-2026-31431-CopyFail.git
cd CVE-2026-31431-CopyFail
# Запустить уязвимую лабораторную VM
cd lab/
vagrant up
# Подключиться по SSH к лабораторной среде
vagrant ssh
# Проверить версию ядра (должна быть уязвимой)
uname -r
cd lab/docker/
# Собрать образ уязвимого контейнера
docker build -t copyfail-lab .
# Запустить с необходимыми привилегиями для взаимодействия с ядром
docker run --rm -it --privileged copyfail-lab /bin/bash
# Запустить скрипт быстрой проверки
chmod +x detection/scripts/check_vulnerable.sh
./detection/scripts/check_vulnerable.sh
Ожидаемый вывод на уязвимой системе:
[!] Версия ядра: 5.15.0-91-generic
[!] Модуль algif_aead: ЗАГРУЖЕН
[✗] Система выглядит УЯЗВИМОЙ к CVE-2026-31431 (Copy Fail)
[*] Рекомендуемое действие: применить обновление ядра или отключить algif_aead
Ожидаемый вывод на исправленной системе:
[✓] Версия ядра: 6.1.132
[✓] Система выглядит ИСПРАВЛЕННОЙ против CVE-2026-31431 (Copy Fail)
Требуется: Локальный доступ как непривилегированный пользователь на уязвимой системе.
# Python 3.6+
python3 --version
# Необходимые модули ядра присутствуют
lsmod | grep algif_aead
# Проверить, что целевой бинарник доступен для чтения
ls -la /usr/bin/sudo
cd exploit/
# Проверить текущий уровень привилегий
id
# uid=1000(user) gid=1000(user) groups=1000(user)
# Запустить Copy Fail PoC
python3 copyfail.py
# Проверить повышение привилегий
id
# uid=0(root) gid=0(root) groups=0(root)
1. Определить версию ядра
└─► uname -r / cat /proc/version
2. Проверить, загружен ли algif_aead
└─► lsmod | grep algif_aead
3. Подтвердить непривилегированный доступ
└─► id / whoami
4. Выполнить Copy Fail PoC
└─► python3 exploit/copyfail.py
5. Проверить доступ root
└─► id && cat /etc/shadow
6. Задокументировать доказательства
└─► Скриншот + запись версии ядра, дистрибутива, хэша эксплойта
7. Применить смягчение (после теста)
└─► sudo bash mitigation/disable_algif_aead.sh
8. Включить в отчёт по пентесту
└─► Использовать reports/pentest-report-template.md
// detection/yara/copyfail.yar
rule CopyFail_CVE_2026_31431 {
meta:
description = "Detects Copy Fail (CVE-2026-31431) exploit artefacts"
author = "0xFuffM3"
date = "2026-04-30"
reference = "https://copy.fail"
strings:
$py1 = "algif_aead" ascii
$py2 = "AF_ALG" ascii
$py3 = "splice" ascii
$py4 = "page_cache" ascii
$py5 = "authencesn" ascii
condition:
3 of them
}
Запуск YARA сканирования:
yara detection/yara/copyfail.yar /tmp/ -r
# detection/sigma/copyfail_lpe.yml
title: Copy Fail LPE Exploit Execution (CVE-2026-31431)
status: stable
logsource:
category: process_creation
product: linux
detection:
selection:
CommandLine|contains:
- 'AF_ALG'
- 'algif_aead'
- 'authencesn'
condition: selection
falsepositives:
- Легитимное тестирование крипто API
level: high
chmod +x detection/scripts/detect_algif_aead.sh
./detection/scripts/detect_algif_aead.sh
# Ubuntu / Debian
sudo apt-get update && sudo apt-get upgrade linux-image-generic
# RHEL / CentOS
sudo yum update kernel
# Amazon Linux
sudo yum update kernel
# После обновления перезагрузить
sudo reboot
algif_aead (временное решение)# Запустить скрипт смягчения
chmod +x mitigation/disable_algif_aead.sh
sudo bash mitigation/disable_algif_aead.sh
Что делает скрипт:
echo "install algif_aead /bin/false" > /etc/modprobe.d/disable-algif.conf
rmmod algif_aead 2>/dev/null || echo "[*] Модуль в настоящее время не загружен"
echo "[✓] algif_aead отключён. Перезагрузите для подтверждения сохранения."
Смотрите mitigation/kubernetes-hardening.md для:
AF_ALG в политиках безопасности подовsocket(AF_ALG, ...)Готовый к использованию шаблон отчёта для клиента находится в reports/pentest-report-template.md.
Находка: Локальное повышение привилегий через Copy Fail (CVE-2026-31431)
Серьёзность: ВЫСОКАЯ (CVSS 7.8)
Хост: 10.10.10.55 (ubuntu-prod-01)
Ядро: 5.15.0-91-generic
Доказательства:
- Непривилегированная оболочка (uid=1000) повышена до root (uid=0)
- Подтверждено, что модуль ядра algif_aead загружен
- Артефактов на диске нет — только кэш страниц
Рекомендация:
1. Немедленно применить патч ядра от вендора
2. Временное решение: отключить модуль algif_aead
3. Проверить узлы Kubernetes и CI/CD раннеры
Прочитайте перед использованием чего-либо из этого репозитория.
Данный репозиторий опубликован исключительно для легитимных исследований безопасности, авторизованного пентеста и защитных целей.
Несанкционированное использование этого материала может нарушать Закон о компьютерном мошенничестве и злоупотреблениях (CFAA), Директиву ЕС 2013/40/EU, Индийский IT-закон 2000 года и аналогичные законы в вашей юрисдикции.
Авторы не несут никакой ответственности за неправильное использование. Полное юридическое уведомление см. в DISCLAIMER.md.
Исследователи безопасности приглашаются к внесению вклада:
git checkout -b feat/your-contributiongit commit -m "Добавить: правило обнаружения для X"Пожалуйста, соблюдайте нормы ответственного раскрытия. Не включайте оружейный, готовый к эксплуатации код, нацеленный на исправленные системы.
| # | Раздел | Описание |
|---|
| 1 | Что такое Copy Fail? | Краткое описание уязвимости |
| 2 | Технический анализ | Анализ первопричины |
| 3 | Затронутые системы | Матрица дистрибутивов и ядер |
| 4 | Структура репозитория | Расположение файлов |
| 5 | Настройка лабораторной среды | Безопасное воспроизведение |
| 6 | Использование эксплойта | Рабочий процесс пентеста |
| 7 | Обнаружение | YARA, Sigma, скрипты |
| 8 | Смягчение | Патч и усиление защиты |
| 9 | Отчёт по пентесту | Шаблоны отчётов |
| 10 | Юридические и этические аспекты | Отказ от ответственности |
| 11 | Ссылки | CVE, рекомендации, блоги |
| Свойство | Детали |
|---|
| CVE ID | CVE-2026-31431 |
| Псевдоним | Copy Fail |
| CVSS v3.1 | 7.8 (ВЫСОКИЙ) |
| Вектор атаки | Локальный |
| Необходимые привилегии | Низкие (любой непривилегированный пользователь) |
| Взаимодействие с пользователем | Не требуется |
| Обнаружил | Xint Code (Theori) |
| Дата раскрытия | 29 апреля 2026 |
| Размер эксплойта | 732 байта (Python PoC) |
| Статус патча | ✅ Доступен — откат коммита a664bf3d603d |
| Ветка ядра | Затронута? | Исправленная версия |
|---|
| 4.9.x (LTS) | ✅ Да | 4.9.340+ |
| 5.4.x (LTS) | ✅ Да | 5.4.295+ |
| 5.10.x (LTS) | ✅ Да | 5.10.239+ |
| 5.15.x (LTS) | ✅ Да | 5.15.185+ |
| 6.1.x (LTS) | ✅ Да | 6.1.132+ |
| 6.6.x (LTS) | ✅ Да | 6.6.83+ |
| 6.12.x (LTS) | ✅ Да | 6.12.19+ |
| < 4.9 (до 2017) | ❌ Нет | Н/Д — оптимизация отсутствует |
| Дистрибутив | Затронутые версии | Исправлено? | Рекомендация |
|---|
| Ubuntu | < 26.04 (все выпуски) | ✅ Исправлено | USN |
| Ubuntu 26.04 (Resolute) | ❌ Не затронут | — | — |
| RHEL / CentOS | 7, 8, 9 | ✅ Исправлено | RHSA-2026 |
| Amazon Linux | 2, 2023 | ✅ Исправлено | ALAS |
| SUSE / openSUSE | Все затронуты | ✅ Исправлено | SUSE-SU |
| Debian | Bullseye, Bookworm | ✅ Исправлено | DSA |
| CloudLinux | 8, 9 | ✅ Исправлено | Рекомендация |
| Средство | Поддержка обнаружения |
|---|
| Microsoft Defender (MDVM) | ✅ Да |
| Tenable Nessus | ✅ Да |
| Qualys | ✅ Да |
| Wazuh | ✅ Через пользовательское Sigma-правило |
| Palo Alto Cortex XDR | ✅ Да |
| CrowdStrike Falcon | ✅ Да |
| Источник | Ссылка |
|---|
| Первоначальное раскрытие (Xint/Theori) | copy.fail |
| Техническая статья Xint Code | xint.io/blog/copy-fail |
| Запись NVD | nvd.nist.gov |
| Блог безопасности Microsoft | microsoft.com/security/blog |
| Рекомендация Ubuntu | ubuntu.com/blog |
| Рекомендация CERT-EU | cert.europa.eu |
| FAQ от Tenable | tenable.com/blog |
| Palo Alto Unit 42 | unit42.paloaltonetworks.com |
| Рекомендация CloudLinux | blog.cloudlinux.com |
| Анализ Bugcrowd | bugcrowd.com/blog |
| Патч ядра Linux | kernel.org — коммит a664bf3d603d |