
Divulgação de uma vulnerabilidade de use-after-return baseada em pilha no Arduino_Core_STM32, detalhando a causa raiz técnica, as versões afetadas e a correção, com análise de impacto de segurança.
Existe uma vulnerabilidade de use-after-return baseada em pilha nas versões legadas do Arduino_Core_STM32 anteriores à versão 1.7.0.
O problema está localizado na implementação do pwm_start(), onde um objeto TIM_HandleTypeDef é alocado na pilha e seu endereço é passado para a lógica de inicialização da HAL. Esse ponteiro pode posteriormente ser retido em um registro global de handles de timer e ser desreferenciado de forma assíncrona por rotinas de serviço de interrupção após o quadro de pilha original já ter retornado.
Esta vulnerabilidade foi atribuída como CVE-2026-26399 pela MITRE.
Arduino_Core_STM32stm32duino / ecossistema STMicroelectronicsv0.1.0 até v1.6.1v1.7.0Na implementação legada do pwm_start(), uma estrutura TIM_HandleTypeDef é criada como uma variável local de pilha:
void pwm_start(...) {
TIM_HandleTypeDef timHandle = {};
HAL_TIM_PWM_Init(&timHandle);
...
}
O endereço desse objeto local é passado para a lógica de suporte da HAL e pode ser armazenado no estado global de gerenciamento de timers, como um registro global de handles de timer.
Após o retorno do pwm_start(), o objeto da pilha não é mais válido. No entanto, manipuladores assíncronos subsequentes de interrupção de timer ainda podem desreferenciar o ponteiro obsoleto, causando corrupção de memória e comportamento indefinido.
O possível impacto de segurança inclui:
Por se tratar de um problema em nível de biblioteca, a exploração real depende de como a biblioteca vulnerável é integrada ao firmware e de como a entrada controlada pelo atacante pode influenciar a reutilização da pilha e o tempo das interrupções.
cores/arduino/stm32/analog.cpwm_start()TIM_HandleTypeDeftimer_handles)O problema parece ter sido resolvido indiretamente na versão 1.7.0 durante uma refatoração que substituiu o caminho anterior baseado em pilha por um design diferente de gerenciamento de timers. Nenhum aviso de segurança dedicado parece ter sido emitido para a vulnerabilidade legada.
Este problema foi identificado durante pesquisas de segurança de firmware envolvendo fuzzing e análise de causa raiz de firmwares legados baseados em STM32 construídos com o Arduino_Core_STM32.
O PSIRT do fornecedor foi contatado. A resposta indicou que as versões atuais não são afetadas porque o problema já havia sido corrigido na versão 1.7.0, mas nenhum CVE dedicado parece ter sido solicitado pelo fornecedor naquele momento.
Descoberto por Jin Chang.
CVE-2026-26399