
Правила обнаружения для CVE-2026-31431 Linux LPE Vulnerability - Credit: (Copy Fail) https://copy.fail
Опубликовано: 2026-04-30
CVSSv3: 7.8 (High)
Тип: Локальное повышение привилегий (LPE)
Подсистема: Криптографический шаблон algif_aead / authencesn в ядре Linux
Затрагивает: Ядра Linux 4.14 – 6.18.21 (практически все дистрибутивы с 2017 года)
Ссылки:
CVE-2026-31431 — это логическая ошибка, появившаяся в ядре 4.14 (2017) на стыке трёх независимых изменений:
authencesn (добавлен в 2011 году для поддержки ESN в IPsec) записывает 4 байта временных данных за границу своего выходного буфера.AF_ALG получил поддержку AEAD в 2015 году, что позволило пользовательскому пространству передавать данные через splice() из странично-кешированных файлов.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
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
python3 test_cve_2026_31431.py
> **Примечание:** Команда `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)
}
Сохранить как /etc/audit/rules.d/cve-2026-31431.rules
Перезагрузить с помощью:```bash sudo augenrules --load
sudo auditctl -R /etc/audit/rules.d/cve-2026-31431.rules
| [cyberrecon-ng](https://github.com/eremit4/cyberrecon-ng) | Универсальный инструмент разведки для специалистов по кибербезопасности. Собирает информацию из множества источников, чтобы дать подробную картину о цели. Вывод может быть в форматах JSON или CSV. | [](https://github.com/eremit4/cyberrecon-ng) |
| [dollynator](https://github.com/D3adB3don/dollynator) | Инструмент, автоматизирующий проверку списка поддоменов. Проверяет, активен ли каждый поддомен, что ускоряет этап разведки и сокращает ручные усилия при работе с большими списками. | [](https://github.com/D3adB3don/dollynator) |
| [OsintWebOnionLinks](https://github.com/PushkraJ99/OsintWebOnionLinks) | Курируемая коллекция onion-ссылок для облегчения незаметных расследований в даркнете. Предоставляет ресурсы для доступа к скрытым сервисам, сохраняя дополнительный уровень конфиденциальности. | [](https://github.com/PushkraJ99/OsintWebOnionLinks) |
| [S3Insights](https://github.com/darklotuskdb/S3Insights) | Платформа для обнаружения, анализа и отчетности по Amazon S3-корзинам. Использует продвинутые алгоритмы и сторонние интеграции для тщательного сканирования и картирования хранилищ, повышая облачную безопасность. | [](https://github.com/darklotuskdb/S3Insights) |
| [SubEnum](https://github.com/PushkraJ99/SubEnum) | Bash-скрипт для перебора поддоменов и зондирования DNS. Использует Subfinder, Chaos, Shuffledns и MassDNS для эффективного обнаружения и проверки поддоменов. | [](https://github.com/PushkraJ99/SubEnum) |
| [scilla](https://github.com/edoardottt/scilla) | Инструмент сбора информации, выполняющий перебор DNS, поддоменов, портов и директорий. Идеально подходит для задач разведки и картирования поверхности атаки цели. | [](https://github.com/edoardottt/scilla) |
| [Osintgram](https://github.com/Datalux/Osintgram) | OSINT-инструмент для Instagram, предлагающий интерактивную оболочку для анализа. Позволяет извлекать данные о подписчиках, геолокациях, хештегах и комментариях для сбора разведданных о любом пользователе Instagram. | [](https://github.com/Datalux/Osintgram) |
| [DeepFBI](https://github.com/dragonked2/DeepFBI) | Продвинутая обёртка для `findomain`, `httpx` и `anew` для автоматизации обнаружения доменов. Упрощает перебор и фильтрацию поддоменов, приоритезируя новые записи для повышения эффективности. | [](https://github.com/dragonked2/DeepFBI) |
| [GooFuzz](https://github.com/m4ru17/F4mou5-GooFuzz) | Скрипт, использующий методы обхода Google Поиска для перечисления файлов с помощью расширенных операторов. Упрощает обнаружение файлов без аутентификации и может интегрироваться с внешними инструментами, такими как `ffuf`, для дальнейшего анализа. | [](https://github.com/m4ru17/F4mou5-GooFuzz) |
| [crt.sh](https://crt.sh/) | Онлайн-сервис для поиска SSL/TLS-сертификатов. Полезен для обнаружения поддоменов и проверки журналов прозрачности сертификатов для выявления потенциальных уязвимостей. | [](https://github.com/crtsh) |
| [dashphase](https://github.com/symbolexe/dashphase) | Комплексная OSINT-панель, автоматизирующая поиск email, псевдонимов и номеров телефонов, IP-панель, сканирование поддоменов, определение производителя по MAC-адресу, анализ изображений и многое другое для эффективного и быстрого сбора разведданных. | [](https://github.com/symbolexe/dashphase) |
| [mario_planq](https://github.com/securebinary/mario_planq) | Масштабируемый и гибкий модульный фреймворк для OSINT и сбора информации. Создан для упрощения и ускорения процесса разведки для пентестеров, охотников за уязвимостями и даже киберпреступников. | [](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
sudo ausearch -k cve_2026_31431_afalg_socket -k cve_2026_31431_splice
--start recent -i | aureport --interpret
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
---
## Правила 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_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" } ] } ] } }
---
## Исправление и устранение уязвимости
### Исправление ядра
| Ветка | Исправленная версия | Коммит исправления |
|--------|--------------|------------|
| 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. На перезагруженной системе повреждение кэша страниц исчезает, но атакующий мог уже установить постоянство другими средствами.
Пакет обнаружения поддерживается на основе официального PoC по адресу theori-io/copy-fail-CVE-2026-31431. Если вы наблюдаете варианты эксплуатации, не охваченные этими правилами, пожалуйста, откройте issue в основном репозитории PoC.
| Индикатор | Значение | Уверенность |
|---|
| Семейство сокетов AF_ALG | 38 (первый аргумент socket()) | Средняя — существуют легитимные использования |
| Тип сокета | 5 (SOCK_SEQPACKET) | Средняя |
| Уровень опции SOL_ALG | 279 (первый аргумент setsockopt()) | Средняя |
| Строка алгоритма | authencesn(hmac(sha256),cbc(aes)) | Высокая — необычно вне ESN IPsec |
| Цепочка системных вызовов | socket(38) → setsockopt(279) → splice() | Высокая |
| Нагрузка ключа PoC | 0800010000000010 (hex, в setsockopt) | Высокая для известного PoC |
| Основная цель PoC | /etc/passwd UID field | Средняя |
| Вторичные цели | /usr/bin/su, /usr/bin/sudo | Средняя |
| Модуль ядра | algif_aead | Зависит от контекста |