
Divulgación de una vulnerabilidad de use-after-return basada en pila en Arduino_Core_STM32, que detalla la causa raíz técnica, las versiones afectadas y la corrección, con análisis del impacto en la seguridad.
Existe una vulnerabilidad de uso-after-return basada en pila en las versiones heredadas de Arduino_Core_STM32 anteriores a la versión 1.7.0.
El problema se encuentra en la implementación de pwm_start(), donde un objeto TIM_HandleTypeDef se asigna en la pila y su dirección se pasa a la lógica de inicialización de HAL. Ese puntero puede ser retenido posteriormente en un registro global de manejadores de temporizadores y ser desreferenciado de forma asíncrona por rutinas de servicio de interrupción después de que el marco de pila original ya haya retornado.
Esta vulnerabilidad ha sido asignada como CVE-2026-26399 por MITRE.
Arduino_Core_STM32stm32duino / ecosistema STMicroelectronicsv0.1.0 hasta v1.6.1v1.7.0En la implementación heredada de pwm_start(), se crea una estructura TIM_HandleTypeDef como variable local de pila:
void pwm_start(...) {
TIM_HandleTypeDef timHandle = {};
HAL_TIM_PWM_Init(&timHandle);
...
}
La dirección de este objeto local se pasa a la lógica de soporte de HAL y puede almacenarse en el estado global de gestión de temporizadores, como un registro global de manejadores de temporizadores.
Después de que pwm_start() retorna, el objeto de pila ya no es válido. Sin embargo, los manejadores de interrupción de temporizador asíncronos posteriores pueden seguir desreferenciando el puntero obsoleto, lo que provoca corrupción de memoria y comportamiento indefinido.
El posible impacto de seguridad incluye:
Debido a que se trata de un problema a nivel de biblioteca, la explotabilidad real depende de cómo se integre la biblioteca vulnerable en el firmware y de cómo la entrada controlada por el atacante pueda influir en la reutilización de la pila y en la sincronización de las interrupciones.
cores/arduino/stm32/analog.cpwm_start()TIM_HandleTypeDeftimer_handles)El problema parece haberse resuelto indirectamente en la versión 1.7.0 durante una refactorización que reemplazó la ruta de manejo basada en pila anterior por un diseño diferente de gestión de temporizadores. No parece haberse emitido ningún aviso de seguridad específico para la vulnerabilidad heredada.
Este problema se identificó durante una investigación de seguridad de firmware que implicó fuzzing y análisis de causa raíz de firmware heredado basado en STM32 construido sobre Arduino_Core_STM32.
Se contactó con el PSIRT del proveedor. La respuesta indicó que las versiones actuales no están afectadas porque el problema ya se había corregido en la versión 1.7.0, pero el proveedor no parece haber solicitado un CVE específico en ese momento.
Descubierto por Jin Chang.
CVE-2026-26399