
Divulgazione di una vulnerabilità use-after-return basata su stack in Arduino_Core_STM32, con dettagli sulla causa tecnica principale, le versioni interessate e la correzione, inclusa un'analisi dell'impatto sulla sicurezza.
Esiste una vulnerabilità di use-after-return basata su stack nelle versioni legacy di Arduino_Core_STM32 precedenti alla versione 1.7.0.
Il problema si trova nell'implementazione di pwm_start(), dove un oggetto TIM_HandleTypeDef viene allocato sullo stack e il suo indirizzo viene passato alla logica di inizializzazione HAL. Quel puntatore può successivamente essere conservato in un registro globale di handle timer e dereferenziato in modo asincrono dalle routine di servizio degli interrupt dopo che il frame di stack originale è già stato restituito.
A questa vulnerabilità è stato assegnato CVE-2026-26399 da MITRE.
Arduino_Core_STM32stm32duino / ecosistema STMicroelectronicsv0.1.0 a v1.6.1v1.7.0Nell'implementazione legacy di pwm_start(), una struttura TIM_HandleTypeDef viene creata come variabile locale di stack:
void pwm_start(...) {
TIM_HandleTypeDef timHandle = {};
HAL_TIM_PWM_Init(&timHandle);
...
}
L'indirizzo di questo oggetto locale viene passato alla logica di supporto HAL e può essere memorizzato nello stato globale di gestione dei timer, come un registro globale di handle timer.
Dopo che pwm_start() restituisce il controllo, l'oggetto di stack non è più valido. Tuttavia, i successivi gestori di interrupt timer asincroni possono ancora dereferenziare il puntatore obsoleto, causando corruzione della memoria e comportamento indefinito.
Il possibile impatto sulla sicurezza include:
Poiché si tratta di un problema a livello di libreria, la reale sfruttabilità dipende da come la libreria vulnerabile viene integrata nel firmware e da come l'input controllato dall'attaccante può influenzare il riutilizzo dello stack e la temporizzazione degli interrupt.
cores/arduino/stm32/analog.cpwm_start()TIM_HandleTypeDeftimer_handles)Il problema sembra essere stato risolto indirettamente nella versione 1.7.0 durante una refactoring che ha sostituito il precedente percorso di gestione basato su stack con un diverso design di gestione dei timer. Non risulta essere stato emesso alcun advisory di sicurezza dedicato per la vulnerabilità legacy.
Questo problema è stato identificato durante una ricerca sulla sicurezza del firmware che ha coinvolto fuzzing e analisi delle cause profonde di firmware legacy basato su STM32 costruito su Arduino_Core_STM32.
È stato contattato il PSIRT del vendor. La risposta ha indicato che le versioni attuali non sono interessate perché il problema era già stato risolto nella versione 1.7.0, ma all'epoca non risulta che il vendor abbia richiesto un CVE dedicato.
Scoperto da Jin Chang.
CVE-2026-26399