
Arduino_Core_STM32의 스택 기반 use-after-return 취약점 공개로, 기술적 근본 원인, 영향을 받는 버전, 수정 사항 및 보안 영향 분석을 상세히 다룹니다.
Arduino_Core_STM32의 레거시 버전(버전 1.7.0 이전)에는 스택 기반 use-after-return 취약점이 존재합니다.
이 문제는 pwm_start() 구현에 있으며, TIM_HandleTypeDef 객체가 스택에 할당되고 해당 주소가 HAL 초기화 로직으로 전달됩니다. 이 포인터는 이후 전역 타이머 핸들 레지스트리에 보관되어 원래 스택 프레임이 이미 반환된 후 인터럽트 서비스 루틴에 의해 비동기적으로 역참조될 수 있습니다.
이 취약점은 MITRE에 의해 CVE-2026-26399로 지정되었습니다.
Arduino_Core_STM32stm32duino / STMicroelectronics 생태계v0.1.0 ~ v1.6.1v1.7.0pwm_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에서 기존의 스택 기반 처리 경로를 다른 타이머 관리 설계로 대체하는 리팩토링 과정에서 간접적으로 해결된 것으로 보입니다. 레거시 취약점에 대한 전용 보안 권고는 발행되지 않은 것으로 보입니다.
이 문제는 Arduino_Core_STM32 기반의 레거시 STM32 펌웨어에 대한 퍼징 및 근본 원인 분석을 포함한 펌웨어 보안 연구 중에 식별되었습니다.
공급업체 PSIRT에 연락했습니다. 응답에 따르면 이 문제가 버전 1.7.0에서 이미 수정되었기 때문에 현재 버전은 영향을 받지 않지만, 당시 공급업체가 전용 CVE를 요청하지 않은 것으로 보입니다.
Jin Chang이 발견했습니다.
CVE-2026-26399