CVE: CVE-2026-80917
Продукт: Linux Kernel
Дата публикации: 09.09.2026
Критичность: не определена
CVSS: нет данных
EPSS: 0,16%; процентиль 5,94%
CISA KEV: нет подтверждения в каталоге CISA KEV
Краткое описание
В драйвере
pci-host-generic ядра Linux обнаружен дефект, вызывающий обращение по нулевому указателю на 32-битных системах с режимом CAM. Сбой происходит при инициализации PCI-шин и приводит к падению ядра (Oops).Исправление опубликовано в стабильных ветках. Материал описывает механику ошибки, условия проявления и порядок проверки актуальности системы.
Основные характеристики
Риск представляет собой отказ в обслуживании (DoS) на узком сегменте инфраструктуры: 32-битных системах, использующих драйвер
pci-host-cam-generic. Сбой возникает на этапе инициализации оборудования и приводит к остановке работы ядра.- Тип ошибки: NULL pointer dereference (обращение по нулевому указателю).
- CVSS: Официальная оценка NVD не присвоена (статус записи: Received).
- Условия проявления: Требуется 32-битная архитектура и использование режима CAM в Device Tree.
- Эксплуатация: Подтверждено локальное падение ядра (Oops) при загрузке; данные об удаленной атаке отсутствуют.
- EPSS: 0,16% (вероятность эксплуатации в ближайшие 30 дней крайне низкая).
Какие продукты и версии затронуты
Уязвимость затрагивает ядро Linux, использующее драйвер
pci-host-generic в режиме CAM (Configuration Access Mechanism) на 32-битных системах.- Компоненты:
drivers/pci/controller/pci-host-generic.cиdrivers/pci/ecam.c.
- Архитектура: 32-битные системы (например, RV32, ARM32), где конфигурационное пространство PCI не может быть отображено одним блоком через
ioremap.
- Версии: Ошибка была введена в коммите
8fe55ef23387и присутствует в версиях, не содержащих патч008cb88edb41f3c7c8e0ed76719830984.
- Пример сбоев: Зафиксирован на платформе Digilent Nexys-Video-A7 RV32 с ядром 6.9.7+.
Причина уязвимости
На 32-битных системах размер конфигурационного пространства PCI превышает возможности единого
ioremap. Поэтому функция pci_ecam_create() разделяет маппинг по сегментам шин и полагается на колбэк ->add_bus для заполнения структуры cfg->winp[].Драйвер
pci-host-generic для режима CAM (legacy) не предоставлял колбэки ->add_bus и ->remove_bus, в отличие от режима ECAM. В результате при первом обращении к конфигурационному регистру функция pci_ecam_map_bus() получала NULL как базовый адрес, что вызывало сбой ядра.Как работает атака
Сбой происходит во время стандартной процедуры инициализации PCI-шины. При загрузке ядра или подключении устройства драйвер начинает перечисление шин (
pci_scan_root_bus_bridge).Первое чтение конфигурационного регистра (например,
pci_bus_read_config_dword) вызывает pci_generic_config_read. Поскольку маппинг шины не был установлен из-за отсутствия колбэка, обращение по нулевому указателю приводит к Oops и остановке работы ядра. Это не атака со стороны злоумышленника, а критический дефект инициализации.Условия успешной эксплуатации
Для проявления уязвимости не требуется взаимодействие с внешним сетевым трафиком. Достаточно выполнения следующих условий на целевой системе:
- Использование 32-битной архитектуры процессора.
- Наличие PCI-устройств, управляемых драйвером
pci-host-generic.
- Использование режима CAM (compatible string
pci-host-cam-generic) в Device Tree.
- Запуск процесса перечисления PCI-шин (обычно при загрузке ядра).
Возможный сценарий атаки
Сценарий воспроизведения описан в логах сбоев: система с ядром 6.9.7+ на платформе RV32 пытается инициализировать PCI-шину. В момент первого обращения к конфигурационному пространству возникает
Unable to handle kernel NULL pointer dereference at virtual address 00000800.Стек вызовов показывает путь от
pci_host_common_probe до pci_generic_config_read. Результатом является падение ядра (Oops) и невозможность загрузки системы или зависание на этапе инициализации оборудования. Для атакующего это представляет интерес как вектор DoS, если он может инициировать перезагрузку или пересканирование шин.Есть ли публичный эксплойт
Публичный эксплойт в виде готового кода для удаленной атаки не опубликован. Однако существует техническое описание сбоев (Oops) и патч, который подтверждает воспроизводимость проблемы.
- PoC: Логи сбоев ядра, приложенные к отчету об уязвимости.
- Эксплуатация: Подтверждено локальное падение ядра при инициализации.
- Удаленная атака: Сведения об удаленной эксплуатации отсутствуют, так как сбой привязан к процессу загрузки/инициализации драйвера.
Признаки эксплуатации
Специфичных сетевых индикаторов (IOC) для этой уязвимости нет, так как она проявляется на уровне ядра при инициализации оборудования. Общие неспецифичные признаки, которые могут указывать на проблему:
- Записи в
dmesgили системном журнале с текстомUnable to handle kernel NULL pointer dereference.
- Стек вызовов, содержащий
pci_generic_config_readиpci_host_common_probe.
- Невозможность загрузки системы или зависание на этапе инициализации PCI-устройств.
Как обнаружить атаку
Для обнаружения проблемы достаточно анализа логов ядра. Если система работает стабильно, признаков эксплуатации нет. При подозрении на сбой из-за этой уязвимости:
- Проверьте
dmesg | grep -i "null pointer".
- Ищите упоминания
pci_generic_config_readв стеках сбоев.
- Убедитесь, что система не использует
pci-host-cam-genericна 32-битных ядрах без патча.
- Мониторьте логи загрузки (
journalctl -b) на наличие Oops-сообщений.
Как проверить свою версию
Проверьте текущую версию ядра и наличие патча. Команды для проверки версии:
Bash:
uname -r
uname -a
cat /proc/version
Для проверки наличия конкретного исправления в исходниках (если вы собираете ядро):
git log --oneline | grep 008cb88edb41f3c7c8e0ed76719830984. В бинарных дистрибутивах сверяйтесь с базами данных обновлений вашего вендора.Исправление
Единственный способ устранения уязвимости — обновление ядра до версии, содержащей коммит
008cb88edb41f3c7c8e0ed76719830984.- Официальный патч: Доступен в стабильных ветках Linux Kernel (stable tree).
- Дистрибутивы: Установите последние обновления безопасности от вашего поставщика (Ubuntu, Debian, RHEL и др.).
- Сборка из исходников: Включите коммит
008cb88edb41f3c7c8e0ed76719830984в дерево ядра перед сборкой.
- Альтернатива: Если обновление невозможно, рассмотрите переход на 64-битную архитектуру или использование режима ECAM, если это поддерживается оборудованием.
Временные меры защиты
Поскольку сбой происходит при инициализации драйвера, временные меры ограничены:
- Отключение PCI-устройств: Если возможно, отключите PCI-устройства, управляемые
pci-host-generic, в Device Tree или BIOS/UEFI.
- Использование ECAM: Если оборудование поддерживает, переключитесь на режим ECAM (
pci-host-ecam-generic), который не подвержен этой ошибке.
- Переход на 64-бит: Использование 64-битного ядра устраняет проблему с разделением маппинга, так как
ioremapможет обработать все пространство сразу.
Как проверить устранение уязвимости
После обновления ядра проверьте, что система загружается без сбоев при инициализации PCI-устройств.
- Загрузите систему и выполните
dmesg | grep -i "pci".
- Убедитесь, что отсутствуют сообщения об Oops или NULL pointer dereference.
- Проверьте, что PCI-устройства корректно обнаружены:
lspci.
- Если сбоев нет, уязвимость устранена.
Вывод
CVE-2026-80917 — это критический дефект инициализации, а не классическая сетевая уязвимость. Он приводит к падению ядра на 32-битных системах с CAM.
Обновление ядра до версии с патчем
008cb88edb41f3c7c8e0ed76719830984 полностью устраняет проблему. Для большинства пользователей 64-битных систем риск минимален, но владельцам 32-битных встраиваемых систем с PCI-устройствами необходимо срочно применить обновление.Официальные источники
- NVD — CVE-2026-80917
- FIRST EPSS — CVE-2026-80917
- PCI: host-generic: Fix NULL pointer dereference on 32-bit CAM systems - kernel/git/stable/linux.git - Linux kernel stable tree
- PCI: host-generic: Fix NULL pointer dereference on 32-bit CAM systems - kernel/git/stable/linux.git - Linux kernel stable tree
- PCI: host-generic: Fix NULL pointer dereference on 32-bit CAM systems - kernel/git/stable/linux.git - Linux kernel stable tree
- PCI: host-generic: Fix NULL pointer dereference on 32-bit CAM systems - kernel/git/stable/linux.git - Linux kernel stable tree
- PCI: host-generic: Fix NULL pointer dereference on 32-bit CAM systems - kernel/git/stable/linux.git - Linux kernel stable tree
- PCI: host-generic: Fix NULL pointer dereference on 32-bit CAM systems - kernel/git/stable/linux.git - Linux kernel stable tree
- PCI: host-generic: Fix NULL pointer dereference on 32-bit CAM systems - kernel/git/stable/linux.git - Linux kernel stable tree
- PCI: host-generic: Fix NULL pointer dereference on 32-bit CAM systems - kernel/git/stable/linux.git - Linux kernel stable tree
История обновлений статьи
- 12.09.2026 — Опубликована первая версия материала.
