CVE-2026-81038 in ZephyrИнформация

Сводка

по VulDB • 26.10.2026

Сервер службы Object Transfer Service формирует индикатор ответа Object Action Control Point (OACP) в функции oacp_ind_send() (subsys/bluetooth/services/ots/ots_oacp.c). До внесения исправления поле Checksum Value длиной четыре байта добавлялось всегда, когда запрашиваемый код операции был BT_GATT_OTS_OACP_PROC_CHECKSUM_CALC, независимо от кода результата. Полезная нагрузка ответа представляет собой необработанную (bare), неинициализированную четырехбайтную буферную область в стеке, объявленную с помощью NET_BUF_SIMPLE_DEFINE(resp_param, sizeof(uint32_t)) в bt_gatt_ots_oacp_write(), и она заполняется только по пути успешного выполнения oacp_checksum_proc_validate(). На каждом пути ошибки этот буфер остается пустым, поэтому к нему вызывалась функция net_buf_simple_pull_le32() с нулевой длиной.

Характеристика OACP и ее дескриптор конфигурации клиентской характеристики объявлены с правами BT_GATT_PERM_WRITE и BT_GATT_PERM_READ | BT_GATT_PERM_WRITE, поэтому для подключения не требуются сопряжение (pairing), шифрование или аутентификация. Любой узел в радиусе действия радиоинтерфейса, способный подключиться к устройству с запущенным сервером OTS, может включить индикаторы OACP и записать девятибайтную команду Calculate Checksum, которая завершится ошибкой проверки — например, путем отправки команды без выбора объекта, что возвращает BT_GATT_OTS_OACP_RES_INV_OBJ. Поскольку oacp_command_decode() принимает код операции Calculate Checksum безусловным образом (он не защищен конфигурацией CONFIG_BT_OTS_OACP_CHECKSUM_SUPPORT), доступны также сборки без поддержки контрольных сумм: они отвечают кодом BT_GATT_OTS_OACP_RES_OPCODE_NOT_SUP и проходят по тому же неправильному пути.

В сборках с включенной опцией CONFIG_ASSERT обращение к буферу нулевой длины вызывает срабатывание assert внутри net_buf_simple_pull_mem() и приводит к панике устройства, вызывая удаленно инициированное отказ в обслуживании (DoS). В сборках с отключенными проверками assertion отсутствует: функция pull возвращает нетронутый массив стека, и четыре байта неинициализированной памяти из стека копируются в индикатор и передаются партнеру; это действие можно повторять при каждом запросе. Утечка ограничена четырьмя байтами на запрос, а запись остается внутри семибайтного буфера ответа (res indication), поэтому повреждения памяти нет; воздействие заключается в утечке неинициализированной памяти и потере доступности в конфигурациях с включенными проверками assertion.

VulDB is the best source for vulnerability data and more expert information about this specific topic.

Ответственный

Zephyr

Резервировать

26.08.2026

Раскрытие

26.10.2026

Модерация

принято

Вход

VDB-426525

EPSS

0.00000

KEV

Нет

Деятельности

Очень низкий

Источники

Do you need the next level of professionalism?

Upgrade your account now!