Назад к блогу

Четыре уязвимости ядра Linux с публичными эксплойтами: что именно сломано и как закрыть

Четыре уязвимости ядра Linux с публичными эксплойтами: что именно сломано и как закрыть

Исследователь опубликовал рабочие эксплойты для четырёх уязвимостей ядра Linux, каждая из которых позволяет повысить привилегии до root, — причём эти ошибки просуществовали в ядре от 10 до 21 года. Разбор показывает, какие именно механизмы сетевого стека оказались сломаны, насколько реальна угроза и какие версии ядра закрывают проблему.

Исследователь Асим Манизада опубликовал технический отчёт и рабочие PoC-эксплойты для четырёх уязвимостей ядра Linux, каждая из которых позволяет повысить привилегии до root. Уязвимости получили имена DirtyAH6, TUNderflow, PPPoEject и DiagSpill и идентификаторы CVE-2026-80844, CVE-2026-81000, CVE-2026-68121 и CVE-2026-74469 соответственно. Публикация состоялась 18 сентября — после согласованной с дистрибутивами задержки, чтобы исправления успели выйти раньше эксплойтов.

Все четыре ошибки — это ошибки безопасности памяти в разных частях сетевого кода ядра, и каждая даёт возможность повредить память ядра. Ошибки старые: они существовали в ядре от 10 до 21 года.

Что именно сломано

DirtyAH6 находится в коде IPsec, который обрабатывает заголовок аутентификации IPv6. Код доверял полю routing-header — служебному полю заголовка маршрутизации IPv6, в котором перечислены промежуточные адреса, — не сверяя его с фактическим числом адресов в пакете, поэтому специально собранный пакет уводил внутренний указатель далеко за границы буфера и запись шла за его пределы.

TUNderflow затрагивает виртуальные сетевые устройства TUN и TAP. Завышенное значение, переданное через Open vSwitch, вызывало переполнение при вычислении размера, и данные пакета оказывались вне буфера.

PPPoEject — ошибка в коде PPP over Ethernet. Указатель в сетевой буфер сохранялся на время вызова процедуры устройства, после чего последующие записи работали с уже освобождённой памятью — use-after-free.

DiagSpill — в коде отчётности SCTP. Счётчик, отслеживающий конечные точки соединения — адреса и порты участников связи, по которым ядро ведёт учёт открытых соединений, — имеет ширину всего 16 бит, поэтому на 65 536-й конечной точке он обнулился. Код отчётности после этого не выделил место, но скопировал весь список, записав около 8 МиБ за конец буфера.

Условия эксплуатации

Три уязвимости из четырёх — DirtyAH6, TUNderflow и PPPoEject — достижимы обычным пользователем только при включённых непривилегированных пользовательских пространствах имён. DiagSpill — исключение: она не требует ни пользовательских пространств имён, ни специальных привилегий, достаточно доступности модуля SCTP.

DirtyAH6 и DiagSpill могут срабатывать и по сети, но лишь в узких случаях и в основном приводят к падению системы. DirtyAH6 способен обрушить хост, работающий как IPv6-маршрутизатор или шлюз и добавляющий заголовок аутентификации IPsec в транспортном режиме. DiagSpill обрушивает хост только при включённых нестандартных опциях SCTP, отключённых по умолчанию. Удалённый root через DirtyAH6 был достигнут только в лаборатории автора и лишь после предварительного формирования памяти на цели; для DiagSpill пути к удалённому root не видно вовсе.

Почему эксплойты вышли сейчас

Манизада сообщил об ошибках команде безопасности ядра Linux в середине июля, после чего исправления постепенно вошли в стабильные ветки. Публичный отчёт с эксплойтами вышел 18 сентября после согласованной задержки с дистрибутивами — чтобы сначала вышли патчи.

Уязвимости были найдены с помощью процесса с поддержкой ИИ, который строит карту того, как ядро управляет памятью, и рассуждает о её раскладке. Исправление для DirtyAH6 содержит строку Assisted-by, приписывающую заслугу собственным ИИ-инструментам автора. Это продолжение серии уязвимостей повышения привилегий в ядре Linux, раскрытых в течение 2026 года, часть из которых найдена с помощью больших языковых моделей. Ранее Манизада раскрыл похожую уязвимость Open vSwitch — OVSwrap — в июле, а один из новых эксплойтов повторно использует технику из Dirty Frag, другой уязвимости root в ядре Linux, раскрытой в мае другим исследователем. По словам Манизады, эта партия, вероятно, завершает публичную фазу его поиска ошибок с помощью ИИ.

Что делать

Нужно обновить ядро до версии, содержащей все четыре исправления. Первые стабильные выпуски основного проекта Linux с полным набором:

5.10.270, 5.15.221, 6.1.188, 6.6.157, 6.12.109, 6.18.50, 7.2.4

Это номера основного проекта Linux; дистрибутивы используют собственные номера и добавляют исправления по своему графику. Поэтому нужно проверять бюллетень безопасности дистрибутива, а не сверять номера версий.

Если патч сразу поставить нельзя, есть две меры. Отключение непривилегированных пользовательских пространств имён закрывает обычному пользователю путь к DirtyAH6, TUNderflow и PPPoEject, но не останавливает DiagSpill и не мешает контейнеру или процессу, у которого уже есть сетевые admin-права. Второй шаг — отключить неиспользуемые возможности AH6, TUN/TAP, PPPoE и SCTP. Манизада рекомендует именно патчить, а не отключать функции, поскольку могут существовать другие пути к тем же ошибкам.

Ограничения и открытые вопросы

Опубликованные PoC нельзя считать универсальной кнопкой root для любого Linux: все четыре ошибки повреждают память, поэтому эксплойт приходится настраивать под конкретное ядро, процессор и расположение объектов в памяти. В показанных цепочках DirtyAH6, TUNderflow и PPPoEject требуют непривилегированных пользовательских пространств имён, а DiagSpill при доступных SCTP и sctp_diag не требует ни пользовательских пространств имён, ни специальных capability.

Открытым остаётся и вопрос защиты: отключение непривилегированных пользовательских пространств имён не защищает от DiagSpill, а SELinux и AppArmor сами по себе не остановили эксплуатацию после выполнения необходимых условий.

Источники

Похожее