CVE-2026-74582 в Linux Kernel: гонка в af_packet и OOB-запись

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

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


В подсистеме af_packet ядра Linux обнаружена гонка, связанная с несогласованным чтением параметра hard_header_len при отправке пакетов. Рассинхронизация значений между вычислением резерва и выделением буфера skb приводит к out-of-bounds записи в память ядра. Материал описывает механику ошибки, условия эксплуатации и способы проверки исправления.

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


Риск заключается в нарушении целостности памяти ядра через запись за пределы выделенного буфера. Ошибка возникает из-за гонки при чтении конфигурации сетевого устройства в момент формирования пакета.

  • Тип уязвимости: Race condition, приводящий к out-of-bounds write (OOB write) в памяти ядра.
  • CVSS 3.1: 7.8 (HIGH). Вектор: CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H. Оценка отражает локальный доступ с низкими привилегиями и полное воздействие на конфиденциальность, целостность и доступность.
  • EPSS: 0,12% (процентиль 2,03%). Вероятность эксплуатации в ближайшие 30 дней оценивается как низкая.
  • Статус эксплуатации: Публичные данные о подтвержденной эксплуатации в реальных атаках отсутствуют.

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


Затронуты версии Linux Kernel, в которых функции packet_snd() и packet_sendmsg_spkt() читают dev->hard_header_len несколько раз без фиксации значения.

  • Компонент: Подсистема af_packet (файл net/packet/af_packet.c).
  • Функции: packet_snd(), packet_sendmsg_spkt().
  • История: Ошибка была введена коммитом b84bbaf7a6c8 и исправлена в патче 03390aa32e669cc4ecd7d34108e2e1afc13d689d.

Точный список уязвимых версий не указан в предоставленных источниках. Для определения статуса системы необходимо сверить версию ядра с официальными релизами дистрибутива, содержащими данный фикс.

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


Причина уязвимости — нарушение атомарности чтения конфигурационных параметров сетевого устройства во время формирования пакета.

Функция packet_snd() обращается к dev->hard_header_len несколько раз: сначала для определения размера резерва (reserve), затем для вычисления размера headroom при выделении skb.

Между этими чтениями может произойти переконфигурация устройства (например, смена типа bonding-интерфейса), что изменяет значение hard_header_len. Если первое чтение вернуло большое значение, а второе — меньшее, выделенный буфер окажется слишком малым для данных, которые ядро попытается в него записать.

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


Атака эксплуатирует временное окно между чтением конфигурации и выделением памяти.

  1. Атакующий открывает сокет типа SOCK_RAW или SOCK_DGRAM.
  2. Во время вызова sendto() функция packet_snd() читает hard_header_len для расчета reserve.
  3. Параллельно значение hard_header_len уменьшается из-за переконфигурации устройства.
  4. При выделении skb функция LL_RESERVED_SPACE() использует новое, меньшее значение, выделяя меньше памяти, чем требуется для reserve.
  5. При сдвиге указателя skb->data назад на величину reserve он оказывается за границей skb->head.
  6. Последующее копирование данных из пользовательского пространства приводит к out-of-bounds записи в память ядра.

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


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

  • Локальный доступ: Наличие учетной записи на целевой системе.
  • Права на создание сокетов: Возможность открывать сокет AF_PACKET (обычно требует CAP_NET_RAW или root-прав).
  • Возможность переконфигурации: Доступ к изменению параметров сетевого устройства (например, CAP_NET_ADMIN) для создания гонки.
  • Точность тайминга: Необходимость попасть в узкое временное окно между чтением параметра и выделением буфера.

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


Сценарий атаки предполагает одновременное выполнение двух потоков.

Первый поток инициирует отправку пакета через AF_PACKET сокет. Второй поток изменяет тип bonding-интерфейса или другую конфигурацию, влияющую на hard_header_len.

Если изменение конфигурации произойдет в момент, когда packet_snd() уже прочитал старое значение для reserve, но еще не вычислил размер выделенного буфера, произойдет рассинхронизация. Ядро выделит буфер, рассчитанный под новый (меньший) заголовок, но попытается вписать в него данные, рассчитанные под старый (больший) заголовок. Это приведет к записи за пределы буфера и потенциальному выполнению кода в контексте ядра.

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


На момент публикации CVE-2026-74582 публичные эксплойты или PoC в открытых базах данных не зафиксированы.

  • PoC: Отсутствуют.
  • Техническое описание: Доступно в коммитах исправления.
  • Подтвержденная эксплуатация: Случаев использования уязвимости в реальных атаках не обнаружено.

Отсутствие публичного эксплойта не означает, что уязвимость не может быть эксплуатирована. Механика гонки сложна, но реализуема при наличии соответствующих привилегий.

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


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

  • Неспецифичные признаки:
    • Аномальные изменения конфигурации bonding-интерфейсов.
    • Внезапные сбои ядра (kernel panic) или ошибки памяти в процессах, работающих с AF_PACKET.
    • Необычная активность процессов с правами CAP_NET_RAW.

Эти признаки могут указывать на другие проблемы, поэтому требуют дополнительной верификации.

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


Обнаружение атаки затруднено из-за природы гонки.

  • Мониторинг конфигурации: Отслеживание изменений параметров сетевых устройств (bonding, VLAN) через auditd.
  • Анализ сбоев: Поиск записей в dmesg или kern.log об ошибках памяти, связанных с af_packet или skb.
  • Проверка версии: Регулярная сверка версии ядра с базой уязвимостей для подтверждения наличия патча.

Специализированные правила SIEM для данного CVE отсутствуют.

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


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

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

Полученную версию необходимо сверить с официальными уведомлениями безопасности вашего дистрибутива Linux. Если дистрибутив предоставляет пакет ядра, проверьте наличие обновлений через пакетный менеджер (например, apt, yum, dnf), заменив <имя-пакета> на фактическое имя пакета ядра в вашей системе.

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


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

  • Официальный патч: Коммит 03390aa32e669cc4ecd7d34108e2e1afc13d689d в mainline и соответствующие backport'ы в stable-ветки.
  • Действия:
    1. Проверьте наличие обновлений ядра в репозитории вашего дистрибутива.
    2. Установите обновленный пакет ядра.
    3. Перезагрузите систему для применения нового ядра.

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

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


Полной временной защиты от этой уязвимости не существует, так как она затрагивает ядро.

  • Ограничение прав: Ограничьте доступ к CAP_NET_RAW и CAP_NET_ADMIN только для доверенных процессов и пользователей.
  • Контроль конфигурации: Ограничьте возможность динамической переконфигурации bonding-интерфейсов в критических системах.
  • Мониторинг: Усиленный мониторинг процессов, работающих с AF_PACKET.

Эти меры снижают вероятность успешной атаки, но не устраняют уязвимость.

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


Для подтверждения успешного исправления выполните следующие шаги:

  1. Проверьте версию ядра после перезагрузки:

    Bash:
    uname -r
  2. Убедитесь, что версия соответствует той, в которой заявлено наличие патча для CVE-2026-74582.
  3. Проверьте логи загрузки ядра на наличие ошибок:

    Bash:
    dmesg | grep -i "af_packet\|skb"
  4. Если возможно, выполните функциональное тестирование сетевых сокетов AF_PACKET для подтверждения работоспособности.

Вывод​


CVE-2026-74582 представляет собой серьезную уязвимость в Linux Kernel, связанную с гонкой в подсистеме af_packet. Она позволяет локальному атакующему с низкими привилегиями нарушить целостность памяти ядра.

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

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


  1. NVD — CVE-2026-74582
  2. FIRST EPSS — CVE-2026-74582
  3. packet: use consistent hard_header_len in non-ring send paths - kernel/git/stable/linux.git - Linux kernel stable tree
  4. packet: use consistent hard_header_len in non-ring send paths - kernel/git/stable/linux.git - Linux kernel stable tree
  5. packet: use consistent hard_header_len in non-ring send paths - kernel/git/stable/linux.git - Linux kernel stable tree
  6. packet: use consistent hard_header_len in non-ring send paths - kernel/git/stable/linux.git - Linux kernel stable tree
  7. packet: use consistent hard_header_len in non-ring send paths - kernel/git/stable/linux.git - Linux kernel stable tree
  8. packet: use consistent hard_header_len in non-ring send paths - kernel/git/stable/linux.git - Linux kernel stable tree
  9. packet: use consistent hard_header_len in non-ring send paths - kernel/git/stable/linux.git - Linux kernel stable tree
  10. packet: use consistent hard_header_len in non-ring send paths - kernel/git/stable/linux.git - Linux kernel stable tree

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


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