
Раскрытие уязвимости типа use-after-return на основе стека в Arduino_Core_STM32 с описанием технической первопричины, затронутых версий и исправления, а также анализом влияния на безопасность.
В устаревших версиях Arduino_Core_STM32 до версии 1.7.0 существует уязвимость типа use-after-return на основе стека.
Проблема находится в реализации pwm_start(), где объект TIM_HandleTypeDef выделяется в стеке, а его адрес передается в логику инициализации HAL. Этот указатель впоследствии может сохраняться в глобальном реестре обработчиков таймеров и асинхронно разыменовываться подпрограммами обработки прерываний после того, как исходный стековый кадр уже был возвращен.
Данной уязвимости присвоен идентификатор CVE-2026-26399 организацией MITRE.
Arduino_Core_STM32stm32duino / экосистема STMicroelectronicsv0.1.0 по v1.6.1v1.7.0В устаревшей реализации pwm_start() структура TIM_HandleTypeDef создается как локальная переменная стека:
void pwm_start(...) {
TIM_HandleTypeDef timHandle = {};
HAL_TIM_PWM_Init(&timHandle);
...
}
Адрес этого локального объекта передается в вспомогательную логику HAL и может сохраняться в глобальном состоянии управления таймерами, например, в глобальном реестре обработчиков таймеров.
После возврата из pwm_start() объект в стеке становится недействительным. Однако последующие асинхронные обработчики прерываний таймера могут по-прежнему разыменовывать устаревший указатель, что приводит к повреждению памяти и неопределенному поведению.
Возможное влияние на безопасность включает:
Поскольку это проблема на уровне библиотеки, реальная эксплуатируемость зависит от того, как уязвимая библиотека интегрирована в прошивку и как входные данные, контролируемые злоумышленником, могут влиять на повторное использование стека и тайминг прерываний.
cores/arduino/stm32/analog.cpwm_start()TIM_HandleTypeDeftimer_handles)Проблема, по-видимому, была косвенно устранена в версии 1.7.0 в ходе рефакторинга, который заменил предыдущий путь обработки на основе стека другой схемой управления таймерами. Похоже, что для устаревшей уязвимости не было выпущено отдельного бюллетеня по безопасности.
Эта проблема была выявлена в ходе исследований безопасности прошивок, включающих фаззинг и анализ первопричин устаревших прошивок на базе STM32, собранных на Arduino_Core_STM32.
С PSIRT поставщика была установлена связь. В ответе указывалось, что текущие версии не затронуты, поскольку проблема уже была исправлена в версии 1.7.0, однако на тот момент поставщик, по-видимому, не запрашивал отдельный идентификатор CVE.
Обнаружено Jin Chang.
CVE-2026-26399