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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2026-31431 — Анализ и руководство по смягчению последствий для CVE-2026-31431, локального повышения привилегий в ядре Linux в подсистеме crypto algif_aead, с оценкой воздействия для RHEL и OpenShift, включая усиление защиты seccomp и SCC. | Kitploit
Инструменты/GitHubGitHub/slauger/cve-2026-31431
Повышение привилегийБезопасность контейнеровАнализ уязвимостейЭксплуатацияБезопасность облачных сред
GitHubslauger/cve-2026-31431

CVE-2026-31431

Анализ и руководство по смягчению последствий для CVE-2026-31431, локального повышения привилегий в ядре Linux в подсистеме crypto algif_aead, с оценкой воздействия для RHEL и OpenShift, включая усиление защиты seccomp и SCC.

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

Популярное

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

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

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

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

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

CVE-2026-31431 — «Copy Fail»

Локальное повышение привилегий в подсистеме algif_aead криптографического модуля ядра Linux.

Обзор

CVE-2026-31431, получивший название «Copy Fail», — это логическая ошибка в криптографическом шаблоне authencesn ядра Linux (algif_aead). Она позволяет непривилегированному локальному пользователю выполнить контролируемую запись 4 байт в page cache любого читаемого файла, что можно использовать для модификации setuid-бинарника и получения прав root.

  • CVSS: 7.8 (High)
  • Затронуты: Все основные ядра Linux, выпускаемые с 2017 года
  • Эксплойт: Python-скрипт размером 732 байта — без гонок, без специфичных для ядра смещений
  • Исправление: Коммит в mainline a664bf3d603d

Хронология

ДатаСобытие
2026-03-23Сообщено команде безопасности ядра Linux
2026-04-01Патч добавлен в mainline
2026-04-22Присвоен CVE
2026-04-29Публичное раскрытие

Матрица воздействия

Эксплойт требует двух вещей: сокет AF_ALG (разрешён по умолчанию во всех профилях seccomp) и setuid-бинарник (например, /usr/bin/su). Ключевая мера смягчения — allowPrivilegeEscalation: false: она устанавливает флаг ядра Linux no_new_privs через prctl(PR_SET_NO_NEW_PRIVS, 1), из-за чего ядро игнорирует биты setuid/setgid при execve(). Поскольку эксплойт полагается на выполнение модифицированного setuid-бинарника, это блокирует финальный шаг повышения привилегий.

Это не специфичная для OpenShift функция — она работает так же на обычном Kubernetes (Pod Security Standards Restricted), Docker (--security-opt no-new-privileges) и Podman. OpenShift просто применяет её по умолчанию через SCC restricted-v2, тогда как другие платформы требуют явной настройки.

RHEL 8 / RHEL 9

RHEL 8 и RHEL 9 поставляются с ядрами, содержащими уязвимый код. Непривилегированный локальный пользователь с доступом к shell может использовать это для получения root. Немедленно установите патч.

root@kitploit:~
yum updateinfo list cves CVE-2026-31431
yum update kernel

OpenShift (4.x)

OpenShift работает на RHCOS, который поставляется с уязвимым ядром. Практическое воздействие зависит от Security Context Constraints (SCC) рабочей нагрузки.

Стандартные рабочие нагрузки с SCC restricted-v2 по умолчанию не эксплуатируемы, поскольку применяется allowPrivilegeEscalation: false.

Поды, работающие с повышенными SCC (anyuid, privileged или пользовательскими SCC, разрешающими allowPrivilegeEscalation: true), уязвимы. Обычно это включает:

  • Поды CI/CD сборки (агенты Jenkins, Tekton с пользовательскими SCC)
  • Устаревшие приложения, требующие anyuid
  • Инфраструктурные поды (мониторинг, логирование, хранилища)

Прямой доступ к узлу (например, через oc debug node/) всегда уязвим — стандартное локальное повышение привилегий без изоляции контейнеров.

Тестирование

Предоставлен тестовый под для проверки выполнения предпосылок эксплойта в вашем кластере. Он не пытается эксплуатировать уязвимость — он только проверяет:

  1. Можно ли создать сокет AF_ALG? (достижима ли поверхность атаки ядра)
  2. Установлен ли no_new_privs? (блокирует повышение через setuid)
  3. Присутствуют ли setuid-бинарники в образе контейнера?
  4. Версия ядра базового узла

Использование (Под)

root@kitploit:~
oc apply -f test-pod.yaml
oc logs cve-2026-31431-check
oc delete -f test-pod.yaml

Использование (Deployment)

Используйте вариант Deployment для тестирования на нескольких узлах, масштабируя реплики или применяя анти-аффинитет подов:

root@kitploit:~
oc apply -f test-deployment.yaml
oc logs -l app=cve-2026-31431-check
oc delete -f test-deployment.yaml

Коды выхода

КодЗначение
0Не эксплуатируемо — сокет AF_ALG заблокирован seccomp
1Частично открыт — AF_ALG доступен, но setuid заблокирован no_new_privs
2Уязвим — все предпосылки эксплойта выполнены

Ожидаемый результат на OpenShift по умолчанию

В стандартном кластере OpenShift с SCC restricted-v2 вы должны увидеть код выхода 1 (частично открыт): сокет AF_ALG может быть создан (RuntimeDefault seccomp его не блокирует), но no_new_privs предотвращает шаг повышения через setuid. Опубликованный PoC не сработает, но уязвимость на уровне ядра всё ещё достижима — рекомендуется установка патча.

Меры смягчения

1. Установите патч ядра (P0)

Это единственное полное исправление. Обновите ядро на всех узлах и перезагрузите их.

Для OpenShift обновите RHCOS до версии, включающей исправление, и выполните поэтапную перезагрузку узлов.

2. Отключите модуль algif_aead (временное решение)

Если algif_aead скомпилирован как загружаемый модуль (CONFIG_CRYPTO_USER_API_AEAD=m):

root@kitploit:~
echo "install algif_aead /bin/false" > /etc/modprobe.d/disable-algif.conf
rmmod algif_aead 2>/dev/null || true

Это НЕ работает, если algif_aead встроен в ядро (=y), что имеет место на RHCOS. Проверьте с помощью:

root@kitploit:~
modinfo algif_aead 2>&1 | grep builtin
grep CONFIG_CRYPTO_USER_API_AEAD /boot/config-$(uname -r)

3. Заблокируйте AF_ALG через seccomp (OpenShift)

Если модуль ядра встроен, единственная мера смягчения до установки патча для контейнеров — блокировка системного вызова socket(AF_ALG, ...) через пользовательский профиль seccomp.

Разверните профиль seccomp через MachineConfig

Создайте MachineConfig для размещения профиля на всех узлах (повторите с role: master для узлов control plane):

root@kitploit:~
apiVersion: machineconfiguration.openshift.io/v1
kind: MachineConfig
metadata:
  labels:
    machineconfiguration.openshift.io/role: worker
  name: 99-worker-seccomp-deny-af-alg
spec:
  config:
    ignition:
      version: 3.2.0
    storage:
      files:
        - path: /var/lib/kubelet/seccomp/deny-af-alg.json
          mode: 0644
          contents:
            source: data:application/json;charset=utf-8;base64,ewogICJkZWZhdWx0QWN0aW9uIjogIlNDTVBfQUNUX0FMTE9XIiwKICAic3lzY2FsbHMiOiBbCiAgICB7CiAgICAgICJuYW1lcyI6IFsic29ja2V0Il0sCiAgICAgICJhY3Rpb24iOiAiU0NNUF9BQ1RfRVJSTk8iLAogICAgICAiYXJncyI6IFsKICAgICAgICB7CiAgICAgICAgICAiaW5kZXgiOiAwLAogICAgICAgICAgInZhbHVlIjogMzgsCiAgICAgICAgICAib3AiOiAiU0NNUF9DTVBfRVEiCiAgICAgICAgfQogICAgICBdCiAgICB9CiAgXQp9

Содержимое base64 декодируется в:

root@kitploit:~
{
  "defaultAction": "SCMP_ACT_ALLOW",
  "syscalls": [
    {
      "names": ["socket"],
      "action": "SCMP_ACT_ERRNO",
      "args": [
        {
          "index": 0,
          "value": 38,
          "op": "SCMP_CMP_EQ"
        }
      ]
    }
  ]
}

Примечание: Применение MachineConfig вызывает поэтапную перезагрузку узлов.

Укажите профиль в спецификациях подов

root@kitploit:~
securityContext:
  seccompProfile:
    type: Localhost
    localhostProfile: deny-af-alg.json

Альтернатива на уровне кластера

Чтобы защитить все контейнеры без изменения спецификаций подов, переопределите профиль seccomp CRI-O по умолчанию (/etc/crio/seccomp.json) через MachineConfig, добавив правило фильтрации AF_ALG в существующий профиль.

4. Проведите аудит ваших SCC

Определите поды, работающие с повышенными привилегиями:

root@kitploit:~
# Найдите поды, не использующие restricted-v2
oc get pods -A -o json | jq -r '
  .items[] |
  select(.metadata.annotations["openshift.io/scc"] != "restricted-v2") |
  "\(.metadata.namespace)/\(.metadata.name) → \(.metadata.annotations["openshift.io/scc"])"
'

Именно эти поды являются теми, где работает полная цепочка эксплойта. Приоритизируйте установку патчей или меры seccomp для узлов, на которых выполняются эти рабочие нагрузки.

Влияние отключения AF_ALG

Блокировка сокетов AF_ALG оказывает незначительное влияние на большинство рабочих нагрузок. Следующее не затрагивается:

  • dm-crypt / LUKS
  • kTLS
  • IPsec
  • OpenSSL / GnuTLS (стандартные сборки)

Затронуты только приложения, явно настроенные на использование движка OpenSSL afalg.

Ссылки

  • Copy Fail — страница проекта
  • Red Hat CVE-2026-31431
  • NVD — CVE-2026-31431
  • RuntimeDefault не блокирует AF_ALG (juliet.sh)
  • Xint — разбор Copy Fail
  • The Register — ошибка в криптографическом коде Linux
Скачать инструмент
ОкружениеallowPrivilegeEscalationRoot в контейнереRoot на хостеРиск
RHEL 8 / RHEL 9 (локальный пользователь)n/an/aДаКритический
Узел OpenShift (доступ к shell, напр. oc debug node/)n/an/aДаКритический
Под OpenShift — SCC restricted-v2 (по умолчанию)falseНетНетНизкий
Под OpenShift — SCC anyuidtrueДаНет (изоляция namespace)Высокий
Под OpenShift — SCC privilegedtrueДаДа (без изоляции)Критический
Под OpenShift — пользовательский SCCзависитзависитзависитАудит
Под Kubernetes — PSS RestrictedfalseНетНетНизкий
Под Kubernetes — PSS Baseline / без политикиtrue (по умолчанию)ДаНетВысокий
Docker / Podman — --security-opt no-new-privilegesfalseНетНетНизкий
Docker / Podman — по умолчаниюtrueДаНетВысокий