Блог / Разборы CVE

CVE-2024-26855: как отсутствующий атрибут приводит к разыменованию NULL

Исправление драйвера Linux ice показывает типичную ошибку анализа кода: необязательный результат парсера принимают за гарантированный объект.

Аспирантура по информационной безопасности завершенаВнутривузовская защита пройдена · Итоговая защита диссертации впереди

Какое предположение оказалось неверным

CVE-2024-26855 относится к функции ice_bridge_setlink() в сетевом драйвере Intel ice. Функция ищет атрибут моста IFLA_AF_SPEC в сообщении netlink. Поиск через nlmsg_find_attr() может вернуть NULL, если атрибут отсутствует. В уязвимом пути результат передавался в обход вложенных атрибутов без предварительной проверки.

При анализе важно проверить договорённость между двумя операциями: поиск гарантирует объект или возвращает необязательный результат? Само попадание сообщения в обработчик ещё не означает, что все атрибуты, которые ожидает дальнейший код, присутствуют. Именно этот переход требует отдельного внимания.

Проверка до использования результата

Принятое исправление проверяет br_spec сразу после поиска и возвращает -EINVAL, если атрибут отсутствует. Некорректное значение не достигает обхода вложенных данных. Ниже показана эта проверка, а не самостоятельный пример воспроизведения уязвимости.

Когда проверка расположена на границе операций, предположение становится явным для следующего разработчика. Код устанавливает условие, которое необходимо для дальнейшей обработки сообщения.

if (!br_spec)
    return -EINVAL;

Что проверить в собственном парсере

Проследите каждый необязательный результат поиска до первого использования. Отдельно рассмотрите отсутствующие поля, пустые коллекции и некорректный ввод. Уточните, как вспомогательная функция сообщает об ошибке: через NULL, специальное значение или отдельный статус. После этого проверьте обработку результата во всех вызывающих функциях.

Полезный регрессионный тест проходит путь с отсутствующим атрибутом и проверяет ожидаемую ошибку. Тест только с полностью заполненным сообщением может успешно выполняться, хотя исходное неверное предположение остаётся в коде.

Практический вывод для команды продукта

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

Для установленной системы Linux проверьте актуальную запись CVE и сведения о пакете у вашего дистрибутива. Перенос исправлений в старые ветки делает статус пакета важнее поверхностного сравнения версий ядра. В собственном продукте целевой аудит кода помогает проследить такие договорённости между компонентами, которые обрабатывают недоверенные данные.

Источники

Запись об уязвимости

CVE-2024-26855

Обсудить такую проверку

Услуги
Все статьи