Integer underflow в расшифровке кадров IEEE 802.15.4 в Zephyr ведёт к out-of-bounds чтению и записи (CVE-2026-19186)
В сетевом стеке Zephyr обнаружена уязвимость CVE-2026-19186 с оценкой CVSS 8.1 (HIGH): из-за целочисленного переполнения при расшифровке кадров IEEE 802.15.4 возникает чтение и запись за границами буфера. Проблема затрагивает конфигурации с включённой экспериментальной опцией безопасности IEEE 802.15.4; одного специально сформированного короткого кадра от любого устройства в радиусе действия достаточно для повреждения памяти и отказа в обслуживании.
Подробности
Уязвимость находится в функции ieee802154_decipher_data_frame() файла subsys/net/l2/ieee802154/ieee802154_frame.c. При вычислении длины полезной нагрузки выполнялась операция payload_len = net_pkt_get_len(pkt) - ll_hdr_len - authtag_len без предварительной проверки того, что принятый кадр содержит как минимум ll_hdr_len + authtag_len байт. Все три переменные имеют тип uint8_t, поэтому для кадра, полезная нагрузка которого короче настроенного тега аутентификации, результат вычитания переполняется и превращается в большое значение — вплоть до 255. Полученная в результате переполнения длина без изменений передаётся в ieee802154_decrypt_auth() и далее в операцию CCM в качестве cipher_pkt.in_len/out_buf_max, при этом apkt->tag указывает на frame + ll_hdr_len + payload_len. Поскольку приёмный буфер выделяется строго под длину кадра, полученного от драйвера радио, криптографический слой читает несколько сотен байт за пределами буфера пакета и записывает такое же количество расшифрованных байт обратно поверх него. Тег аутентификации кадра проверяется только после этой обработки, поэтому злоумышленнику не нужны ни ключевой материал, ни ассоциация, ни предварительная аутентификация: достаточно одного специально сформированного короткого кадра от любого устройства в радиусе действия. Проверка кадров в ieee802154_validate_frame() этому не препятствует — data-кадр принимается с полезной нагрузкой в один байт. Итог — чтение и запись за границами буфера объёмом примерно до 240 байт в смежный пул сетевых буферов, что приводит к повреждению других пакетов или метаданных аллокатора и обычно вызывает сбой целевого устройства. Содержимое, выходящее за границы, не контролируется атакующим (это шифртекст, сложенный по XOR с гаммой поверх памяти за пределами буфера), а кадр отбрасывается при неудачной проверке тега, поэтому основной эффект — повреждение памяти и отказ в обслуживании, а не раскрытие информации. Воздействию подвержены только конфигурации, в которых включена экспериментальная опция CONFIG_NET_L2_IEEE802154_SECURITY, выбран криптографический устройство через CONFIG_NET_L2_IEEE802154_SECURITY_CRYPTO_DEV_NAME и установлена сессия безопасности с уровнем, отличным от IEEE802154_SECURITY_LEVEL_NONE. При отключённой безопасности или уровне NONE длина тега равна нулю, и переполнение не возникает.Что делать
Исправление отклоняет кадры короче ll_hdr_len + authtag_len до выполнения вычитания и добавляет соответствующую проверку на стороне передачи в ieee802154_create_data_frame(). Рекомендуется обновить Zephyr до версии, содержащей данный патч. Если обновление невозможно, следует временно отключить опцию CONFIG_NET_L2_IEEE802154_SECURITY либо убедиться, что используемый уровень безопасности равен IEEE802154_SECURITY_LEVEL_NONE, — в этом случае длина тега нулевая и уязвимость не проявляется. Дополнительно стоит ограничить физический и радиочастотный доступ к устройствам, поскольку эксплуатация требует лишь нахождения в радиусе действия. Итог: CVE-2026-19186 — опасная уязвимость повреждения памяти в стеке IEEE 802.15.4 проекта Zephyr, эксплуатируемая одним коротким кадром без аутентификации. Наиболее надёжная мера — установка обновления с исправлением; до этого поможет отключение уязвимой опции безопасности.Источник: CVE Project (cvelistV5)
