Режим Kernel Lockdown в Linux, предназначенный для защиты ядра от модификаций из пользовательского пространства (особенно при включенном UEFI Secure Boot), оказался неполноценным. Выявлено, что интерфейсы legacy_io и legacy_mem в sysfs оставались доступными для записи даже в защищенном режиме. Это позволяло процессам с правами root напрямую писать в порты ввода-вывода и отображать память PCI, игнорируя проверки безопасности.
Суть уязвимости
Проблема существует с 2019 года, когда был добавлен код для блокировки доступа к PCI BAR. Разработчик Krzysztof Wilczyński объяснил, что проверка security_locked_down(LOCKDOWN_PCI_ACCESS) была добавлена в функции pci_write_config(), pci_mmap_resource() и pci_write_resource_io(), но полностью проигнорировала legacy-обработчики. Это создавало ситуацию, когда основная защита работала, но «черный ход» оставался открытым.
Технические детали и исправление
Патч уже добавлен в ветку next подсистемы PCI и войдет в релиз Linux 7.3. Исправление помечено как фикс для оригинального коммита 2019 года, что гарантирует его бэкпорт в стабильные ветки ядра. Ниже приведена структура уязвимых компонентов:
| Компонент | Функция | Статус до исправления | Статус после исправления |
|---|---|---|---|
legacy_io |
Чтение/запись legacy-портов I/O | Открыто для root | Заблокировано при Lockdown |
legacy_mem |
Доступ к legacy-пространству памяти PCI | Открыто для root | Заблокировано при Lockdown |
pci_write_config |
Настройка DMA-совместимого оборудования | Защищено (с 2019) | Защищено |
Почему это важно
Наличие UEFI Secure Boot не гарантировало целостность ядра, если злоумышленник или вредоносный код получали доступ к root. Возможность произвольной записи в I/O-порты позволяет модифицировать поведение аппаратного обеспечения, что может быть использовано для обхода других механизмов защиты. Исправление закрывает эту лазейку, делая режим Lockdown действительно эффективным инструментом безопасности.
Источник: Phoronix ↗
