CVE-2026-80735 в Linux Kernel: OOB-чтение в ovpn, уязвимые версии и защита

CVE: CVE-2026-80735
Продукт: Linux Kernel
Дата публикации: 03.09.2026
Критичность: HIGH
CVSS: 7.3 (3.1)
EPSS: 0,12%; процентиль 2,41%
CISA KEV: нет подтверждения в каталоге CISA KEV

Краткое описание​


В драйвере ovpn ядра Linux обнаружена ошибка, позволяющая выполнить чтение вне границ памяти (out-of-bounds read) при обработке сокетов. Проблема возникает, если другие подсистемы, такие как BPF SOCKMAP, заполняют поле sk_user_data без установки соответствующего типа инкапсуляции. Администраторам систем, использующих OpenVPN в ядре, необходимо проверить наличие исправления, чтобы исключить риск утечки данных или отказа в обслуживании.

Основные характеристики​


Риск связан с нарушением целостности данных при обращении к пользовательским данным сокета в драйвере ovpn. Если проверка типа сокета отсутствует, ядро может прочитать память, не принадлежащую объекту ovpn_socket, что приводит к утечке конфиденциальной информации или падению процесса.

  • Тип ошибки: Out-of-bounds read (чтение вне границ памяти).
  • CVSS 3.1: 7.3 (HIGH). Вектор: CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:L.
  • Условия атаки: Локальный доступ с правами обычного пользователя (PR:L), без необходимости взаимодействия пользователя (UI:N).
  • Эксплуатация: Публичные данные о подтвержденной эксплуатации в реальных атаках отсутствуют.
  • EPSS: 0,12% (0.00124), что указывает на низкую вероятность эксплуатации в ближайшие 30 дней.

Какие продукты и версии затронуты​


Уязвимость затрагивает ядра Linux, в которых включен модуль ovpn (OpenVPN in-kernel). Точный список версий, требующих обновления, зависит от дистрибутива, так как исправление было внесено в стабильные ветки ядра.

  • Компонент: drivers/net/ovpn/socket.c.
  • Исходный коммит с ошибкой: f6226ae7a0cd ("ovpn: introduce the ovpn_socket object").
  • Исправляющие коммиты: 59aed1eb60d70678a53acccb0cb337a26ce6680e (upstream), 43a31142e1d22b3cf5490bd94a94db7196901734 и 61fb3cca40ff938671474f4a16adb908c19032d7 (stable).

Администраторам рекомендуется проверить наличие данных коммитов в текущей сборке ядра через средства управления пакетами дистрибутива.

Причина уязвимости​


Причина ошибки заключается в недостаточной валидации состояния сокета перед обращением к его пользовательским данным. Функция ovpn_socket_new извлекает указатель из поля sk_user_data сокета, предполагая, что этот указатель всегда принадлежит объекту ovpn_socket.

Однако другие подсистемы ядра, например BPF SOCKMAP, могут записывать свои собственные данные в sk_user_data, не устанавливая при этом тип инкапсуляции (encap_type), который ожидает драйвер ovpn. В результате, если ovpn получает такой сокет, он интерпретирует чужие данные как структуру ovpn_socket и обращается к полям, которые могут выходить за пределы выделенной памяти.

Как работает атака​


Атакующий с локальными правами пользователя может создать сокет и передать его в драйвер ovpn через соответствующие системные вызовы. Если в этот сокет были записаны данные другой подсистемой (например, через BPF), драйвер ovpn не проверяет, что тип сокета соответствует его ожиданиям.

При попытке доступа к полям структуры ovpn_socket по указателю из sk_user_data происходит чтение памяти, не принадлежащей этому объекту. Это может привести к утечке данных из ядра в пользовательское пространство или к срабатыванию защиты памяти (page fault), что вызовет падение процесса или отказ в обслуживании.

Условия успешной эксплуатации​


Для успешной эксплуатации уязвимости необходимо выполнение следующих условий:

  • Локальный доступ: Атакующий должен иметь учетную запись на целевой системе с правами обычного пользователя.
  • Загруженный модуль ovpn: В ядре должен быть активен драйвер ovpn.
  • Возможность создания сокета: Пользователь должен иметь возможность создавать сокеты и взаимодействовать с интерфейсом ovpn.
  • Наличие конфликтующих данных: В поле sk_user_data сокета должны присутствовать данные, не принадлежащие ovpn, и тип инкапсуляции должен быть не установлен.

Возможный сценарий атаки​


Локальный пользователь создает сокет и использует BPF-программу для записи произвольных данных в sk_user_data этого сокета. Затем пользователь пытается использовать этот сокет в контексте OpenVPN-инстанса, вызывая функции драйвера ovpn.

Драйвер ovpn извлекает указатель из sk_user_data и пытается прочитать поля структуры ovpn_socket. Поскольку данные не соответствуют ожидаемой структуре, происходит чтение вне границ памяти. В худшем случае атакующий получает доступ к конфиденциальным данным ядра, в лучшем — вызывает сбой системы.

Есть ли публичный эксплойт​


На момент публикации данных о публичном эксплойте или подтвержденной эксплуатации CVE-2026-80735 в реальных атаках не поступало. Официальные источники содержат только описание ошибки и коммиты с исправлением. Отсутствие публичного PoC не означает, что уязвимость не может быть эксплуатирована, но текущий риск считается низким.

Признаки эксплуатации​


Специфичные индикаторы компрометации (IOC) для этой уязвимости не опубликованы. Общие признаки, которые могут указывать на попытку эксплуатации, включают:

  • Аномальные системные вызовы: Частые вызовы socket и connect с последующими ошибками в логах ядра, связанными с ovpn.
  • Срабатывания KASAN/KCSAN: Если в ядре включены инструменты отладки памяти, могут появляться отчеты об out-of-bounds read в drivers/net/ovpn/socket.c.
  • Неожиданные сбои процессов: Падение процессов, работающих с OpenVPN, без явных причин в пользовательском пространстве.

Как обнаружить атаку​


Для обнаружения атаки или эксплуатации рекомендуется использовать следующие методы:

  • Мониторинг логов ядра: Отслеживайте сообщения об ошибках в dmesg или journalctl, связанные с драйвером ovpn и ошибками памяти.
  • Аудит BPF-программ: Проверьте, какие BPF-программы имеют доступ к сокерам, используемым ovpn, и не записывают ли они данные в sk_user_data.
  • Инструменты отладки: Включите KASAN (Kernel Address Sanitizer) в тестовых средах для выявления ошибок чтения вне границ памяти в драйвере ovpn.

Как проверить свою версию​


Чтобы проверить, установлена ли уязвимая версия ядра, используйте следующие команды:

Bash:
uname -r
uname -a
cat /proc/version

Затем сравните версию ядра с списком исправленных версий в документации вашего дистрибутива. Если вы используете сборку из исходников, проверьте наличие коммитов 59aed1eb60d70678a53acccb0cb337a26ce6680e в истории git-репозитория ядра.

Исправление​


Единственным надежным способом устранения уязвимости является обновление ядра Linux до версии, содержащей исправление. Исправление было внесено в следующие коммиты:

  • 59aed1eb60d70678a53acccb0cb337a26ce6680e (upstream)
  • 43a31142e1d22b3cf5490bd94a94db7196901734 (stable)
  • 61fb3cca40ff938671474f4a16adb908c19032d7 (stable)

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

Временные меры защиты​


Пока обновление не установлено, можно рассмотреть следующие временные меры:

  • Отключение модуля ovpn: Если OpenVPN в ядре не используется, отключите модуль ovpn с помощью modprobe -r ovpn.
  • Ограничение доступа к BPF: Ограничьте права на загрузку BPF-программ, чтобы предотвратить запись произвольных данных в sk_user_data сокетов, используемых ovpn.
  • Использование userspace OpenVPN: Переключитесь на использование OpenVPN в пользовательском пространстве, если это допустимо для вашей инфраструктуры.

Как проверить устранение уязвимости​


После обновления ядра проверьте, что исправление применено:

  1. Убедитесь, что версия ядра соответствует исправленной версии в документации дистрибутива.
  2. Проверьте наличие коммитов с исправлением в истории ядра (если доступно).
  3. Проведите функциональное тестирование OpenVPN-инстансов, чтобы убедиться, что они работают корректно.
  4. Проверьте логи ядра на предмет отсутствия ошибок, связанных с ovpn.

Вывод​


CVE-2026-80735 представляет собой уязвимость в драйвере ovpn ядра Linux, которая может привести к чтению вне границ памяти. Хотя риск эксплуатации в настоящее время оценивается как низкий, администраторам систем, использующих OpenVPN в ядре, рекомендуется обновить ядро до последней версии, содержащей исправление. Это обеспечит защиту от потенциальных утечек данных и отказов в обслуживании.

Официальные источники​


  1. NVD — CVE-2026-80735
  2. FIRST EPSS — CVE-2026-80735
  3. ovpn: ensure socket is owned by ovpn before deref sk_user_data - kernel/git/stable/linux.git - Linux kernel stable tree
  4. ovpn: ensure socket is owned by ovpn before deref sk_user_data - kernel/git/stable/linux.git - Linux kernel stable tree
  5. ovpn: ensure socket is owned by ovpn before deref sk_user_data - kernel/git/stable/linux.git - Linux kernel stable tree
  6. CVEs — The Linux Kernel documentation

История обновлений статьи​


  • 08.09.2026 — Опубликована первая версия материала.
 
Назад
Верх Низ