Публичный эксплойт для OpenBSD открывает путь к локальному повышению привилегий до суперпользователя

OpenBSD

В открытом доступе появился эксплойт (код, использующий уязвимость) для цепочки из двух уязвимостей ядра OpenBSD. Переполнение счётчика вложений разделяемой памяти и отдельная запись за границы дают локальное повышение привилегий до суперпользователя. Код работает при включённых защитах KARL, SMAP и SMEP. KARL рандомизирует адреса ядра. SMAP запрещает ядру доступ к пользовательской памяти. SMEP запрещает исполнение пользовательского кода в режиме ядра. Без отдельной уязвимости раскрытия информации цепочка обходится. Для атаки требуется возможность выполнить код на системе; удалённого доступа цепочка не даёт. Уязвимы системы OpenBSD без errata (официальных исправлений) 026 и 018.

Цепочка из переполнения счётчика и записи за границы

Andrew Griffiths из Calif опубликовал исследование Big Fish 16 октября 2026 года. Вместе с ним вышел PoC (демонстрационный код), который подтверждает эксплуатацию. Сведений об использовании цепочки в реальных атаках нет. Первая уязвимость появилась в исходном коде BSD примерно 37 лет назад. Это срок жизни кода, а не срок существования OpenBSD. Список затронутых версий в публикации отсутствует. Исправления для двух проблем вошли в errata 026 и 018.

Переполнение счётчика и состояние гонки

Счётчик вложений разделяемой памяти занимает 16-битное знаковое поле. За пределом 32 767 значение становится отрицательным. Повторное создание процессов наращивает счётчик и переводит его через этот предел. В эксперименте исследователь отобразил и снял 127 сегментов разделяемой памяти System V. Затем он создал 259 процессов. Счётчик достиг минус 32 643. Такое значение создаёт условие для состояния гонки. Гонка возникает между удалением сегмента и подключением нового сегмента. Вместе они приводят к use-after-free (использованию памяти после освобождения). Одного переполнения недостаточно. Для цепочки нужна вторая уязвимость, запись за границы.

Запись за границы и обход защит

Исследователь управлял размещением объектов ядра, отслеживая статистику выделения памяти через системный интерфейс. Метрики общего объёма и свободных страниц помогали понять, когда появляются новые страницы. В качестве цели исследователь выбрал 16-байтовую структуру параметров групповой рассылки IP-сокета. Запись за границы изменила два счётчика членства. При закрытии сокета запустились атомарные уменьшения в служебном отображении таблицы страниц ядра, которое ссылается на само себя. Два изменения переключили отображение из доступного пользователю в доступное режиму ядра. Удаление элемента из двусвязного списка дало возможность записать значение по выбранному адресу. Эта запись перезаписала предсказуемый указатель ядра и перенаправила исполнение. После восстановления изменённого состояния исследователь получил оболочку суперпользователя.

KARL рандомизирует двоичный код ядра. При этом механизмы выделения памяти ядра остаются предсказуемыми. На одинаковом оборудовании ранние структуры загрузки попадают в предсказуемые места. Поэтому защита не блокирует цепочку полностью. Исследование также предлагает проверку целостности двусвязных списков перед удалением. Ещё две меры включают рандомизацию адреса такого отображения и менее предсказуемое размещение объектов ядра. Эти меры противодействуют повторному использованию техник. Разработчики пока не внедрили их в поддерживаемые выпуски OpenBSD.

Что делать администраторам

Проверить наличие errata 026 и 018. Обновить OpenBSD и установить оба исправления. Ограничить локальный доступ к системе. Изолировать хосты с непривилегированными пользователями. Не допускать выполнения недоверенного кода. Не отключать KARL, SMAP и SMEP.

Цепочка показывает роль предсказуемого размещения объектов ядра. Публичный эксплойт обходит три защиты без отдельной утечки информации. Конкретные уязвимости закрывают исправления errata. Предложенные меры против повторного использования техник пока остаются рекомендациями для разработчиков. Для администраторов основное действие остаётся прежним. Это обновление.

Ссылки

Комментарии: 0