Критическая уязвимость в ядре Linux (CVE-2026-72137)
| CVE | CVE-2026-72137 |
| Продукт | Linux Kernel |
| Компонент | XFRM / NAT Keepalive |
| Тип уязвимости | Двойное освобождение памяти (Double-Free) |
| Уровень опасности | Критический |
| Вектор атаки | Удалённо через сеть |
| Требуется аутентификация | Нет |
| Уязвимые версии | Linux 6.11 и более новые версии до установки исправления |
| Исправлено в | 6.12.101, 6.18.40, 7.1.5, 7.2-rc4 |
Введение
В ядре Linux обнаружена критическая уязвимость CVE-2026-72137, связанная с обработкой NAT keepalive в подсистеме XFRM, которая используется для реализации IPsec и других механизмов преобразования сетевых пакетов.
Ошибка приводит к двойному освобождению одного и того же объекта памяти. При определённых условиях это может вызвать повреждение памяти ядра, аварийное завершение работы системы и, в зависимости от конкретного сценария эксплуатации, предоставить возможность выполнения произвольных операций с памятью ядра.
Уязвимость получила максимально высокую оценку 9.8 из 10 по CVSS 3.1. Для эксплуатации не требуется взаимодействие пользователя или предварительная аутентификация.
Что такое XFRM и NAT keepalive
XFRM - подсистема ядра Linux, отвечающая за обработку политик и состояний преобразования сетевых пакетов. В частности, она используется при работе IPsec. При использовании IPsec через NAT применяется механизм NAT keepalive. Его задача заключается в периодической отправке небольших пакетов, которые позволяют поддерживать соответствующее отображение NAT активным.
Отправка таких пакетов выполняется ядром автоматически через отложенную работу, поэтому для возникновения проблемы не требуется, чтобы пользователь вручную отправлял каждый keepalive-пакет.
В чём заключается проблема
Ошибка находится в файле:
net/xfrm/xfrm_nat_keepalive.c
Проблема возникает при обработке ошибки во время отправки NAT keepalive-пакета.
Ядро создаёт сетевой буфер sk_buff, который используется для формирования и отправки пакета. Если операция отправки завершается ошибкой, код очистки должен освободить этот объект и корректно завершить обработку.
В уязвимой реализации один и тот же объект памяти в определённом сценарии может быть освобождён дважды.
Первое освобождение возвращает объект обратно распределителю памяти ядра. После этого повторное освобождение того же объекта приводит к повреждению внутреннего состояния распределителя памяти.
Почему Double-Free опасен
Double-Free означает повторное освобождение уже освобождённой области памяти.
В случае CVE-2026-72137 проблема возникает при обработке ошибки отправки NAT keepalive-пакета. Ядро освобождает используемый для отправки пакет sk_buff, после чего тот же объект в определённом сценарии может быть освобождён повторно.
После первого освобождения память уже возвращена распределителю памяти ядра и может быть использована для размещения другого объекта. Повторное освобождение этой области нарушает внутреннее состояние распределителя и создаёт условия для повреждения памяти.
Наиболее простым последствием становится аварийное завершение работы ядра, например Kernel Oops или Kernel Panic. Однако потенциальная опасность Double-Free значительно выше обычного сбоя: если атакующий сможет контролировать последующее распределение памяти, освобождённая область может быть занята другим объектом ядра. Это теоретически позволяет изменить содержимое памяти и использовать ошибку для выполнения произвольных операций с привилегиями ядра.
Как происходит атака
Для эксплуатации уязвимости необходимо создать условия, при которых Linux использует XFRM и механизм NAT keepalive. После этого атакующий должен вызвать ситуацию, приводящую к ошибке отправки keepalive-пакета.
Во время обработки этой ошибки уязвимый код может дважды освободить один и тот же объект sk_buff. В результате происходит повреждение памяти ядра.
Таким образом, атака не сводится к простому отправлению одного специально сформированного сетевого пакета. Необходимо, чтобы на целевой системе был задействован соответствующий механизм XFRM, а выполнение сетевой операции привело именно к проблемному пути обработки ошибки.
Для удалённой атаки особенно важны системы, работающие как IPsec-шлюзы и использующие NAT-T вместе с NAT keepalive. При локальной эксплуатации дополнительные возможности может предоставить наличие прав CAP_NET_ADMIN внутри пространства имён пользователя.
Пример эксплуатации
Безопасно воспроизводить повреждение памяти ядра на рабочем сервере не рекомендуется: ошибка находится непосредственно в сетевом стеке ядра и может привести к немедленному зависанию или перезагрузке системы.
В лабораторной среде принцип можно представить следующим образом:
1. Создаётся IPsec-состояние с использованием XFRM.
2. Включается NAT keepalive.
3. Ядро автоматически планирует отправку keepalive-пакетов.
4. Отправка пакета провоцирует ошибку.
5. Обработчик ошибки освобождает sk_buff.
6. Тот же объект освобождается повторно.
7. Происходит повреждение памяти ядра.
При успешном воспроизведении на уязвимом ядре последствием может стать Kernel Oops или Kernel Panic.
Полноценная эксплуатация с целью выполнения произвольного кода требует значительно более сложного управления распределением памяти ядра. Поэтому сам факт возникновения аварии ещё не означает автоматического получения прав root.
Уязвимость не следует рассматривать как обычный удалённый сбой сетевого сервиса.
Для возникновения уязвимого сценария должны быть выполнены определённые условия, связанные с XFRM, IPsec и NAT keepalive. Поэтому наличие обычного Linux-сервера с открытыми сетевыми портами само по себе ещё не означает возможность эксплуатации CVE-2026-72137.
При этом высокая оценка CVSS обусловлена потенциально серьёзными последствиями повреждения памяти ядра и отсутствием требования к аутентификации в сетевом сценарии.
Какие системы находятся под угрозой
Уязвимость появилась в коде, присутствующем начиная с ветки Linux 6.11. Ядра более старых веток, в которых уязвимый код отсутствует, не затрагиваются.
Особое внимание необходимо уделить серверам и шлюзам, которые используют:
- IPsec;
- XFRM;
- NAT-T;
- NAT keepalive;
- Linux в качестве VPN-шлюза;
- Linux в качестве межсетевого шлюза.
Если сервер используется только как обычный веб-сервер или файловый сервер и соответствующая функциональность XFRM не используется, практическая вероятность эксплуатации существенно ниже. Однако проверка версии ядра всё равно необходима.
Исправление
Разработчики ядра исправили проблему изменением обработки ошибки отправки NAT keepalive. Исправление устраняет повторное освобождение одного и того же объекта памяти.
В ядро была внесена правка с названием:
xfrm: nat_keepalive: avoid double free on send error
Исправление вошло в несколько стабильных веток Linux.
Уязвимость устранена в следующих версиях ядра:
- Linux 6.12.101 и новее;
- Linux 6.18.40 и новее;
- Linux 7.1.5 и новее;
- Linux 7.2-rc4 и новее.
Если используется другая ветка ядра, необходимо установить пакет обновления, в который сопровождающий дистрибутивом уже включил соответствующий патч.
После обновления ядра необходимо выполнить перезагрузку сервера, чтобы загруженная версия ядра действительно была заменена исправленной.
Проверка системы
Проверить запущенную версию ядра можно командой:
uname -r
Например:
6.18.39-amd64
Такое ядро находится ниже исправленной версии 6.18.40 и требует обновления.
Если после обновления:
uname -r
показывает:
6.18.40-amd64
то соответствующее исправление уже присутствует в ядре.
Debian
Для Debian ситуация зависит от конкретного выпуска. В Debian 13 (Trixie) исправление доступно начиная с пакета ядра 6.12.105-1, а для нестабильной ветки исправление присутствует начиная с 7.1.5-1. В Debian 12 (Bookworm) уязвимый код отсутствует в основной версии ядра, а для отдельного пакета ядра 6.12 исправление доступно начиная с 6.12.101-1~deb12u1.
Проверить установленный пакет можно командой:
dpkg -l | grep linux-image
После установки нового ядра обязательно перезагрузите сервер и повторно выполните:
uname -r
Ubuntu
Для Ubuntu наличие уязвимости зависит от выпуска. По данным Ubuntu Security, Ubuntu 24.04 LTS и 22.04 LTS не затронуты, тогда как для Ubuntu 26.04 LTS на момент проверки исправление ещё ожидалось.
Поэтому для Ubuntu не следует механически сравнивать только номер ядра с основной веткой Linux. Необходимо учитывать пакет ядра конкретного выпуска и статус исправления у разработчиков дистрибутива.
Дополнительно
CVE-2026-72137 особенно интересна тем, что затрагивает не пользовательское приложение, а непосредственно сетевой код ядра Linux. Ошибка находится в обработке NAT keepalive для XFRM и возникает именно в ветке обработки ошибки отправки сетевого буфера.
При обычном использовании Linux без IPsec и соответствующего механизма NAT keepalive вероятность столкнуться с уязвимым сценарием значительно ниже. Однако серверы, работающие в качестве VPN-шлюзов, IPsec-концентраторов и сетевых шлюзов, требуют повышенного внимания.
Наиболее правильная мера защиты не отключение отдельных сетевых функций, а установка исправленного ядра от разработчиков Linux или сопровождающего дистрибутива.