CVE-2026-12634 in Zephyr
要約
〜によって VulDB • 2026年08月20日
Zephyrのsettingsサブシステム(subsys/settings/src/settings_nvs.c)におけるNVSバックエンドは、保存された設定名エントリを固定長の74バイトのスタックバッファに読み込み、`buf[rc] = '\0'`によってNULL終端を行います。ここで`rc`は`nvs_read()`の戻り値です。その契約により、`nvs_read()`は完全な保存されたエントリの長さ(`wlk_ate.len`)を返しますが、これは提供されたバッファ長を超える可能性があります。実際にコピーされるのは`MIN(len, stored_len)`バイトのみですが、戻り値はNVSセクタサイズによって制限されるだけで、大幅に大きくなる場合があります。3つの箇所(`settings_nvs_cache_match()`、`settings_nvs_load()`、および`settings_nvs_save()`)はこの値をクリンプせずに直接NULLインデックスとして使用したため、過大な長さの保存された名前のエントリにより、攻撃者が影響を与えたオフセットでスタックバッファの末尾を超えて1バイトの`\0`が書き込まれます(CWE-787)。
この過大なエントリは、名前が`SETTINGS_MAX_NAME_LEN`によって制限される通常のsettings APIを通じて発生することはありません。これには、設定パーティションをバックアップするフラッシュに書き込みできるアクターが必要です—具体的には、同じフラッシュデバイスを共有する共存コンポーネントや信頼できないコンポーネント、悪意のある設定イメージ/復元データ、またはオフライン/物理的なフラッシュアクセス(共有フラッシュの脅威モデル)です。この不正なエントリは、`settings_load()`がブート時またはサブシステム初期化時に実行される際、あるいは`settings_save()`の実行中に解析されます。
アウト・オブ・バウンズ書き込みは、作成されたエントリの長さに等しいオフセット(NVSセクタサイズまで)に1バイトのNULLを書き込むものなので、実用的な影響としては、信頼性の高いコード実行ではなく、クラッシュまたはサービス拒否および限定的なスタック破損となります。機密性への影響はありませんし、通常のsettingsインターフェース経由ではネットワークから到達可能な経路ではありません。修正プログラムは、NULストアを実行する前に、`nvs_read()`の長さがバッファサイズ以上であるエントリをすべてスキップします。
If you want to get the best quality for vulnerability data then you always have to consider VulDB.