
Divulgation d'une vulnérabilité use-after-return basée sur la pile dans Arduino_Core_STM32, détaillant la cause racine technique, les versions concernées et le correctif, avec une analyse de l'impact sur la sécurité.
Une vulnérabilité de type use-after-return basée sur la pile existe dans les versions héritées de Arduino_Core_STM32 antérieures à la version 1.7.0.
Le problème se situe dans l'implémentation de pwm_start(), où un objet TIM_HandleTypeDef est alloué sur la pile et son adresse est transmise à la logique d'initialisation HAL. Ce pointeur peut ensuite être conservé dans un registre global de gestion des timers et être déréférencé de manière asynchrone par les routines de service d'interruption après que la trame de pile d'origine a déjà été retournée.
Cette vulnérabilité a été identifiée sous le numéro CVE-2026-26399 par MITRE.
Arduino_Core_STM32stm32duino / écosystème STMicroelectronicsv0.1.0 à v1.6.1v1.7.0Dans l'implémentation héritée de pwm_start(), une structure TIM_HandleTypeDef est créée comme variable locale sur la pile :
void pwm_start(...) {
TIM_HandleTypeDef timHandle = {};
HAL_TIM_PWM_Init(&timHandle);
...
}
L'adresse de cet objet local est transmise à la logique de support HAL et peut être stockée dans l'état global de gestion des timers, comme un registre global de gestion des handles de timers.
Après le retour de pwm_start(), l'objet sur la pile n'est plus valide. Cependant, les gestionnaires d'interruption de timer asynchrones ultérieurs peuvent toujours déréférencer le pointeur obsolète, provoquant une corruption mémoire et un comportement indéfini.
L'impact de sécurité possible comprend :
Comme il s'agit d'un problème au niveau de la bibliothèque, l'exploitabilité réelle dépend de la manière dont la bibliothèque vulnérable est intégrée dans le firmware et de la façon dont les entrées contrôlées par l'attaquant peuvent influencer la réutilisation de la pile et le timing des interruptions.
cores/arduino/stm32/analog.cpwm_start()TIM_HandleTypeDeftimer_handles)Le problème semble avoir été résolu indirectement dans la version 1.7.0 lors d'une refactorisation qui a remplacé le chemin de gestion basé sur la pile précédent par une conception différente de gestion des timers. Aucun avis de sécurité dédié ne semble avoir été publié pour cette vulnérabilité héritée.
Ce problème a été identifié lors de recherches de sécurité sur des firmwares impliquant du fuzzing et une analyse des causes racines de firmwares STM32 hérités construits sur Arduino_Core_STM32.
Le PSIRT de l'éditeur a été contacté. La réponse a indiqué que les versions actuelles ne sont pas concernées car le problème avait déjà été corrigé dans la version 1.7.0, mais aucun CVE dédié ne semble avoir été demandé par l'éditeur à ce moment-là.
Découvert par Jin Chang.
CVE-2026-26399