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

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

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

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

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

Категории

Все категории
Loading categories
cve-2026-31431-mitigation — Seccomp-основанное смягчение для CVE-2026-31431, LPE-уязвимости ядра Linux. Блокирует AF_ALG-сокеты через PAM-модуль и автономную обёртку, с автоматическим определением пропатченных ядер. | Kitploit
Инструменты/GitHubGitHub/linux-zs/cve-2026-31431-mitigation
Оборонительные ИнструментыАнализ уязвимостейАудит конфигурацииВиртуализация для безопасности
GitHublinux-zs/cve-2026-31431-mitigation

cve-2026-31431-mitigation

Seccomp-основанное смягчение для CVE-2026-31431, LPE-уязвимости ядра Linux. Блокирует AF_ALG-сокеты через PAM-модуль и автономную обёртку, с автоматическим определением пропатченных ядер.

Репозиторий

Популярное

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

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

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

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

Смотреть все инструменты →
84 месяцев назадЕщё не проверено
Поделиться

CVE-2026-31431 seccomp Mitigation

Лёгкая обратимая защита на основе seccomp для CVE-2026-31431 — локальной уязвимости повышения привилегий в подсистеме криптографии algif_aead / authencesn ядра Linux.

中文文档


Обзор уязвимости

Тип: Локальное повышение привилегий (LPE)

Поражённый компонент: Ядро Linux crypto/algif_aead.c — операция AEAD на месте (in-place)

Примитив атаки: Контролируемая запись 4 байт в page cache любого читаемого файла через путь записи-черновика (scratch-write) алгоритма AEAD authencesn. Нацелившись на /etc/passwd, атакующий может изменить свой UID на 0 (root) и получить root-оболочку через su.

Затронутые ядра: Подтверждено на ядрах 6.12+, 6.17+, 6.18+, также воспроизведено на ядрах RHEL/CentOS 4.18/5.14.

Проверенные окружения: Rocky Linux 8 (ядро 4.18) и Rocky Linux 9 (ядро 5.14) — эксплойт полностью заблокирован, безопасное удаление подтверждено.

Корневая причина: Коммит 72548b093ee3 ввёл операцию AEAD на месте. Когда сцепленные (spliced) страницы page cache используются как целевой scatterlist, поле AAD seqno_lo ошибочно записывается обратно в page cache во время расшифровки AEAD.

Исправление в апстриме: Откат к операции AEAD вне места (out-of-place).

Как работает эта защита

Данное решение состоит из двух компонентов:

  1. PAM-модуль (pam_block_afalg.so) — основная защита. Загружается PAM при открытии сеанса (pam_sm_open_session), применяет seccomp BPF-фильтр, блокирующий socket(AF_ALG, ...) до запуска любого пользовательского кода. Это покрывает ВСЕ сеансы, прошедшие аутентификацию PAM: su -c, su -, SSH, вход через TTY и т. д.

  2. Автономный бинарник (block_afalg) — опционально. Может оборачивать конкретные программы для сценариев без PAM (например, cron-задачи, systemd-сервисы, ручной вызов).

Seccomp-фильтр:

  • Блокирует только socket(AF_ALG, ...) (возвращает EACCES)
  • Нулевое влияние на все остальные системные вызовы (включая setuid, su, sudo)
  • Наследуется всеми дочерними процессами (fork + exec)
  • Автоматически определяет пропатченные ядра и становится no-op

Архитектура

root@kitploit:~
Открытие PAM-сеанса (su, ssh, login и т. д.)
  |
  v
pam_block_afalg.so (pam_sm_open_session)
  |
  +-- Проверка: уязвимо ли ядро? (попытка socket(AF_ALG))
  |     |
  |     +-- Нет  --> возврат PAM_SUCCESS (no-op)
  |     |
  |     +-- Да --> prctl(PR_SET_SECCOMP, BPF-фильтр)
  |                   |
  |                   +-- seccomp-фильтр активен на дочернем процессе sshd
  |                   +-- наследуется оболочкой пользователя и ВСЕМИ дочерними процессами
  |                   +-- socket(AF_ALG, ...) возвращает EACCES
  v
Оболочка / команда пользователя выполняется с защитой seccomp
  |
  +-- su, sudo и все остальные системные вызовы работают нормально
  +-- Блокируется только сокет AF_ALG

Файлы

ФайлНазначение
pam_block_afalg.cИсходный код PAM-модуля. Применяет seccomp-фильтр при открытии сеанса.

Требования

  • Ядро Linux с поддержкой seccomp (большинство современных ядер)
  • gcc (для компиляции)
  • libpam (во время выполнения, обычно предустановлена)
  • Доступ root/sudo (для установки)
  • Архитектура x86_64 (BPF-фильтр использует номера системных вызовов x86_64)

Быстрый старт

root@kitploit:~
# 1. Компиляция PAM-модуля
gcc -Wall -O2 -fPIC -shared -o pam_block_afalg.so pam_block_afalg.c \
    /usr/lib64/libpam.so.0

# 2. Установка (автоматически добавляет конфигурации PAM в su, sshd, login)
sudo ./deploy.sh install

# 3. Проверка (обязательно НОВЫЙ сеанс)
cat /proc/self/status | grep Seccomp
# Должно показывать: Seccomp: 2

python3 -c "
import socket
try:
    s = socket.socket(38,2,0); s.close()
    print('VULNERABLE')
except OSError:
    print('BLOCKED')
"
# Должно показывать: BLOCKED

# 4. Удаление
sudo ./deploy.sh remove

Справочник команд

КомандаОписание
deploy.sh installКомпиляция PAM-модуля, установка в /lib64/security/, автоматическое добавление конфигураций PAM
deploy.sh removeПолное удаление: удаление модуля, очистка конфигураций PAM, удаление файлов

Автономное использование

Для сценариев без PAM используйте block_afalg напрямую:

root@kitploit:~
# Компиляция
gcc -Wall -O2 -o block_afalg block_afalg.c

# Запуск команды с заблокированным AF_ALG
./block_afalg python3 your_script.py
./block_afalg bash

Проверка

Проверка уязвимости ядра

root@kitploit:~
python3 -c "
import socket
try:
    s = socket.socket(38, socket.SOCK_SEQPACKET, 0)
    s.close()
    print('VULNERABLE: AF_ALG socket available')
except:
    print('SAFE: AF_ALG socket blocked or unavailable')
"

Проверка активности PAM-модуля

root@kitploit:~
# Проверка статуса seccomp
cat /proc/self/status | grep Seccomp
# Seccomp: 0 = не защищено
# Seccomp: 2 = защищено

# Тест сокета AF_ALG
python3 -c "
import socket
try:
    s = socket.socket(38,2,0)
    s.close()
    print('AF_ALG available - NOT protected')
except OSError:
    print('AF_ALG blocked - PROTECTED')
"

# Проверка журналов PAM
grep pam_block_afalg /var/log/secure
# Должно показывать: seccomp filter applied, AF_ALG blocked

Ограничения

  • Только x86_64: BPF-фильтр жёстко задаёт номер системного вызова 41 (__NR_socket на x86_64). Для других архитектур необходимо обновить номер системного вызова.
  • Зависимость от PAM: Защищает только сеансы, проходящие через PAM. Прямые вызовы exec() без PAM не покрываются (используйте block_afalg для таких случаев).
  • Нет отключения во время выполнения: После применения seccomp-фильтра к процессу его нельзя удалить. Проверка ядра гарантирует применение только при необходимости.
  • Только новые сеансы: Существующие сеансы, запущенные до установки модуля, не защищаются ретроактивно.

Когда удалять

  1. Применён официальный патч ядра — PAM-модуль определяет это автоматически, но вы всё равно можете выполнить очистку с помощью remove.
  2. RHEL/CentOS выпускает пропатченное ядро — yum update kernel, затем удалите модуль.

Лицензия

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

Скачать инструмент
pam_minimal.hМинимальные определения типов PAM (компилируется без pam-devel).
block_afalg.cАвтономный бинарник-обёртка seccomp. Для использования вне PAM.
deploy.shСкрипт развёртывания. Компилирует, устанавливает и управляет PAM-модулем.
deploy.sh statusПоказ состояния установки, конфигураций PAM, статуса ядра