CVE-2026-80737 в Linux Kernel: гонка в DMA-сериализации и порядок безопасного отключения

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

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


В драйвере последовательного порта AMBA PL011 обнаружена уязвимость, приводящая к обращению к освобожденной памяти (use-after-free) при отключении DMA. Ошибка возникает из-за асинхронного завершения DMA-операций и чтения RX-буферов без блокировки. Материал описывает механику гонки, затронутые компоненты и порядок применения патчей для систем с ARM-архитектурой.

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


Риск связан с нарушением порядка освобождения ресурсов в драйвере amba-pl011, что может привести к повреждению памяти ядра и выполнению кода. Уязвимость требует локального доступа и активации DMA-режима для последовательного порта.

  • Тип ошибки: Use-after-free (обращение к памяти после освобождения).
  • 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.
  • Условия атаки: Локальный доступ (AV:L), низкие привилегии (PR:L), отсутствие взаимодействия пользователя (UI:N).
  • Эксплуатация: Публичные PoC или подтвержденная эксплуатация в реальных атаках в источниках не зафиксированы.
  • EPSS: 0,16% (0.00164). Вероятность эксплуатации в ближайшие 30 дней оценивается как низкая.

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


Уязвимость затрагивает ядра Linux, содержащие драйвер amba-pl011 с поддержкой DMA, начиная с версии, в которой была добавлена опциональная RX DMA (commit ead76f329f77). Точные номера версий ядра, в которых присутствует уязвимость, в предоставленных источниках не детализированы.

Патч был принят в mainline и backported в ветки stable. Для определения подверженности системы необходимо проверить наличие исправления в текущей сборке ядра.

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


Причина ошибки кроется в функции pl011_dma_shutdown, которая отвечает за отключение DMA-подсистемы. Функция dmaengine_terminate_all() не гарантирует завершения выполнения текущих колбэков перед возвратом управления.

В результате TX-колбэк может продолжать обращаться к TX-буферу, который уже был освобожден. Одновременно RX-таймер опроса читает RX-буферы без захвата блокировки порта (port lock), что создает гонку условий (race condition) и приводит к обращению к освобожденной памяти.

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


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

После освобождения буферов ядром, колбэк или таймер обращаются к этим адресам. Это приводит к повреждению памяти, что может быть использовано для повышения привилегий до root или для сбоя системы (Denial of Service).

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


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

  • Система работает на архитектуре ARM с поддержкой последовательного порта AMBA PL011.
  • В ядре включена и используется опция DMA для данного драйвера.
  • Атакующий имеет локальный доступ к системе с правами, достаточными для взаимодействия с последовательным портом или инициирования его перезагрузки.
  • В момент атаки драйвер находится в состоянии, когда происходит освобождение DMA-буферов (например, при выключении устройства).

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


Локальный пользователь инициирует операцию, приводящую к отключению DMA в драйвере amba-pl011 (например, через ioctl или смену режима работы порта). Драйвер начинает освобождать TX и RX буферы.

Поскольку dmaengine_terminate_all() не дожидается завершения колбэков, TX-колбэк продолжает писать в освобожденную память. Одновременно RX-таймер читает RX-буферы. Атакующий может контролировать содержимое освобожденной памяти, чтобы повлиять на выполнение кода ядра.

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


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

Отсутствие публичного эксплойта не означает, что уязвимость не может быть эксплуатируема. Учитывая механику use-after-free, написание эксплойта технически возможно, но требует точного контроля над таймингами и памятью.

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


Специфичные индикаторы компрометации (IOC) для CVE-2026-80737 в источниках не описаны. Для обнаружения атаки можно использовать следующие неспецифичные точки контроля:

  • Записи в dmesg или journalctl о сбоях ядра (kernel panic, oops) с упоминанием amba-pl011 или dmaengine.
  • Аномальные перезагрузки или зависания систем, использующих последовательные порты в режиме DMA.
  • Записи в аудите о подозрительных вызовах ioctl к устройствам /dev/ttyAMA* или /dev/ttyS* в момент отключения DMA.

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


Для обнаружения эксплуатации или сбоев, связанных с этой уязвимостью, рекомендуется анализировать логи ядра. Ищите сообщения об ошибках в памяти (memory corruption) или сбоях в драйвере последовательного порта.

Команды для проверки логов:

Bash:
# Проверка последних записей ядра на ошибки
dmesg -T | grep -i "amba-pl011\|dmaengine\|use-after-free"

# Проверка журналов системы
journalctl -k | grep -i "serial\|dma"

Также полезно отслеживать аномальные перезагрузки систем, где активно используется DMA для последовательных портов.

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


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

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

Полученную версию ядра необходимо сопоставить с официальными релизами дистрибутива. Если ядро было собрано из исходников, проверьте наличие коммита 440915499231e9db1c361aa45bb702e8fd3b4a32 в истории сборки.

Для систем, использующих пакетные менеджеры, проверьте наличие обновлений для пакета ядра (имя пакета зависит от дистрибутива, например linux-image или kernel).

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


Единственным надежным способом устранения уязвимости является обновление ядра Linux до версии, содержащей исправление. Патч заменяет dmaengine_terminate_all() на dmaengine_terminate_sync() и переносит удаление RX-таймера до освобождения буферов.

Обновите ядро через штатные механизмы дистрибутива:

  • Debian/Ubuntu: sudo apt update && sudo apt upgrade --only-upgrade linux-image-*
  • RHEL/CentOS: sudo dnf update kernel
  • Arch Linux: sudo pacman -Syu linux

После обновления обязательно перезагрузите систему, чтобы загрузить новое ядро.

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


Если обновление ядра невозможно в ближайшее время, можно рассмотреть следующие временные меры:

  • Отключите использование DMA для последовательных портов, если это поддерживается конфигурацией ядра или модулей.
  • Ограничьте доступ к последовательным портам (/dev/ttyAMA*, /dev/ttyS*) для пользователей, которым он не требуется.
  • Избегайте операций, приводящих к частой перезагрузке или отключению DMA-каналов в драйвере amba-pl011.

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

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


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

Bash:
uname -r

Проверьте, что коммит с исправлением присутствует в ядре. Для этого можно использовать git в исходниках ядра или проверить наличие изменений в файле drivers/tty/serial/amba-pl011.c (замена terminate_all на terminate_sync).

Также убедитесь, что система стабильно работает после перезагрузки и не содержит ошибок в логах, связанных с DMA или последовательными портами.

Вывод​


CVE-2026-80737 представляет собой серьезную уязвимость в драйвере amba-pl011, способную привести к выполнению кода в ядре. Несмотря на низкую вероятность эксплуатации (EPSS 0,16%), риск для систем с ARM-архитектурой и активным использованием DMA-последовательных портов остается высоким.

Администраторам рекомендуется как можно скорее обновить ядро до последней версии, содержащей исправление. Временные меры по ограничению доступа к портам могут снизить риск, но не заменяют патч. Регулярный мониторинг логов ядра поможет及时发现 аномалии, связанные с этой уязвимостью.

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


  1. NVD — CVE-2026-80737
  2. FIRST EPSS — CVE-2026-80737
  3. serial: amba-pl011: synchronize DMA teardown - kernel/git/stable/linux.git - Linux kernel stable tree
  4. serial: amba-pl011: synchronize DMA teardown - kernel/git/stable/linux.git - Linux kernel stable tree
  5. serial: amba-pl011: synchronize DMA teardown - kernel/git/stable/linux.git - Linux kernel stable tree
  6. serial: amba-pl011: synchronize DMA teardown - kernel/git/stable/linux.git - Linux kernel stable tree
  7. serial: amba-pl011: synchronize DMA teardown - kernel/git/stable/linux.git - Linux kernel stable tree
  8. serial: amba-pl011: synchronize DMA teardown - kernel/git/stable/linux.git - Linux kernel stable tree
  9. serial: amba-pl011: synchronize DMA teardown - kernel/git/stable/linux.git - Linux kernel stable tree
  10. serial: amba-pl011: synchronize DMA teardown - kernel/git/stable/linux.git - Linux kernel stable tree

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


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