CVE-2026-80798 в Linux Kernel: OOB-чтение в NFC LLCP, уязвимые версии и защита

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

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


В модуле NFC LLCP ядра Linux отсутствует проверка длины входящего пакета перед разбором заголовка. Это позволяет устройству в радиусе действия NFC вызвать чтение памяти за пределами буфера.

Исправление уже встроено в стабильные ветки ядра. Статья описывает механику ошибки, условия доступа и порядок проверки системы.

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


Уязвимость позволяет нарушителю с NFC-устройством вблизи системы вызвать чтение данных за пределами выделенной области памяти в ядре. Это может привести к утечке информации или нестабильности системы, хотя подтверждённая эксплуатация в реальных атаках не зафиксирована.

  • Тип ошибки: Out-of-bounds read (чтение за пределами буфера) в функции обработки пакетов LLCP.
  • CVSS: Официальная оценка NVD на момент публикации не назначена.
  • Условия атаки: Атакующий должен находиться в радиусе действия NFC-сигнала (обычно несколько сантиметров) и иметь возможность инициировать NFC-DEP.
  • Факт эксплуатации: Подтверждено воспроизведение через KFENCE на тестовой ветке linux-next.
  • EPSS: 0,23% (процентиль 14,22%), что указывает на низкую вероятность массовой эксплуатации в ближайшем будущем.

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


Уязвимость затрагивает все версии ядра Linux, содержащие модуль NFC LLCP, начиная с коммита d646960f7986 ("NFC: Initial LLCP support").

  • Версии ядра: Все стабильные ветки, в которые не внесён патч 95674f506c6376d6722a23144c9acd26609771ed.
  • Компонент: net/nfc/llcp_core.c.
  • Платформы: Любые системы с поддержкой NFC и активным модулем nfc_llcp.

Точный список версий, в которые уже внесено исправление, публикуется в релизных заметках дистрибутивов и на git.kernel.org.

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


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

При обработке пакетов типа CONNECT или CC код вычисляет длину массива TLV как skb->len - LLCP_HEADER_SIZE. Если длина пакета меньше размера заголовка, вычитание приводит к переполнению типа size_t, в результате чего получается огромное значение. Последующий обход TLV-структуры выходит за пределы выделенной области памяти, вызывая out-of-bounds read.

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


Атакующий использует NFC-устройство в радиусе действия для отправки специально сформированного пакета LLCP, длина которого меньше размера обязательного заголовка.

После активации NFC-DEP ядро автоматически переходит к обработке LLCP. Функция __nfc_llcp_recv() принимает пакет и передаёт его в nfc_llcp_rx_skb(). Из-за отсутствия проверки длины, код пытается прочитать заголовок и вычислить длину полезной нагрузки, что приводит к чтению памяти за пределами буфера skb.

Исправление добавляет проверку pskb_may_pull() в начале функции __nfc_llcp_recv(), которая гарантирует наличие заголовка в линейной части буфера перед дальнейшей обработкой.

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


Для успешной эксплуатации уязвимости атакующему необходимо выполнить следующие условия:

  • Физическая близость: Устройство атакующего должно находиться в радиусе действия NFC-сигнала жертвы (обычно 10–20 см).
  • Активность NFC: Модуль NFC на целевой системе должен быть включён и готов к обмену данными.
  • Инициация NFC-DEP: Атакующий должен инициировать процесс NFC-DEP, после чего система автоматически активирует LLCP-соединение.
  • Отсутствие аутентификации: LLCP-связь устанавливается автоматически после NFC-DEP, без необходимости предварительной аутентификации.

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


Атакующий подходит к целевому устройству с NFC-модулем. Используя собственное NFC-устройство, он инициирует NFC-DEP. После успешного рукопожатия система автоматически активирует LLCP.

Атакующий отправляет пакет LLCP, длина которого меньше LLCP_HEADER_SIZE. Ядро принимает пакет, и функция nfc_llcp_rx_skb() пытается разобрать его. Из-за переполнения при вычислении длины TLV-массива происходит чтение памяти за пределами буфера.

В результате атакующий может получить доступ к данным, находящимся в памяти ядра рядом с буфером пакета, или вызвать сбой системы. В описании уязвимости указано, что ошибка воспроизводится через KFENCE на linux-next.

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


Публичный эксплойт в виде готового кода для массовой атаки не опубликован. Однако в описании уязвимости указано, что ошибка была воспроизведена с помощью KFENCE (Kernel Fuzzing) через /dev/virtual_nci на ветке linux-next.

Это подтверждает техническую возможность эксплуатации, но не означает, что эксплойт используется в реальных атаках. Отсутствие сведений о массовой эксплуатации не исключает наличие скрытых эксплойтов у сторонних исследователей.

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


Специфичные индикаторы компрометации (IOC) для этой уязвимости в открытых источниках не описаны. Ниже приведены общие, неспецифичные точки контроля, которые могут указывать на подозрительную активность NFC-модуля:

  • Журналы ядра: Записи о сбоях или предупреждениях KFENCE/KASAN в модуле nfc_llcp.
  • Активность NFC: Непредусмотренные попытки установления NFC-соединений в местах, где NFC не ожидается.
  • Сбои системы: Внезапные перезагрузки или ошибки ядра, связанные с обработкой NFC-пакетов.

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


Для обнаружения признаков эксплуатации или аномальной активности NFC-модуля рекомендуется использовать следующие методы:

  • Мониторинг журналов: Анализ логов ядра (dmesg, journalctl) на наличие сообщений об ошибках в модуле nfc_llcp или срабатываний KFENCE.
  • Контроль NFC-событий: Отслеживание попыток активации NFC-DEP и LLCP-соединений через системные логи или специализированные инструменты мониторинга.
  • Проверка конфигурации: Убедиться, что NFC-модуль отключён, если он не используется, или что доступ к нему ограничен.

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


Для проверки версии ядра и наличия исправления выполните следующие команды:

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

Сравните полученную версию с релизными заметками вашего дистрибутива. Если версия ядра содержит коммит 95674f506c6376d6722a23144c9acd26609771ed, система защищена. Для проверки наличия конкретного коммита в исходниках ядра можно использовать git log в репозитории ядра, если он доступен локально.

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


Единственный надёжный способ устранения уязвимости — обновление ядра Linux до версии, содержащей патч 95674f506c6376d6722a23144c9acd26609771ed.

  • Обновление через дистрибутив: Используйте штатные средства обновления (apt, yum, dnf, zypper и т.д.) для установки последнего стабильного ядра.
  • Проверка патча: Убедитесь, что в вашем ядре присутствует коммит 95674f506c6376d6722a23144c9acd26609771ed (см. git.kernel.org).
  • Перезагрузка: После обновления ядра требуется перезагрузка системы для применения изменений.

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


До обновления ядра можно снизить риск, применив следующие временные меры:

  • Отключение NFC: Если NFC-модуль не используется, отключите его через rfkill или в настройках системы.
  • Ограничение доступа: Ограничьте физический доступ к устройству, чтобы предотвратить приближение посторонних NFC-устройств.
  • Использование KFENCE: Включите KFENCE (если доступно) для раннего обнаружения out-of-bounds ошибок в ядре.

Эти меры не устраняют уязвимость, но снижают вероятность её эксплуатации.

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


Для проверки успешного применения исправления выполните следующие шаги:

  1. Проверка версии ядра: Убедитесь, что система работает на обновлённом ядре (uname -r).
  2. Проверка наличия патча: Если у вас есть доступ к исходникам ядра, проверьте наличие коммита 95674f506c6376d6722a23144c9acd26609771ed в истории изменений.
  3. Функциональное тестирование: Проведите тестирование NFC-связи, чтобы убедиться, что модуль работает корректно после обновления.
  4. Мониторинг: Продолжайте отслеживать журналы ядра на наличие ошибок в модуле nfc_llcp.

Вывод​


Уязвимость CVE-2026-80798 представляет собой риск для систем с активным NFC-модулем, так как позволяет нарушителю в радиусе действия вызвать чтение памяти за пределами буфера. Исправление уже доступно в стабильных ветках ядра Linux.

Рекомендуется как можно скорее обновить ядро до версии, содержащей патч 95674f506c6376d6722a23144c9acd26609771ed. Если обновление невозможно в ближайшее время, отключите NFC-модуль и ограничьте физический доступ к устройству. Регулярно проверяйте журналы ядра на наличие признаков аномальной активности.

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


  1. NVD — CVE-2026-80798
  2. FIRST EPSS — CVE-2026-80798
  3. nfc: llcp: reject PDUs shorter than the LLCP header - kernel/git/stable/linux.git - Linux kernel stable tree
  4. nfc: llcp: reject PDUs shorter than the LLCP header - kernel/git/stable/linux.git - Linux kernel stable tree
  5. nfc: llcp: reject PDUs shorter than the LLCP header - kernel/git/stable/linux.git - Linux kernel stable tree
  6. nfc: llcp: reject PDUs shorter than the LLCP header - kernel/git/stable/linux.git - Linux kernel stable tree
  7. nfc: llcp: reject PDUs shorter than the LLCP header - kernel/git/stable/linux.git - Linux kernel stable tree
  8. nfc: llcp: reject PDUs shorter than the LLCP header - kernel/git/stable/linux.git - Linux kernel stable tree
  9. nfc: llcp: reject PDUs shorter than the LLCP header - kernel/git/stable/linux.git - Linux kernel stable tree
  10. nfc: llcp: reject PDUs shorter than the LLCP header - kernel/git/stable/linux.git - Linux kernel stable tree

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


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