Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
Linux-Kernel-Copy-Fail-CVE-2026-31431- — Анализ и смягчение уязвимости Copy Fail (CVE-2026-31431) ядра Linux, эксплуатирующей мутацию кэша страниц через AF_ALG/splice, с проверкой PoC, правилами обнаружения auditd и проверкой обновлений ядра. | Kitploit
Инструменты/GitHubGitHub/jihwan77/linux-kernel-copy-fail-cve-2026-31431-
Анализ уязвимостейЭксплуатацияАнализ Бинарных ФайловОбучение и ОбразованиеРеагирование на Инциденты
GitHubjihwan77/linux-kernel-copy-fail-cve-2026-31431-

Linux-Kernel-Copy-Fail-CVE-2026-31431-

Анализ и смягчение уязвимости Copy Fail (CVE-2026-31431) ядра Linux, эксплуатирующей мутацию кэша страниц через AF_ALG/splice, с проверкой PoC, правилами обнаружения auditd и проверкой обновлений ядра.

Репозиторий
22 месяцев назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Анализ уязвимости Copy Fail (CVE-2026-31431) и практические меры реагирования

Данный проект представляет собой мини-проект по анализу принципа действия уязвимости Copy Fail (CVE-2026-31431) ядра Linux, а также сравнению состояния до и после применения патча с помощью неразрушающего проверщика из публичного PoC-репозитория.
Фактическая эксплуатация setuid-бинарников или подмена /etc/passwd не производилась; основное внимание уделено безопасной проверке уязвимости на основе временного testfile, а также анализу с точки зрения обнаружения и смягчения последствий.


1. Цели проекта

Цель этого проекта — не просто выполнение эксплойта, а понимание того, какая комбинация внутренних структур ядра Linux приводит к возникновению уязвимости, и как её можно выявить и нейтрализовать с эксплуатационной точки зрения.

Область работ следующая:

root@kitploit:~
Анализ принципа уязвимости
    ↓
Анализ структуры PoC-кода
    ↓
Практика с неразрушающим проверщиком
    ↓
Сравнение до и после патча
    ↓
Обобщение мер обнаружения/смягчения

В ходе данной практики выполнялся только файл vulnerable.c из репозитория .

copy-fail-c

2. Среда практики

РазделДо патчаПосле патча
ОСUbuntu 24.04.2 LTSUbuntu 24.04.4 LTS
Ядро6.8.0-53-generic6.8.0-134-generic
Учётная записьОбычный пользователь clientОбычный пользователь client
Проверщикvulnerablevulnerable
Метод тестированияНеразрушающая проверка на основе временного testfileПовторный запуск того же проверщика

Информация о ядре до патча:

root@kitploit:~
Linux ubuntu-server 6.8.0-53-generic #55-Ubuntu SMP PREEMPT_DYNAMIC Fri Jan 17 15:37:52 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux

Информация о ядре после патча:

root@kitploit:~
Linux ubuntu-server 6.8.0-134-generic #134-Ubuntu SMP PREEMPT_DYNAMIC Fri Jun 26 18:43:11 UTC 2026 x86_64 x86_64 x86_64 GNU/Linux

Краткое описание изменений пакетов ядра:

root@kitploit:~
- linux-image-6.8.0-53-generic  6.8.0-53.55
- linux-image-generic           6.8.0-53.55+1

+ linux-image-6.8.0-134-generic 6.8.0-134.134
+ linux-image-generic           6.8.0-134.134
+ linux-generic                 6.8.0-134.134
+ linux-headers-generic         6.8.0-134.134

3. Краткое описание концепции уязвимости

Copy Fail — это уязвимость, возникающая при сочетании пути обработки AEAD через AF_ALG в ядре Linux с zero-copy операцией splice(), в результате чего страничный кеш (page cache) файла, доступного только для чтения, может быть ошибочно использован в качестве цели для записи.

Ключевые компоненты:

КомпонентРоль
Страничный кеш LinuxМеханизм ядра, кэширующий содержимое дисковых файлов в ОЗУ
splice()Zero-copy системный вызов, связывающий данные внутри ядра через ссылки без копирования в пользовательское пространство
AF_ALGИнтерфейс, позволяющий использовать криптографический API ядра Linux из пользовательского пространства наподобие сокета
In-place обработка AEADОптимизация, при которой входной и выходной буферы не разделяются, а обработка ведётся в одном буфере
authencesnКриптографический шаблон, в котором при обработке AEAD возникает запись 4 байт scratch

Ключевой поток уязвимости:

root@kitploit:~
Файл, доступный для чтения
    ↓
Попадает в страничный кеш Linux
    ↓
Через splice() ссылка на страничный кеш передаётся в криптографический путь AF_ALG
    ↓
In-place обработка AEAD связывает входной и выходной scatterlist
    ↓
При обработке authencesn возникает запись 4 байт scratch
    ↓
Запись происходит не в отдельный выходной буфер, а в страничный кеш
    ↓
Происходит мутация страничного кеша

То есть splice() передаёт ссылку на страничный кеш, in-place обработка AEAD связывает вход и выход по одному пути, а authencesn фактически осуществляет запись 4 байт.


4. Анализ структуры PoC-кода

Структура репозитория, использованного в практике, следующая:

root@kitploit:~
copy-fail-c/
├── exploit.c
├── exploit-passwd.c
├── vulnerable.c
├── payload.c
├── utils.c
├── utils.h
├── Makefile
└── nolibc/
ФайлРольИспользование в данной практике
utils.c, utils.hРеализация примитива мутации страничного кеша на основе AF_ALG/spliceИспользованы для анализа и запуска vulnerable
vulnerable.cИнструмент неразрушающей проверки уязвимости на основе временного testfileВыполнен
exploit.cВариант подмены страничного кеша setuid root-бинарникаНе выполнялся
exploit-passwd.cВариант подмены страничного кеша /etc/passwdНе выполнялся
payload.cПолезная нагрузка, выполняемая с правами rootНе выполнялся
MakefileАвтоматизация сборкиИспользована только цель vulnerable
nolibc/Лёгкая замена libc для сборки небольших статических ELF payloadТолько анализ

4.1 utils.c

Ядро utils.c — это примитив мутации страничного кеша из серии patch_chunk(). Эта функция подключает страничный кеш целевого файла к пути криптографической обработки с помощью AF_ALG и splice(), и в уязвимом ядре проверяет, перезаписывается ли часть страничного кеша во время обработки AEAD.

4.2 vulnerable.c

vulnerable.c не затрагивает реальные системные файлы. Он создаёт временный testfile в текущем каталоге и проверяет, происходит ли мутация его страничного кеша.

В данном проекте выполнялся только этот файл.


5. Порядок практики

5.1 Запись состояния до патча

Перед обновлением ядра были зафиксированы состояние ОС, ядра и пакетов.

root@kitploit:~
mkdir -p ~/copyfail-mini/{before,after,logs}
cd ~/copyfail-mini

uname -a | tee before/uname.txt
cat /etc/os-release | tee before/os-release.txt
dpkg -l | grep -E 'linux-image|linux-headers|linux-generic|linux-virtual' | tee before/kernel-package.txt

5.2 Клонирование PoC-репозитория и сборка проверщика

root@kitploit:~
git clone https://github.com/jihwan77/copy-fail-c.git
cd copy-fail-c

make clean
make vulnerable

В данной практике не использовалась сборка всех эксплойтов через make по умолчанию; использовалась только цель vulnerable.

5.3 Запуск проверщика до патча

root@kitploit:~
./vulnerable > ../before/vulnerable-output.txt 2>&1
echo $? >> ../before/vulnerable-output.txt
cat ../before/vulnerable-output.txt

Результат выполнения до патча:

alt text

Оценка:

root@kitploit:~
exit code 100
→ подтверждена мутация страничного кеша
→ на ядре до патча примитив Copy Fail работает

6. Сравнение до и после патча

6.1 Обновление ядра

После сохранения результатов до патча было выполнено обновление пакетов Ubuntu.

root@kitploit:~
sudo apt update
sudo apt full-upgrade -y
sudo reboot

После перезагрузки ядро изменилось следующим образом:

root@kitploit:~
До: 6.8.0-53-generic
После: 6.8.0-134-generic

6.2 Повторный запуск проверщика после патча

root@kitploit:~
cd ~/copyfail-mini/copy-fail-c
make clean
make vulnerable

./vulnerable > ../after/vulnerable-output.txt 2>&1
echo "exit_code=$?" >> ../after/vulnerable-output.txt
cat ../after/vulnerable-output.txt

Результат выполнения после патча:

alt text

Сравнение результатов:

ПунктДо патчаПосле патча
Ядро6.8.0-53-generic6.8.0-134-generic
Результат проверщикаVULNERABLEauthencesn template not registered
Код завершения1002
Мутация страничного кешаПодтвержденаПроверщик не дошёл до стадии мутации
ИнтерпретацияПримитив Copy Fail работаетНе удалось войти в путь AEAD/authencesn, требуемый PoC

7. Интерпретация результатов после патча

Код завершения exit_code=2 после патча не означает просто "не уязвимо". Точнее это:

root@kitploit:~
Шаблон authencesn(hmac(sha256),cbc(aes)) в AF_ALG не зарегистрирован,
поэтому проверщик не смог напрямую определить уязвимость

Дополнительная проверка показала, что после обновления Ubuntu загрузка модуля algif_aead была заблокирована.

root@kitploit:~
lsmod | grep -E 'af_alg|algif_aead'

Результат:

root@kitploit:~
af_alg 32768 0

algif_aead не загружен.

root@kitploit:~
sudo modprobe algif_aead

Результат:

root@kitploit:~
modprobe: ERROR: ../libkmod/libkmod-module.c:1084 command_do() Error running install command '/bin/false' for module algif_aead: retcode 1
modprobe: ERROR: could not insert 'algif_aead': Invalid argument

Проверка настройки блокировки:

root@kitploit:~
grep -R "algif_aead" /etc/modprobe.d /lib/modprobe.d 2>/dev/null

Результат:

root@kitploit:~
/etc/modprobe.d/disable-algif_aead.conf:# Disable algif_aead module due to CVE-2026-31431 (AKA copy.fail)
/etc/modprobe.d/disable-algif_aead.conf:install algif_aead /bin/false

Таким образом, результат после патча следует интерпретировать следующим образом:

root@kitploit:~
После обновления безопасности Ubuntu ядро было изменено на 6.8.0-134-generic,
и применена мера смягчения — блокировка модуля algif_aead на уровне kmod.

В результате проверщик уязвимости copy-fail-c не смог привязаться
к требуемому PoC шаблону AF_ALG: authencesn(hmac(sha256),cbc(aes)),
и стадия мутации страничного кеша не была достигнута.

То есть в данной практике наблюдался не только эффект патча самого кода ядра, но и применение блокировки модуля algif_aead в рамках обновления безопасности Ubuntu, что заблокировало прохождение того же PoC-пути.


8. Практика обнаружения с помощью Auditd

Copy Fail позволяет изменять страничный кеш без прямого изменения файлов на диске, поэтому простое обнаружение на основе хешей файлов имеет ограничения. Важно обнаружение на основе поведения системных вызовов.

В данной практике с помощью auditd наблюдались следующие системные вызовы:

root@kitploit:~
sudo auditctl -a always,exit -F arch=b64 -S socket -F a0=38 -k copyfail_afalg
sudo auditctl -a always,exit -F arch=b64 -S bind -k copyfail_bind
sudo auditctl -a always,exit -F arch=b64 -S splice -k copyfail_splice
sudo auditctl -a always,exit -F arch=b64 -S sendmsg -k copyfail_sendmsg

8.1 Обнаружение socket(AF_ALG)

В логах подтверждено создание сокета AF_ALG процессом vulnerable.

root@kitploit:~
comm=vulnerable
syscall=socket
success=yes
a0=alg
key=copyfail_afalg

8.2 Обнаружение сбоя bind()

В среде после патча/смягчения процесс vulnerable попытался выполнить bind к шаблону authencesn, но потерпел неудачу.

root@kitploit:~
comm=vulnerable
syscall=bind
success=no
exit=ENOENT(No such file or directory)
saddr_fam=alg
key=copyfail_bind

Это означает, что в среде после патча PoC смог создать сокет AF_ALG, но не смог выполнить привязку к шаблону authencesn(hmac(sha256),cbc(aes)).

8.3 Интерпретация логов splice() / sendmsg()

После патча проверщик не дошёл до стадии bind(), поэтому не смог перейти к вызовам splice() и sendmsg(). Следовательно, в логах этих системных вызовов значимый поток выполнения vulnerable не наблюдался.


9. Обобщение точек обнаружения

При наблюдении за уязвимостями типа Copy Fail в операционной среде можно увидеть следующую комбинацию действий:

Цель обнаруженияЗначение
socket(AF_ALG, ...)Попытка использования криптографического API ядра
bind() с authencesnПопытка использования криптографического шаблона AEAD/authencesn
splice()Передача ссылки на страничный кеш файла во внутренний путь ядра
sendmsg() / recvmsg()Выполнение криптографического запроса AF_ALG
Запуск setuid-бинарникаВозможность повышения привилегий

В данной практике с помощью auditd были подтверждены события socket(AF_ALG) и сбой bind().


10. Обобщение мер смягчения

10.1 Обновление ядра и пакетов безопасности

Самый основной ответ — применение обновлений безопасности дистрибутива.

root@kitploit:~
sudo apt update
sudo apt full-upgrade -y
sudo reboot

В данной практике после обновления среда изменилась на Ubuntu 24.04.4 / ядро 6.8.0-134-generic.

10.2 Блокировка модуля algif_aead

После обновления Ubuntu была обнаружена следующая настройка:

root@kitploit:~
/etc/modprobe.d/disable-algif_aead.conf
install algif_aead /bin/false

Эта настройка блокирует загрузку модуля algif_aead, предотвращая вход в путь AF_ALG AEAD, необходимый для PoC.

10.3 Мониторинг использования AF_ALG

Обычные серверные приложения редко используют AF_ALG напрямую, поэтому вызов socket(AF_ALG) может служить точкой обнаружения.


11. Итоговая оценка

Результаты данной практики можно обобщить следующим образом:

root@kitploit:~
До патча:
Ubuntu 24.04.2 / ядро 6.8.0-53-generic
проверщик vulnerable — код завершения 100
подтверждена мутация страничного кеша
→ примитив Copy Fail работает

После патча:
Ubuntu 24.04.4 / ядро 6.8.0-134-generic
проверщик vulnerable — код завершения 2
сбой привязки шаблона authencesn
подтверждена настройка блокировки модуля algif_aead
→ тот же путь PoC не дошёл до стадии мутации страничного кеша

Таким образом, вывод проекта следующий:

На ядре до патча примитив мутации страничного кеша Copy Fail действительно работал. После применения обновления безопасности Ubuntu ядро было изменено на 6.8.0-134-generic, и была применена настройка блокировки модуля algif_aead, по-видимому, на уровне kmod. В результате проверщик не смог выполнить привязку к требуемому шаблону authencesn(hmac(sha256),cbc(aes)) AF_ALG, и не дошёл до стадии мутации страничного кеша.

То есть, по результатам данной практики, нельзя утверждать, что "патч самого кода ядра напрямую заблокировал мутацию страничного кеша", но на основании имеющихся логов и результатов можно с уверенностью сказать: после обновления безопасности Ubuntu была применена мера смягчения в виде блокировки модуля algif_aead, которая заблокировала путь PoC.


12. Справочные материалы

  • Ubuntu Security Notice - USN-8226-1: kmod update
    https://ubuntu.com/security/notices/USN-8226-1

  • Ubuntu Blog - Fixes available for CVE-2026-31431 Copy Fail
    https://ubuntu.com/blog/copy-fail-vulnerability-fixes-available

  • copy-fail-c PoC repository
    https://github.com/jihwan77/copy-fail-c


13. Резюме

Ключевые моменты, подтверждённые в ходе данного проекта:

root@kitploit:~
1. Copy Fail — это уязвимость ядра, сочетающая AF_ALG, splice(), in-place обработку AEAD, authencesn и страничный кеш.
2. В среде до патча Ubuntu 24.04.2 / ядро 6.8.0-53 неразрушающий проверщик подтвердил мутацию страничного кеша.
3. В среде после патча Ubuntu 24.04.4 / ядро 6.8.0-134 произошёл сбой на этапе привязки authencesn.
4. Дополнительная проверка показала, что загрузка модуля algif_aead заблокирована настройкой /bin/false.
5. С помощью auditd удалось наблюдать события socket(AF_ALG) и сбой bind.
6. Операционные меры реагирования включают обновление ядра/пакетов безопасности, ограничение algif_aead, мониторинг системных вызовов AF_ALG и проверку setuid-бинарников.
Скачать инструмент