CVE-2026-80800 в Linux Kernel: OOB read в парсере NFC LLCP и способы защиты

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

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


В подсистеме NFC ядра Linux обнаружена уязвимость, позволяющая прочитать память за границами буфера при обработке кадров LLCP. Функция nfc_llcp_connect_sn() не ограничивает обход TLV-структур границами skb, что приводит к OOB read при получении CONNECT или CC PDU от внешнего устройства. Статья разбирает механику дефекта, условия риска и методы проверки исправления.

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


Риск связан с чтением памяти за пределами буфера (Out-of-Bounds Read) в подсистеме NFC. Атака возможна с физического расстояния NFC-связи, без необходимости аутентификации.

  • Тип ошибки: OOB Read (чтение за границами буфера) в функции nfc_llcp_connect_sn().
  • CVSS: Официальная оценка CVSS на момент публикации в NVD отсутствует.
  • Условия атаки: Требуется физическая близость NFC-устройства к системе и наличие модуля nfc_llcp.
  • Эксплуатация: Подтвержденных фактов эксплуатации в реальных атаках в источниках нет.
  • EPSS: 0,23% (вероятность эксплуатации в ближайшие 30 дней).

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


Уязвимость затрагивает ядро Linux, в котором включена поддержка NFC и реализован протокол LLCP. Проблема существует с момента первоначальной поддержки LLCP (коммит d646960f7986) и была исправлена в коммите 55c68ac93e7dacc0f5f608b9c39dd4ff48cf28e8.

  • Компонент: net/nfc/llcp_core.c
  • Функция: nfc_llcp_connect_sn()
  • Исправлено в: 55c68ac93e7dacc0f5f608b9c39dd4ff48cf28e8 (upstream) и стабильных ветках (stable).

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

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


Причина уязвимости заключается в отсутствии проверки границ буфера при парсинге TLV-структур в функции nfc_llcp_connect_sn().

Функция итерирует по списку TLV, читая двухбайтовый заголовок (тип, длина) и последующие данные. При этом не проверяется, что заголовок и заявленная длина не выходят за пределы буфера skb.

Дополнительным фактором является вычисление tlv_array_len как skb->len - LLCP_HEADER_SIZE в типе size_t. Если длина кадра меньше размера заголовка LLCP, происходит подтекание (underflow) значения, что приводит к огромной длине и чтению памяти далеко за пределами буфера.

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


Атакующий отправляет сформированный CONNECT или CC PDU через NFC-связь. Данные попадают в диспетчер nfc_llcp_rx_skb(), который не применяет минимальную проверку длины кадра.

Далее вызывается nfc_llcp_connect_sn(). Функция пытается извлечь имя сервиса (Service Name) из TLV-структуры. Из-за отсутствия проверки границ, указатель может указывать за пределы skb. Возвращенный указатель передается в nfc_llcp_sock_from_sn(), где используется функция memcmp() для сравнения.

В результате происходит чтение памяти за пределами выделенного буфера. Это может привести к утечке данных ядра или нестабильности системы (crash), в зависимости от расположения памяти.

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


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

  • Наличие в системе модуля ядра Linux с поддержкой NFC и протокола LLCP.
  • Физическая близость атакующего NFC-устройства к целевой системе (в пределах радиуса действия NFC).
  • Отсутствие исправления (коммита 55c68ac93e7dacc0f5f608b9c39dd4ff48cf28e8) в текущей версии ядра.
  • Возможность отправки сформированных CONNECT или CC кадров через NFC-связь.

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


Атакующий подносит NFC-устройство к целевой системе. После автоматической активации LLCP-связи отправляется специально сформированный CONNECT PDU с некорректной длиной TLV-поля.

Ядро обрабатывает кадр, вызывая nfc_llcp_connect_sn(). Из-за подтекания size_t или отсутствия проверки границ, функция читает память за пределами skb. Возвращенный указатель используется в memcmp(), что приводит к OOB read.

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

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


В доступных источниках отсутствуют сведения о публичных эксплоитах или PoC-коде для CVE-2026-80800. Уязвимость была обнаружена автоматизированными инструментами безопасности 0sec. Отсутствие публичного эксплойта не означает, что атака невозможна, но подтвержденных фактов эксплуатации в реальных инцидентах на данный момент не зафиксировано.

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


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

  • Записи в журналах ядра (dmesg, syslog) о сбоях в подсистеме NFC или LLCP.
  • Необычная активность NFC-устройств, подключенных к системе.
  • Сигналы о нестабильности ядра (kernel panic, oops) в момент работы NFC-модуля.

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


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

  • Проверить версию ядра и наличие исправления (см. раздел «Проверка версии»).
  • Мониторить логи ядра на предмет ошибок в подсистеме net/nfc.
  • Использовать инструменты аудита ядра (например, auditd) для отслеживания аномальной активности в пространстве ядра, связанной с обработкой NFC-данных.

Специфичных сигнатур для IDS/IPS в источниках не приведено.

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


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

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

Затем сверьте версию с официальными релизами дистрибутива. Убедитесь, что ядро содержит коммит 55c68ac93e7dacc0f5f608b9c39dd4ff48cf28e8 или более поздний. Для проверки наличия патча в исходниках можно использовать git log в репозитории ядра, если он доступен.

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


Основным способом устранения уязвимости является обновление ядра Linux до версии, содержащей исправление.

  • Примените патч из коммита 55c68ac93e7dacc0f5f608b9c39dd4ff48cf28e8.
  • Обновите ядро через официальные репозитории вашего дистрибутива (например, apt, yum, dnf), если исправление уже включено в релиз.
  • Для кастомных сборок ядра интегрируйте исправление в исходный код и пересоберите модуль.

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

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


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

  • Отключите модуль ядра nfc_llcp или весь NFC-стек, если функциональность NFC не требуется.
  • Ограничьте физический доступ к NFC-интерфейсу системы.
  • Используйте аппаратные или программные средства для блокировки NFC-связи, если это поддерживается вашим оборудованием.

Эти меры не устраняют уязвимость, но снижают вероятность успешной атаки.

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


Для проверки успешного применения исправления:

  • Убедитесь, что версия ядра соответствует требованиям (см. «Проверка версии»).
  • Проверьте наличие коммита 55c68ac93e7dacc0f5f608b9c39dd4ff48cf28e8 в истории ядра, если доступно.
  • Проведите функциональное тестирование NFC-связи, чтобы убедиться, что подсистема работает корректно после обновления.
  • Проверьте логи ядра на отсутствие ошибок, связанных с обработкой LLCP-кадров.

Вывод​


CVE-2026-80800 представляет собой уязвимость OOB read в подсистеме NFC LLCP ядра Linux. Риск актуален для систем с активным NFC-интерфейсом и отсутствием исправления.

Рекомендуется своевременно обновлять ядро и отключать неиспользуемые модули. При отсутствии официальной оценки CVSS приоритет обновления определяется политикой безопасности организации и критичностью NFC-функциональности.

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


  1. NVD — CVE-2026-80800
  2. FIRST EPSS — CVE-2026-80800
  3. nfc: llcp: bound the connect_sn TLV walk to the skb - kernel/git/stable/linux.git - Linux kernel stable tree
  4. nfc: llcp: bound the connect_sn TLV walk to the skb - kernel/git/stable/linux.git - Linux kernel stable tree
  5. nfc: llcp: bound the connect_sn TLV walk to the skb - kernel/git/stable/linux.git - Linux kernel stable tree
  6. nfc: llcp: bound the connect_sn TLV walk to the skb - kernel/git/stable/linux.git - Linux kernel stable tree
  7. nfc: llcp: bound the connect_sn TLV walk to the skb - kernel/git/stable/linux.git - Linux kernel stable tree
  8. nfc: llcp: bound the connect_sn TLV walk to the skb - kernel/git/stable/linux.git - Linux kernel stable tree
  9. nfc: llcp: bound the connect_sn TLV walk to the skb - kernel/git/stable/linux.git - Linux kernel stable tree
  10. nfc: llcp: bound the connect_sn TLV walk to the skb - kernel/git/stable/linux.git - Linux kernel stable tree

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


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