
Анализ и руководство по смягчению последствий для CVE-2026-31431, локального повышения привилегий в ядре Linux в подсистеме crypto algif_aead, с оценкой воздействия для RHEL и OpenShift, включая усиление защиты seccomp и SCC.
Локальное повышение привилегий в подсистеме algif_aead криптографического модуля ядра Linux.
CVE-2026-31431, получивший название «Copy Fail», — это логическая ошибка в криптографическом шаблоне authencesn ядра Linux (algif_aead). Она позволяет непривилегированному локальному пользователю выполнить контролируемую запись 4 байт в page cache любого читаемого файла, что можно использовать для модификации setuid-бинарника и получения прав root.
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 поставляются с ядрами, содержащими уязвимый код. Непривилегированный локальный пользователь с доступом к shell может использовать это для получения root. Немедленно установите патч.
yum updateinfo list cves CVE-2026-31431
yum update kernel
OpenShift работает на RHCOS, который поставляется с уязвимым ядром. Практическое воздействие зависит от Security Context Constraints (SCC) рабочей нагрузки.
Стандартные рабочие нагрузки с SCC restricted-v2 по умолчанию не эксплуатируемы, поскольку применяется allowPrivilegeEscalation: false.
Поды, работающие с повышенными SCC (anyuid, privileged или пользовательскими SCC, разрешающими allowPrivilegeEscalation: true), уязвимы. Обычно это включает:
anyuidПрямой доступ к узлу (например, через oc debug node/) всегда уязвим — стандартное локальное повышение привилегий без изоляции контейнеров.
Предоставлен тестовый под для проверки выполнения предпосылок эксплойта в вашем кластере. Он не пытается эксплуатировать уязвимость — он только проверяет:
AF_ALG? (достижима ли поверхность атаки ядра)no_new_privs? (блокирует повышение через setuid)oc apply -f test-pod.yaml
oc logs cve-2026-31431-check
oc delete -f test-pod.yaml
Используйте вариант Deployment для тестирования на нескольких узлах, масштабируя реплики или применяя анти-аффинитет подов:
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 с SCC restricted-v2 вы должны увидеть код выхода 1 (частично открыт): сокет AF_ALG может быть создан (RuntimeDefault seccomp его не блокирует), но no_new_privs предотвращает шаг повышения через setuid. Опубликованный PoC не сработает, но уязвимость на уровне ядра всё ещё достижима — рекомендуется установка патча.
Это единственное полное исправление. Обновите ядро на всех узлах и перезагрузите их.
Для OpenShift обновите RHCOS до версии, включающей исправление, и выполните поэтапную перезагрузку узлов.
Если algif_aead скомпилирован как загружаемый модуль (CONFIG_CRYPTO_USER_API_AEAD=m):
echo "install algif_aead /bin/false" > /etc/modprobe.d/disable-algif.conf
rmmod algif_aead 2>/dev/null || true
Это НЕ работает, если algif_aead встроен в ядро (=y), что имеет место на RHCOS. Проверьте с помощью:
modinfo algif_aead 2>&1 | grep builtin
grep CONFIG_CRYPTO_USER_API_AEAD /boot/config-$(uname -r)
Если модуль ядра встроен, единственная мера смягчения до установки патча для контейнеров — блокировка системного вызова socket(AF_ALG, ...) через пользовательский профиль seccomp.
Создайте MachineConfig для размещения профиля на всех узлах (повторите с role: master для узлов control plane):
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 декодируется в:
{
"defaultAction": "SCMP_ACT_ALLOW",
"syscalls": [
{
"names": ["socket"],
"action": "SCMP_ACT_ERRNO",
"args": [
{
"index": 0,
"value": 38,
"op": "SCMP_CMP_EQ"
}
]
}
]
}
Примечание: Применение MachineConfig вызывает поэтапную перезагрузку узлов.
securityContext:
seccompProfile:
type: Localhost
localhostProfile: deny-af-alg.json
Чтобы защитить все контейнеры без изменения спецификаций подов, переопределите профиль seccomp CRI-O по умолчанию (/etc/crio/seccomp.json) через MachineConfig, добавив правило фильтрации AF_ALG в существующий профиль.
Определите поды, работающие с повышенными привилегиями:
# Найдите поды, не использующие 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 оказывает незначительное влияние на большинство рабочих нагрузок. Следующее не затрагивается:
Затронуты только приложения, явно настроенные на использование движка OpenSSL afalg.
| Окружение | allowPrivilegeEscalation | Root в контейнере | Root на хосте | Риск |
|---|
| RHEL 8 / RHEL 9 (локальный пользователь) | n/a | n/a | Да | Критический |
Узел OpenShift (доступ к shell, напр. oc debug node/) | n/a | n/a | Да | Критический |
Под OpenShift — SCC restricted-v2 (по умолчанию) | false | Нет | Нет | Низкий |
Под OpenShift — SCC anyuid | true | Да | Нет (изоляция namespace) | Высокий |
Под OpenShift — SCC privileged | true | Да | Да (без изоляции) | Критический |
| Под OpenShift — пользовательский SCC | зависит | зависит | зависит | Аудит |
| Под Kubernetes — PSS Restricted | false | Нет | Нет | Низкий |
| Под Kubernetes — PSS Baseline / без политики | true (по умолчанию) | Да | Нет | Высокий |
Docker / Podman — --security-opt no-new-privileges | false | Нет | Нет | Низкий |
| Docker / Podman — по умолчанию | true | Да | Нет | Высокий |