CVE-2026-74689 в Linux Kernel: slab-out-of-bounds read в vcc_setsockopt()

CVE: CVE-2026-74689
Продукт: Linux Kernel
Дата публикации: 22.08.2026
Критичность: HIGH
CVSS: 7.1 (3.1)
EPSS: 0,14%; процентиль 3,51%
CISA KEV: нет подтверждения в каталоге CISA KEV

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


В функции vcc_setsockopt() подсистемы net/atm обнаружен дефект, позволяющий выполнить чтение за границами slab-объекта. Причина — некорректная проверка длины буфера optlen и использование copy_from_sockptr() без валидации размера. Патч заменяет вызов на copy_safe_from_sockptr() и корректирует тип локальной переменной. Статья разбирает механику ошибки, условия срабатывания и методы верификации исправления.

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


Идентификатор: CVE-2026-74689. Классификация: slab-out-of-bounds read. CVSS 3.1: 7.1 (HIGH). Вектор: CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:H. Подсистема: net/atm. Файл: net/atm/common.c. Функция: vcc_setsockopt(). Корневая причина: обход проверки optlen при несоответствии уровня и изменение optlen cgroup BPF фильтром. Исправление: использование copy_safe_from_sockptr() и смена типа переменной value с unsigned long на int.

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


Уязвимость затрагивает ядра Linux, в которых скомпилирована подсистема ATM (Asynchronous Transfer Mode). Согласно метаданным патча, дефект присутствует с версии 2.6.12-rc2. Конкретный перечень уязвимых релизов и дистрибутивов в предоставленных источниках не указан. Для оценки актуальности необходимо сверить текущую версию ядра с официальными обновлениями вашего поставщика и проверить наличие соответствующих коммитов в истории сборки.

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


Проверка длины буфера в vcc_setsockopt() реализована через условие, связанное с оператором &&. Если уровень (level) не совпадал с ожидаемым, проверка optlen != __SO_SIZE(optname) пропускалась из-за короткого замыкания логического выражения. Дополнительно cgroup BPF setsockopt filter мог уменьшить значение optlen после входа в функцию. Последующий вызов copy_from_sockptr() использовал memcpy() для копирования данных в ядро, не проверяя, что optval содержит достаточно места. Это приводило к чтению за границами выделенного slab-объекта.

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


Атакующий вызывает системный вызов setsockopt() на сокете ATM с несоответствующим уровнем или с параметрами, которые будут изменены cgroup BPF фильтром. Из-за обхода проверки optlen функция переходит к обработке switch(optname). При обработке опций SO_SETQOS или SO_SETCLP вызывается copy_from_sockptr(), копирующий данные из пользовательского пространства в структуру в ядре. Если optlen меньше размера ожидаемой структуры, происходит чтение за пределами выделенного буфера. Это может привести к утечке данных ядра или отказу в обслуживании.

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


Для эксплуатации требуется локальный доступ к системе с правами, достаточными для создания сокета ATM и вызова setsockopt(). Подсистема ATM должна быть скомпилирована в ядро или доступна как модуль. Наличие cgroup BPF фильтров, изменяющих optlen, повышает вероятность срабатывания ошибки, но не является обязательным условием, так как обход проверки возможен и при несоответствии уровня.

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


Локальный пользователь с правами на создание сокета ATM вызывает setsockopt() с параметрами, приводящими к обходу проверки optlen. Например, передается несоответствующий уровень или используется cgroup BPF фильтр, уменьшающий optlen. Ядро выполняет copy_from_sockptr() с некорректным размером, что вызывает чтение за границами slab-объекта. В результате может произойти сбой ядра или утечка конфиденциальных данных из памяти. Успешная эксплуатация зависит от конфигурации системы и наличия соответствующих модулей.

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


Уязвимость была обнаружена с помощью syzbot (syzkaller). В источниках указан идентификатор бага syzbot+53ecc09fb81df10ef4de. Наличие публичного эксплойта или подтвержденной эксплуатации в реальных атаках в предоставленных данных не подтверждено. EPSS-оценка составляет 0.00139, что указывает на низкую вероятность эксплуатации в ближайшие 30 дней. Отсутствие сведений о PoC не означает отсутствие эксплойта, но подтвержденных данных о его распространении нет.

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


Специфичные индикаторы компрометации для CVE-2026-74689 в источниках не раскрыты. Общие неспецифичные точки контроля включают: анализ журналов ядра на наличие сообщений KASAN о slab-out-of-bounds read; мониторинг аномальных вызовов setsockopt() на сокетах ATM; проверка логов cgroup BPF на наличие фильтров, изменяющих параметры setsockopt. Эти признаки не являются уникальными для данной уязвимости и требуют дополнительной верификации.

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


Для обнаружения эксплуатации можно использовать KASAN, если он включен в ядре. KASAN генерирует отчеты при чтении за границами памяти. Также рекомендуется мониторинг сетевых сокето ATM и анализ вызовов setsockopt() с подозрительными параметрами. В системах с cgroup BPF следует проверять конфигурации фильтров, которые могут влиять на optlen. Специализированные правила для детектирования именно этой уязвимости в предоставленных источниках не описаны.

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


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

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

Сравните полученную версию с официальными обновлениями вашего дистрибутива. Проверьте, содержит ли установленная версия исправление CVE-2026-74689, сверившись с базами данных безопасности поставщика. Если вы собираете ядро самостоятельно, убедитесь, что в истории коммитов присутствуют изменения, заменяющие copy_from_sockptr() на copy_safe_from_sockptr() в файле net/atm/common.c.

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


Основной способ устранения — обновление ядра до версии, содержащей исправление. Патч заменяет copy_from_sockptr() на copy_safe_from_sockptr() и корректирует тип переменной value в функции vcc_setsockopt(). Убедитесь, что все компоненты системы, использующие ядро, обновлены. Если обновление ядра невозможно в краткосрочной перспективе, рассмотрите временные меры, описанные ниже. После обновления проверьте, что подсистема ATM работает корректно, если она используется в вашей инфраструктуре.

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


Если обновление ядра отложено, можно временно отключить подсистему ATM, если она не используется. Это можно сделать, удалив модуль atm или отключив поддержку ATM в конфигурации ядра при следующей сборке. Также рекомендуется ограничить доступ к созданию сокето ATM для ненадежных пользователей. Если используются cgroup BPF фильтры, проверьте их конфигурацию на наличие правил, изменяющих optlen, и при необходимости отключите их. Эти меры снижают поверхность атаки, но не заменяют обновление ядра.

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


После обновления ядра проверьте, что исправление применено. Убедитесь, что версия ядра соответствует требованиям поставщика. Проверьте, что подсистема ATM работает корректно, если она используется. Проведите функциональное тестирование сетевых сокето ATM. Если KASAN включен, убедитесь, что при вызове setsockopt() с некорректными параметрами не возникает ошибок slab-out-of-bounds. Также можно проверить наличие патча в исходном коде ядра, если вы собираете его самостоятельно.

Вывод​


CVE-2026-74689 представляет собой уязвимость в подсистеме ATM Linux Kernel, позволяющую нарушить целостность памяти при обработке сетевых опций. Хотя вероятность эксплуатации в реальных атаках пока низкая, администраторам рекомендуется обновить ядро до исправленной версии. Если обновление невозможно, следует применить временные меры, такие как отключение подсистемы ATM или ограничение доступа к сокето ATM. Регулярный мониторинг и проверка обновлений помогут снизить риски.

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


  1. NVD — CVE-2026-74689
  2. FIRST EPSS — CVE-2026-74689
  3. net/atm: fix slab-out-of-bounds read in vcc_setsockopt() - kernel/git/stable/linux.git - Linux kernel stable tree
  4. net/atm: fix slab-out-of-bounds read in vcc_setsockopt() - kernel/git/stable/linux.git - Linux kernel stable tree
  5. net/atm: fix slab-out-of-bounds read in vcc_setsockopt() - kernel/git/stable/linux.git - Linux kernel stable tree
  6. net/atm: fix slab-out-of-bounds read in vcc_setsockopt() - kernel/git/stable/linux.git - Linux kernel stable tree
  7. CVEs — The Linux Kernel documentation

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


  • 25.08.2026 — Опубликована первая версия материала.
  • 26.08.2026 — Уточнены сведения об уязвимых версиях, оценке риска или исправлении.
 
Последнее редактирование:
Назад
Верх Низ