CVE-2026-72476 в Linux Kernel: Use-After-Free в dmaengine

CVE: CVE-2026-72476
Продукт: Linux Kernel
Дата публикации: 15.08.2026
Критичность: не определена
CVSS: нет данных
EPSS: 0,22%; процентиль 12,78%
CISA KEV: нет подтверждения в каталоге CISA KEV

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


CVE-2026-72476 описывает ошибку Use-After-Free в подсистеме dmaengine ядра Linux. В функции dma_release_channel() вызов dma_chan_put() происходил до проверки поля privatecnt структуры устройства. Это могло привести к преждевременному освобождению памяти устройства, если провайдер DMA был удален, и последующему обращению по висячему указателю. Уязвимость исправлена перемещением вызова dma_chan_put() после проверки.

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


Тип: Use-After-Free (UAF) в ядре Linux.
Компонент: Подсистема dmaengine (файл drivers/dma/dmaengine.c).
Функция: dma_release_channel().
Суть ошибки: Неправильный порядок операций при освобождении канала DMA. Вызов dma_chan_put() мог освободить структуру устройства до того, как код проверил поле privatecnt.
Исправление: Перемещение вызова dma_chan_put() после блока проверки privatecnt.
Статус: Исправлено в стабильных ветках ядра (stable tree).

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


Linux Kernel.
Уязвимы версии, содержащие коммит 0f571515c332 («dmaengine: Add privatecnt to revert DMA_PRIVATE property»), но не содержащие исправляющий коммит 92f853f0645aebf1d05d333e97ab7c342ace1892.
Точные диапазоны версий зависят от дистрибутива. Патч был применен в различные ветки stable (включая 6.6.y, 6.1.y и другие) в июле 2026 года. Информация о конкретных затронутых версиях дистрибутивов в предоставленных источниках отсутствует.

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


В функции dma_release_channel() код выполнял проверку chan->device->privatecnt после вызова dma_chan_put(). Функция dma_chan_put() уменьшает счетчик ссылок и вызывает dma_device_put(). Если провайдер DMA был уже удален, dma_device_put() могла освободить последнюю ссылку на структуру dma_device. Последующий доступ к chan->device->privatecnt обращался к освобожденной памяти, что приводило к Use-After-Free.

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


Эксплуатация требует совпадения событий: освобождение канала DMA (вызов dma_release_channel) должно происходить одновременно с удалением провайдера DMA. При этом счетчик ссылок на устройство падает до нуля внутри dma_chan_put(), освобождая память. Затем код пытается прочитать поле privatecnt из этой памяти. Если атакующий контролирует переназначенную память, возможно выполнение кода в контексте ядра или вызов Kernel Panic.

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


  1. Доступ к управлению устройствами DMA или модулями ядра (обычно root/CAP_SYS_ADMIN).
  2. Наличие оборудования или виртуальных устройств, использующих dmaengine.
  3. Возможность спровоцировать гонку условий между освобождением канала и удалением провайдера.
  4. Контроль над переназначением памяти (heap spray) для потенциального повышения привилегий.

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


  1. Загрузка или активация модуля драйвера DMA.
  2. Запрос канала DMA.
  3. Инициация освобождения канала (например, при выгрузке модуля) одновременно с удалением провайдера DMA.
  4. Преждевременное освобождение структуры dma_device из-за ошибки в порядке вызовов.
  5. Обращение к chan->device->privatecnt по висячему указателю.
  6. При успешном контроле памяти — выполнение произвольного кода в ядре или отказ в обслуживании.

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


Публичные эксплойты или PoC-код для CVE-2026-72476 не зафиксированы. Уязвимость была обнаружена и исправлена в рамках разработки ядра. EPSS-оценка составляет 0.22% (процентиль 12.77%), что указывает на низкую вероятность эксплуатации.

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


Специфичных IOC для CVE-2026-72476 нет. Общие признаки эксплуатации UAF в ядре:

  • Нестабильность системы, случайные Kernel Panic.
  • Сообщения «BUG: KASAN: use-after-free» в dmesg (если включен KASAN).
  • Ошибки работы драйверов DMA.
    Эти признаки неспецифичны и могут быть вызваны другими причинами.

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


Основной метод — проверка версии ядра и наличия патча.

  1. Проверка версии: uname -r
  2. Поиск ошибок памяти в журналах: dmesg | grep -i "use-after-free"
  3. Анализ логов KASAN (если ядро собрано с KASAN): dmesg | grep -i "kasan"
  4. Проверка changelog пакета ядра на наличие упоминания CVE-2026-72476 или коммита 92f853f0645aebf1d05d333e97ab7c342ace1892.

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


Для проверки версии установленного ядра Linux используйте:

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

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

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


Обновите ядро Linux до версии, содержащей исправление CVE-2026-72476.

Bash:
# Debian/Ubuntu
sudo apt update
sudo apt upgrade linux-image-generic

# RHEL/CentOS/Fedora
sudo dnf update kernel

# Arch Linux
sudo pacman -Syu linux

Перезагрузите систему после обновления.

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


Прямых временных смягчающих мер для этой ошибки в dmaengine нет. Можно снизить риск:

  1. Ограничить доступ к загрузке/выгрузке модулей ядра.
  2. Отключить неиспользуемые устройства DMA.
  3. Использовать ядра с включенным KASAN или KCFI (в основном для отладки).

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


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

Bash:
uname -r

Убедитесь, что версия соответствует исправленной. Проверьте changelog пакета ядра на наличие упоминания CVE-2026-72476 или коммита 92f853f0645aebf1d05d333e97ab7c342ace1892.

Вывод​


CVE-2026-72476 — Use-After-Free в dmaengine ядра Linux. Риск эксплуатации низок, но возможна компрометация ядра. Рекомендуется обновление до версий с исправлением. Администраторам следует мониторить журналы ядра на предмет ошибок памяти.

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


  1. NVD — CVE-2026-72476
  2. FIRST EPSS — CVE-2026-72476
  3. dmaengine: Fix possible use after free - kernel/git/stable/linux.git - Linux kernel stable tree
  4. dmaengine: Fix possible use after free - kernel/git/stable/linux.git - Linux kernel stable tree
  5. dmaengine: Fix possible use after free - kernel/git/stable/linux.git - Linux kernel stable tree
  6. dmaengine: Fix possible use after free - kernel/git/stable/linux.git - Linux kernel stable tree
  7. dmaengine: Fix possible use after free - kernel/git/stable/linux.git - Linux kernel stable tree
  8. dmaengine: Fix possible use after free - kernel/git/stable/linux.git - Linux kernel stable tree
  9. dmaengine: Fix possible use after free - kernel/git/stable/linux.git - Linux kernel stable tree
  10. dmaengine: Fix possible use after free - kernel/git/stable/linux.git - Linux kernel stable tree

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


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