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-последовательных портов остается высоким.Администраторам рекомендуется как можно скорее обновить ядро до последней версии, содержащей исправление. Временные меры по ограничению доступа к портам могут снизить риск, но не заменяют патч. Регулярный мониторинг логов ядра поможет及时发现 аномалии, связанные с этой уязвимостью.
Официальные источники
- NVD — CVE-2026-80737
- FIRST EPSS — CVE-2026-80737
- serial: amba-pl011: synchronize DMA teardown - kernel/git/stable/linux.git - Linux kernel stable tree
- serial: amba-pl011: synchronize DMA teardown - kernel/git/stable/linux.git - Linux kernel stable tree
- serial: amba-pl011: synchronize DMA teardown - kernel/git/stable/linux.git - Linux kernel stable tree
- serial: amba-pl011: synchronize DMA teardown - kernel/git/stable/linux.git - Linux kernel stable tree
- serial: amba-pl011: synchronize DMA teardown - kernel/git/stable/linux.git - Linux kernel stable tree
- serial: amba-pl011: synchronize DMA teardown - kernel/git/stable/linux.git - Linux kernel stable tree
- serial: amba-pl011: synchronize DMA teardown - kernel/git/stable/linux.git - Linux kernel stable tree
- serial: amba-pl011: synchronize DMA teardown - kernel/git/stable/linux.git - Linux kernel stable tree
История обновлений статьи
- 06.09.2026 — Опубликована первая версия материала.
