
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