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

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

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

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

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

Категории

Все категории
Loading categories
Detections-CVE-2026-31431 — Правила обнаружения для CVE-2026-31431 Linux LPE Vulnerability - Credit: (Copy Fail) https://copy.fail | Kitploit
Инструменты/GitHubGitHub/insomnisec/detections-cve-2026-31431
Управление индикаторами компрометации (IOC)Повышение привилегийАнализ уязвимостейЭксплуатацияФорензикаРазведка угрозОбнаружение ВторженийОбучение и ОбразованиеРеагирование на Инциденты

Популярное

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

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

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

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

Смотреть все инструменты →
Поделиться
GitHubinsomnisec/detections-cve-2026-31431

Detections-CVE-2026-31431

Правила обнаружения для CVE-2026-31431 Linux LPE Vulnerability - Credit: (Copy Fail) https://copy.fail

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

MOVING TO: https://github.com/insomnisec/public_cve_detections

FOR BETTER LONG TERM MANAGEMENT OF DETECTION PUBLICATIONS

THIS REPO WILL BE REMOVED IN JUNE 2026

PLEASE USE THE OTHER REPO GOING FORWARD

CVE-2026-31431 "Copy Fail" — Пакет обнаружения и реагирования

Опубликовано: 2026-04-30
CVSSv3: 7.8 (High)
Тип: Локальное повышение привилегий (LPE)
Подсистема: Криптографический шаблон algif_aead / authencesn в ядре Linux
Затрагивает: Ядра Linux 4.14 – 6.18.21 (практически все дистрибутивы с 2017 года)
Ссылки:

  • Статья Xint/Theori
  • Официальный PoC
  • Раскрытие на oss-security
  • copy.fail

Оглавление

  1. Краткое описание уязвимости
  2. Как работает эксплойт
  3. Ограничения обнаружения
  4. Немедленное смягчение
  5. Правило YARA
  6. Правила Auditd
  7. Правила Wazuh
  8. Шаблон события MISP
  9. Патчи и исправление
  10. Справочник ключевых IoCs

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

CVE-2026-31431 — это логическая ошибка, появившаяся в ядре 4.14 (2017) на стыке трёх независимых изменений:

  1. Шаблон authencesn (добавлен в 2011 году для поддержки ESN в IPsec) записывает 4 байта временных данных за границу своего выходного буфера.
  2. AF_ALG получил поддержку AEAD в 2015 году, что позволило пользовательскому пространству передавать данные через splice() из странично-кешированных файлов.
  3. В 2017 году algif_aead.c был оптимизирован для работы «на месте» (req->src == req->dst), помещая живые страницы кэша страниц в доступный для записи scatterlist.

Результат: непривилегированный пользователь может записать ровно 4 контролируемых байта в копию кэша страниц ядра любого читаемого файла — включая setuid-бинарники и /etc/passwd — не затрагивая файл на диске. Рабочий PoC — это скрипт Python размером 732 байта. Никакого состояния гонки. Никаких привязок к дистрибутиву. Надёжно работает на Ubuntu, RHEL, Amazon Linux и SUSE.


Как работает эксплойт```

Attacker opens AF_ALG socket (family 38, type 5) └─ Binds to "authencesn(hmac(sha256),cbc(aes))" └─ Sets SOL_ALG (279) options including key and authsize └─ Accepts a connection socket

Attacker opens target file (e.g., /etc/passwd) read-only └─ Uses splice() to feed page-cache pages into the AEAD socket's RX buffer └─ Sends crafted AAD via sendmsg() — bytes 4–7 of AAD = attacker-controlled write value

authencesn performs in-place decryption: └─ scatterwalk_map_and_copy writes seqno_lo into the chained page-cache page └─ recvmsg() returns an error (HMAC fails — expected), but the write already happened

Page-cache now contains attacker-modified copy of the file └─ Kernel executes from page-cache, not disk └─ On-disk file is UNCHANGED — file integrity tools see nothing

root@kitploit:~
PoC нацелен на `/etc/passwd`: он находит смещение поля UID текущего пользователя и перезаписывает его на `0000`, затем вызывает `su` для получения root-оболочки.

---

## Ограничения обнаружения

> **Прочитайте этот раздел перед развертыванием любых правил ниже.**

Эта эксплойт имеет два свойства, которые значительно ограничивают возможности обнаружения:

**1. Запись идет в кэш страниц, а не в файловую систему.**
Любой инструмент обнаружения, который отслеживает события файловой системы — `inotify`, `fanotify`, AIDE, Tripwire, auditd path watches — **не** заметит изменения. Файл на диске никогда не записывается. Это означает, что флаги `-p w` (write) в auditd path watches для `/usr/bin/su` или `/etc/passwd` не перехватят фактическую запись эксплойта.

**2. Механизм использует легитимные интерфейсы ядра.**
Сокеты `AF_ALG`, `splice()` и `authencesn` имеют легитимное применение (IPsec, самотестирование ядра, ввод-вывод в стиле sendfile). Обнаружение должно сосредотачиваться на *комбинации* этих примитивов, а не на каждом по отдельности, и следует ожидать ложных срабатываний в системах, работающих с IPsec или выполняющих криптотестирование ядра.

**Что обнаружение МОЖЕТ выявить:**
- Системный вызов `socket(AF_ALG, SOCK_SEQPACKET, 0)`
- Системный вызов `splice()`, коррелирующий с вышеуказанным, особенно при доступе к setuid-бинарникам
- Сам скрипт PoC (через YARA)
- Конкретная строка алгоритма `authencesn(hmac(sha256),cbc(aes))` в памяти процесса или файлах скриптов

**Что обнаружение НЕ МОЖЕТ выявить:**
- Фактическая запись в page-cache (в памяти, без событий файловой системы)
- Использование измененной записи page-cache после эксплуатации (выглядит как обычный вызов `su` или `passwd`)
- Варианты, избегающие Python или конкретную строку алгоритма

---

## Немедленное смягчение

Перед развертыванием правил обнаружения примените это смягчение на любом незапатченном хосте:```bash
# Disable algif_aead kernel module — blocks the exploit primitive entirely
echo "install algif_aead /bin/false" | sudo tee /etc/modprobe.d/disable-algif-aead.conf
sudo rmmod algif_aead 2>/dev/null || true

Проверьте, что смягчение активно используя официальный детектор:```bash

Exit 0 = not vulnerable / mitigated

Exit 2 = VULNERABLE

python3 test_cve_2026_31431.py

root@kitploit:~
> **Примечание:** Команда `rmmod` завершится ошибкой, если модуль в данный момент не загружен; это допустимо. Конфигурация `modprobe.d` предотвращает будущие загрузки. Данная мера смягчения не влияет на стандартные рабочие нагрузки TLS, SSH или шифрования файловой системы — она затрагивает только IPsec с расширенными порядковыми номерами с использованием шаблона `authencesn`, что редко встречается за пределами выделенных VPN-шлюзов.

---

## Правило YARA

Сохраните как `cve_2026_31431.yar`

> **Область сканирования:** Это правило предназначено для сканирования файлов скриптов Python на диске или извлеченных из дампов памяти. Оно будет соответствовать известному PoC и близким вариантам. Оно НЕ будет обнаруживать активность эксплойта на уровне системных вызовов — используйте для этого правила auditd/Wazuh.```yara
rule CVE_2026_31431_CopyFail_PoC_HighConfidence {
    meta:
        description     = "High-confidence match: CVE-2026-31431 Copy Fail PoC or close variant"
        author          = "Detection Engineering"
        reference       = "https://xint.io/blog/copy-fail-linux-distributions"
        cve             = "CVE-2026-31431"
        date            = "2026-04-30"
        severity        = "High"
        cvss            = "7.8"

    strings:
        // Algorithm string unique to this exploit path — very high fidelity
        $alg_full      = "authencesn(hmac(sha256),cbc(aes))" ascii

        // Specific socket call signature from PoC: AF_ALG=38, SOCK_SEQPACKET=5
        $socket_call   = "socket(38,5,0)" ascii

        // SOL_ALG socket option (decimal 279)
        $solalg        = "setsockopt(279" ascii

        // Hex key/iv payload written via setsockopt in PoC
        $key_payload   = "0800010000000010" ascii

        // splice() usage in context of AEAD operations
        $splice        = "splice(" ascii

        // Target indicators from PoC (page-cache corruption targets)
        $target_passwd = "/etc/passwd" ascii
        $target_su     = "/usr/bin/su" ascii

        // AF_ALG aead bind strings
        $aead_bind     = "\"aead\"" ascii

    condition:
        // High-confidence: unique algorithm string alone is sufficient
        $alg_full
        or
        // Medium-confidence: socket primitive + option number
        ($socket_call and $solalg)
        or
        // Medium-confidence: splice into AEAD socket targeting a setuid path
        ($aead_bind and $splice and ($target_passwd or $target_su))
        or
        // PoC hex payload present alongside splice
        ($key_payload and $splice)
}

rule CVE_2026_31431_CopyFail_Mechanism {
    meta:
        description     = "Behavioral: AF_ALG AEAD + splice combination suggestive of CVE-2026-31431 technique"
        author          = "Detection Engineering"
        reference       = "https://xint.io/blog/copy-fail-linux-distributions"
        cve             = "CVE-2026-31431"
        date            = "2026-04-30"
        severity        = "Medium"
        note            = "Higher false positive rate than HighConfidence rule — review matches in context"

    strings:
        $authencesn    = "authencesn" ascii nocase
        $af_alg_num    = "socket(38" ascii
        $sol_alg_num   = "279" ascii
        $splice        = "splice(" ascii

    condition:
        ($authencesn and $splice)
        or
        ($af_alg_num and $sol_alg_num and $splice)
}

Правила Auditd

Сохранить как /etc/audit/rules.d/cve-2026-31431.rules

Перезагрузить с помощью:```bash sudo augenrules --load

or on older systems:

sudo auditctl -R /etc/audit/rules.d/cve-2026-31431.rules

root@kitploit:~
| [cyberrecon-ng](https://github.com/eremit4/cyberrecon-ng) | Универсальный инструмент разведки для специалистов по кибербезопасности. Собирает информацию из множества источников, чтобы дать подробную картину о цели. Вывод может быть в форматах JSON или CSV. | [![stars](https://img.shields.io/github/stars/eremit4/cyberrecon-ng?color=yellow)](https://github.com/eremit4/cyberrecon-ng) |
| [dollynator](https://github.com/D3adB3don/dollynator) | Инструмент, автоматизирующий проверку списка поддоменов. Проверяет, активен ли каждый поддомен, что ускоряет этап разведки и сокращает ручные усилия при работе с большими списками. | [![stars](https://img.shields.io/github/stars/D3adB3don/dollynator?color=yellow)](https://github.com/D3adB3don/dollynator) |
| [OsintWebOnionLinks](https://github.com/PushkraJ99/OsintWebOnionLinks) | Курируемая коллекция onion-ссылок для облегчения незаметных расследований в даркнете. Предоставляет ресурсы для доступа к скрытым сервисам, сохраняя дополнительный уровень конфиденциальности. | [![stars](https://img.shields.io/github/stars/PushkraJ99/OsintWebOnionLinks?color=yellow)](https://github.com/PushkraJ99/OsintWebOnionLinks) |
| [S3Insights](https://github.com/darklotuskdb/S3Insights) | Платформа для обнаружения, анализа и отчетности по Amazon S3-корзинам. Использует продвинутые алгоритмы и сторонние интеграции для тщательного сканирования и картирования хранилищ, повышая облачную безопасность. | [![stars](https://img.shields.io/github/stars/darklotuskdb/S3Insights?color=yellow)](https://github.com/darklotuskdb/S3Insights) |
| [SubEnum](https://github.com/PushkraJ99/SubEnum) | Bash-скрипт для перебора поддоменов и зондирования DNS. Использует Subfinder, Chaos, Shuffledns и MassDNS для эффективного обнаружения и проверки поддоменов. | [![stars](https://img.shields.io/github/stars/PushkraJ99/SubEnum?color=yellow)](https://github.com/PushkraJ99/SubEnum) |
| [scilla](https://github.com/edoardottt/scilla) | Инструмент сбора информации, выполняющий перебор DNS, поддоменов, портов и директорий. Идеально подходит для задач разведки и картирования поверхности атаки цели. | [![stars](https://img.shields.io/github/stars/edoardottt/scilla?color=yellow)](https://github.com/edoardottt/scilla) |
| [Osintgram](https://github.com/Datalux/Osintgram) | OSINT-инструмент для Instagram, предлагающий интерактивную оболочку для анализа. Позволяет извлекать данные о подписчиках, геолокациях, хештегах и комментариях для сбора разведданных о любом пользователе Instagram. | [![stars](https://img.shields.io/github/stars/Datalux/Osintgram?color=yellow)](https://github.com/Datalux/Osintgram) |
| [DeepFBI](https://github.com/dragonked2/DeepFBI) | Продвинутая обёртка для `findomain`, `httpx` и `anew` для автоматизации обнаружения доменов. Упрощает перебор и фильтрацию поддоменов, приоритезируя новые записи для повышения эффективности. | [![stars](https://img.shields.io/github/stars/dragonked2/DeepFBI?color=yellow)](https://github.com/dragonked2/DeepFBI) |
| [GooFuzz](https://github.com/m4ru17/F4mou5-GooFuzz) | Скрипт, использующий методы обхода Google Поиска для перечисления файлов с помощью расширенных операторов. Упрощает обнаружение файлов без аутентификации и может интегрироваться с внешними инструментами, такими как `ffuf`, для дальнейшего анализа. | [![stars](https://img.shields.io/github/stars/m4ru17/F4mou5-GooFuzz?color=yellow)](https://github.com/m4ru17/F4mou5-GooFuzz) |
| [crt.sh](https://crt.sh/) | Онлайн-сервис для поиска SSL/TLS-сертификатов. Полезен для обнаружения поддоменов и проверки журналов прозрачности сертификатов для выявления потенциальных уязвимостей. | [![stars](https://img.shields.io/github/stars/crtsh?color=yellow)](https://github.com/crtsh) |
| [dashphase](https://github.com/symbolexe/dashphase) | Комплексная OSINT-панель, автоматизирующая поиск email, псевдонимов и номеров телефонов, IP-панель, сканирование поддоменов, определение производителя по MAC-адресу, анализ изображений и многое другое для эффективного и быстрого сбора разведданных. | [![stars](https://img.shields.io/github/stars/symbolexe/dashphase?color=yellow)](https://github.com/symbolexe/dashphase) |
| [mario_planq](https://github.com/securebinary/mario_planq) | Масштабируемый и гибкий модульный фреймворк для OSINT и сбора информации. Создан для упрощения и ускорения процесса разведки для пентестеров, охотников за уязвимостями и даже киберпреступников. | [![stars](https://img.shields.io/github/stars/securebinary/mario_planq?color=yellow)](https://github.com/securebinary/mario_planq) |```bash
## ============================================================
## CVE-2026-31431 "Copy Fail" — Auditd Detection Rules
## ============================================================
## These rules capture the MECHANISM of the exploit (socket +
## splice syscalls) and correlated /etc/passwd access patterns.
##
## IMPORTANT: These rules will NOT detect the page-cache write
## itself — it is an in-memory operation with no filesystem
## event. File path watches (-w) on setuid binaries or
## /etc/passwd will not fire on the exploit write.
##
## Correlate rule hits across audit.key values to build signal:
## A hit on afalg_socket followed closely by a hit on
## splice_syscall from the same process is a strong indicator.
## ============================================================

## --- Core exploit primitive: AF_ALG socket creation ---
## Monitors socket(2) syscall where a0 = 0x26 (38 decimal = AF_ALG)
## This is the first step of the exploit chain.
-a always,exit -F arch=b64 -S socket -F a0=0x26 -k cve_2026_31431_afalg_socket
-a always,exit -F arch=b32 -S socket -F a0=0x26 -k cve_2026_31431_afalg_socket

## --- splice() syscall monitoring ---
## splice() is used to feed page-cache pages into the AEAD socket.
## NOTE: splice() is commonly used for sendfile-like operations.
## Correlate with cve_2026_31431_afalg_socket hits from the same PID.
-a always,exit -F arch=b64 -S splice -k cve_2026_31431_splice
-a always,exit -F arch=b32 -S splice -k cve_2026_31431_splice

## --- /etc/passwd access monitoring ---
## The PoC reads /etc/passwd to locate the UID field offset.
## Read access (-p r) is retained here because the intent is
## to correlate this read with the AF_ALG socket key above,
## not to use the watch as a standalone alert.
-w /etc/passwd -p rwa -k cve_2026_31431_passwd_access

## --- setuid binary execution monitoring ---
## Detects execution of su after page-cache modification.
## The page-cache write makes su execute as root; this catches
## the exploitation outcome, not the write itself.
-w /usr/bin/su   -p xa -k cve_2026_31431_su_exec
-w /usr/bin/sudo -p xa -k cve_2026_31431_sudo_exec

## --- algif_aead module state monitoring ---
## The exploit requires algif_aead to be loaded.
## Monitoring modprobe helps detect attempts to load the module
## on systems where it was previously disabled as a mitigation,
## and confirms whether the mitigation is being bypassed.
-a always,exit -F arch=b64 -S finit_module -S init_module -k cve_2026_31431_module_load
-w /etc/modprobe.d -p wa -k cve_2026_31431_modprobe_conf

Запрос корреляций

После развертывания правил используйте ausearch для корреляции срабатываний по ключам в пределах временного окна:```bash

Find all CVE-2026-31431 related events in the last hour

sudo ausearch -k cve_2026_31431_afalg_socket -k cve_2026_31431_splice
--start recent -i | aureport --interpret

Check if a specific PID hit both AF_ALG and splice

sudo ausearch -k cve_2026_31431_afalg_socket --start today -i
| grep 'pid=' | awk -F'pid=' '{print $2}' | awk '{print $1}' | sort -u
| while read pid; do sudo ausearch -k cve_2026_31431_splice --start today -i | grep "pid=$pid"
&& echo "[!] PID $pid hit both AF_ALG and splice — investigate" done

root@kitploit:~
---

## Правила Wazuh

Сохраните как локальный файл правил (обычно `/var/ossec/etc/rules/local_rules.xml`).

> **Предварительные требования:** Эти правила зависят от того, что auditd настроен с указанными выше правилами, и декодер Wazuh auditd активен. Они сопоставляются по полю `audit.key`, заполняемому auditd, что является правильным и надежным способом связать две системы. Правила используют `<if_group>auditd</if_group>` вместо конкретного `<if_sid>`, чтобы сохранить совместимость с разными версиями Wazuh.```xml
<!-- ============================================================
     CVE-2026-31431 "Copy Fail" — Wazuh Correlation Rules
     Requires: auditd rules from cve-2026-31431.rules deployed
     ============================================================ -->

<!-- Level 10: AF_ALG socket creation detected -->
<rule id="112001" level="10">
    <if_group>auditd</if_group>
    <field name="audit.key">cve_2026_31431_afalg_socket</field>
    <description>CVE-2026-31431 Copy Fail: AF_ALG socket (family 38) created by unprivileged process</description>
    <group>cve,privilege_escalation,linux,kernel,crypto,</group>
</rule>

<!-- Level 10: splice() syscall detected -->
<rule id="112002" level="10">
    <if_group>auditd</if_group>
    <field name="audit.key">cve_2026_31431_splice</field>
    <description>CVE-2026-31431 Copy Fail: splice() syscall detected — monitor for correlation with AF_ALG socket rule</description>
    <group>cve,privilege_escalation,linux,kernel,</group>
</rule>

<!-- Level 14 CRITICAL: AF_ALG socket followed by splice() from the same source -->
<!-- This chaining is the core exploit mechanism                                 -->
<rule id="112003" level="14">
    <if_matched_sid>112001</if_matched_sid>
    <if_group>auditd</if_group>
    <field name="audit.key">cve_2026_31431_splice</field>
    <same_field>audit.pid</same_field>
    <description>CVE-2026-31431 Copy Fail CRITICAL: AF_ALG socket creation followed by splice() from same process — active exploitation likely</description>
    <group>cve,privilege_escalation,linux,kernel,crypto,high_confidence,</group>
</rule>

<!-- Level 12: /etc/passwd access correlated with AF_ALG activity -->
<rule id="112004" level="12">
    <if_matched_sid>112001</if_matched_sid>
    <if_group>auditd</if_group>
    <field name="audit.key">cve_2026_31431_passwd_access</field>
    <description>CVE-2026-31431 Copy Fail: /etc/passwd access following AF_ALG socket creation — consistent with PoC target selection</description>
    <group>cve,privilege_escalation,linux,kernel,</group>
</rule>

<!-- Level 13: su or sudo executed after AF_ALG socket was created -->
<!-- This may represent execution of the modified page-cache entry  -->
<rule id="112005" level="13">
    <if_matched_sid>112001</if_matched_sid>
    <if_group>auditd</if_group>
    <field name="audit.key">cve_2026_31431_su_exec|cve_2026_31431_sudo_exec</field>
    <description>CVE-2026-31431 Copy Fail: su/sudo execution following AF_ALG socket creation — possible post-exploitation</description>
    <group>cve,privilege_escalation,linux,kernel,</group>
</rule>

<!-- Level 12: Attempt to load algif_aead after it was disabled as a mitigation -->
<rule id="112006" level="12">
    <if_group>auditd</if_group>
    <field name="audit.key">cve_2026_31431_module_load</field>
    <field name="audit.exe" type="pcre2">^.*(python|python3|insmod|modprobe).*$</field>
    <description>CVE-2026-31431 Copy Fail: Kernel module load attempt — verify algif_aead mitigation has not been bypassed</description>
    <group>cve,privilege_escalation,linux,kernel,</group>
</rule>

<!-- Level 13: modprobe.d config modified — possible mitigation removal -->
<rule id="112007" level="13">
    <if_group>auditd</if_group>
    <field name="audit.key">cve_2026_31431_modprobe_conf</field>
    <description>CVE-2026-31431 Copy Fail: /etc/modprobe.d modified — verify algif_aead disable config has not been removed</description>
    <group>cve,privilege_escalation,linux,kernel,</group>
</rule>

Шаблон события MISP

Сохраните как misp_cve_2026_31431.json и импортируйте через MISP → Events → Import.

Примечание: Замените приведённые ниже UUID-заполнители на свежесгенерированные UUID4 для вашего окружения перед импортом. Значения-заполнители показаны в едином формате для удобочитаемости.```json { "Event": { "uuid": "7f3a2d1e-8b4c-4f9a-a3e2-6d5c1b8e9f0a", "info": "CVE-2026-31431 Copy Fail — Linux LPE via authencesn page-cache write", "threat_level_id": "2", "analysis": "2", "date": "2026-04-30", "Attribute": [ { "type": "vulnerability", "category": "External analysis", "to_ids": false, "uuid": "1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d", "comment": "CVE identifier", "value": "CVE-2026-31431" }, { "type": "text", "category": "Other", "to_ids": false, "uuid": "2b3c4d5e-6f7a-8b9c-0d1e-2f3a4b5c6d7e", "comment": "Vulnerability description", "value": "Logic flaw in Linux kernel authencesn cryptographic template. An unprivileged local user can write 4 attacker-controlled bytes into the page cache of any readable file via AF_ALG + splice(), enabling local privilege escalation. No race condition required. Affects kernels 4.14 through 6.18.21." }, { "type": "text", "category": "Other", "to_ids": false, "uuid": "3c4d5e6f-7a8b-9c0d-1e2f-3a4b5c6d7e8f", "comment": "Attack vector summary", "value": "socket(38, 5, 0) [AF_ALG/SOCK_SEQPACKET] → bind authencesn(hmac(sha256),cbc(aes)) → setsockopt(SOL_ALG/279) → splice() page-cache pages into AEAD socket → 4-byte controlled write into page cache of target file" }, { "type": "text", "category": "Other", "to_ids": false, "uuid": "4d5e6f7a-8b9c-0d1e-2f3a-4b5c6d7e8f9a", "comment": "Affected kernel range", "value": "Linux kernel 4.14 (commit 72548b093ee3) through 6.18.21" }, { "type": "text", "category": "Other", "to_ids": false, "uuid": "5e6f7a8b-9c0d-1e2f-3a4b-5c6d7e8f9a0b", "comment": "Introducing commit (root cause)", "value": "72548b093ee38a6d4f2a19e6ef1948ae05c181f7 — algif_aead in-place AEAD optimization (2017)" }, { "type": "text", "category": "Other", "to_ids": false, "uuid": "6f7a8b9c-0d1e-2f3a-4b5c-6d7e8f9a0b1c", "comment": "Fix commit — kernel 6.18.22 stable", "value": "fafe0fa2995a0f7073c1c358d7d3145bcc9aedd8" }, { "type": "text", "category": "Other", "to_ids": false, "uuid": "7a8b9c0d-1e2f-3a4b-5c6d-7e8f9a0b1c2d", "comment": "Fix commit — kernel 6.19.12 stable", "value": "ce42ee423e58dffa5ec03524054c9d8bfd4f6237" }, { "type": "text", "category": "Other", "to_ids": false, "uuid": "8b9c0d1e-2f3a-4b5c-6d7e-8f9a0b1c2d3e", "comment": "Fix commit — kernel 7.0 mainline", "value": "a664bf3d603dc3bdcf9ae47cc21e0daec706d7a5" }, { "type": "text", "category": "Other", "to_ids": true, "uuid": "9c0d1e2f-3a4b-5c6d-7e8f-9a0b1c2d3e4f", "comment": "IoC: Socket family (AF_ALG)", "value": "socket family 38 (AF_ALG)" }, { "type": "text", "category": "Other", "to_ids": true, "uuid": "0d1e2f3a-4b5c-6d7e-8f9a-0b1c2d3e4f5a", "comment": "IoC: Socket type (SOCK_SEQPACKET)", "value": "socket type 5 (SOCK_SEQPACKET)" }, { "type": "text", "category": "Other", "to_ids": true, "uuid": "1e2f3a4b-5c6d-7e8f-9a0b-1c2d3e4f5a6b", "comment": "IoC: Socket option (SOL_ALG = 279)", "value": "setsockopt level 279 (SOL_ALG)" }, { "type": "text", "category": "Other", "to_ids": true, "uuid": "2f3a4b5c-6d7e-8f9a-0b1c-2d3e4f5a6b7c", "comment": "IoC: Algorithm string (highest fidelity)", "value": "authencesn(hmac(sha256),cbc(aes))" }, { "type": "text", "category": "Other", "to_ids": true, "uuid": "3a4b5c6d-7e8f-9a0b-1c2d-3e4f5a6b7c8d", "comment": "IoC: Primary PoC target file", "value": "/etc/passwd (UID field offset targeted by PoC)" }, { "type": "text", "category": "Other", "to_ids": true, "uuid": "4b5c6d7e-8f9a-0b1c-2d3e-4f5a6b7c8d9e", "comment": "IoC: Secondary targets (setuid binaries)", "value": "/usr/bin/su, /usr/bin/sudo" }, { "type": "text", "category": "Other", "to_ids": false, "uuid": "5c6d7e8f-9a0b-1c2d-3e4f-5a6b7c8d9e0f", "comment": "Immediate mitigation", "value": "echo 'install algif_aead /bin/false' > /etc/modprobe.d/disable-algif-aead.conf && rmmod algif_aead" }, { "type": "url", "category": "External analysis", "to_ids": false, "uuid": "6d7e8f9a-0b1c-2d3e-4f5a-6b7c8d9e0f1a", "comment": "Official write-up", "value": "" }, { "type": "url", "category": "External analysis", "to_ids": false, "uuid": "7e8f9a0b-1c2d-3e4f-5a6b-7c8d9e0f1a2b", "comment": "Official PoC repository", "value": "" } ], "Object": [ { "name": "vulnerability", "meta-category": "vulnerability", "Attribute": [ { "type": "vulnerability", "object_relation": "id", "value": "CVE-2026-31431" }, { "type": "cvss-score", "object_relation": "cvss-score", "value": "7.8" }, { "type": "text", "object_relation": "summary", "value": "Linux kernel authencesn LPE via AF_ALG + splice() page-cache write" } ] } ] } }

root@kitploit:~
---

## Исправление и устранение уязвимости

### Исправление ядра

| Ветка | Исправленная версия | Коммит исправления |
|--------|--------------|------------|
| Stable 6.18.x | 6.18.22 | `fafe0fa2995a0f7073c1c358d7d3145bcc9aedd8` |
| Stable 6.19.x | 6.19.12 | `ce42ee423e58dffa5ec03524054c9d8bfd4f6237` |
| Mainline | 7.0 | `a664bf3d603dc3bdcf9ae47cc21e0daec706d7a5` |

Исправление возвращает оптимизацию AEAD на месте 2017 года в `algif_aead.c` к работе вне места, гарантируя, что страницы кэша страниц никогда не помещаются в записываемый scatterlist.

### Рекомендации для конкретных дистрибутивов

| Дистрибутив | Действие |
|---|---|
| Ubuntu | `apt-get update && apt-get upgrade linux-image-generic`; проверьте USN advisory |
| RHEL / Rocky / Alma | `dnf update kernel`; проверьте RHSB advisory |
| Amazon Linux 2023 | `dnf update kernel`; проверьте ALAS advisory |
| SUSE / openSUSE | `zypper update kernel-default`; проверьте SUSE SA advisory |
| Debian | Проверьте security tracker; исправление может быть перенесено до обновления ядра |
| Arch | `pacman -Syu` (rolling; подхватывает исправление из upstream, как только оно появляется) |

### Проверка целостности после воздействия

Если вы подозреваете, что эксплуатация произошла на хосте до установки исправления:```bash
# 1. Check if /etc/passwd UID fields have been tampered
# (compare against a known-good backup or secondary host)
awk -F: '$3 ~ /^0+$/ && $1 != "root" {print "SUSPICIOUS UID 0 ENTRY:", $0}' /etc/passwd

# 2. Drop the page cache to flush any in-memory modifications
# WARNING: This impacts performance temporarily
sync && echo 3 | sudo tee /proc/sys/vm/drop_caches

# 3. Verify setuid binaries against package manager
rpm -Va --nomtime 2>/dev/null | grep -E '^.{0,8}5.*su$|^.{0,8}5.*sudo$'   # RHEL/rpm
debsums -s 2>/dev/null | grep -E 'su|sudo'                                  # Debian/Ubuntu

# 4. Re-examine recently logged su/sudo invocations for unexpected UID transitions
journalctl -u sudo --since "48 hours ago" | grep "session opened for user root"

Важно: Стандартные инструменты проверки целостности файлов (AIDE, Tripwire, debsums, rpm -Va) проверяют хэши на диске и покажут бинарный файл как неизменный даже после эксплуатации кэша страниц. Кэш страниц очищается естественным образом при перезагрузке или с помощью drop_caches. На перезагруженной системе повреждение кэша страниц исчезает, но атакующий мог уже установить постоянство другими средствами.


Справочная информация по ключевым IoC


Пакет обнаружения поддерживается на основе официального PoC по адресу theori-io/copy-fail-CVE-2026-31431. Если вы наблюдаете варианты эксплуатации, не охваченные этими правилами, пожалуйста, откройте issue в основном репозитории PoC.

Скачать инструмент
https://xint.io/blog/copy-fail-linux-distributions
https://github.com/theori-io/copy-fail-CVE-2026-31431
ИндикаторЗначениеУверенность
Семейство сокетов AF_ALG38 (первый аргумент socket())Средняя — существуют легитимные использования
Тип сокета5 (SOCK_SEQPACKET)Средняя
Уровень опции SOL_ALG279 (первый аргумент setsockopt())Средняя
Строка алгоритмаauthencesn(hmac(sha256),cbc(aes))Высокая — необычно вне ESN IPsec
Цепочка системных вызововsocket(38) → setsockopt(279) → splice()Высокая
Нагрузка ключа PoC0800010000000010 (hex, в setsockopt)Высокая для известного PoC
Основная цель PoC/etc/passwd UID fieldСредняя
Вторичные цели/usr/bin/su, /usr/bin/sudoСредняя
Модуль ядраalgif_aeadЗависит от контекста