【活用ガイド】

JVNDB-2026-022665

Zephyr ProjectのZephyrにおける二重解放に関する脆弱性

概要

Zephyrのnet_bufライブラリ(lib/net_buf/buf.c)は、参照カウントであるヘッダーごとのbuf->refと各可変/ヒープデータ割り当ての先頭にあるデータブロックごとのref_countの両方を、非原子の通常のC演算子(buf->ref++、if (--buf->ref > 0)、if (--(*ref_count)))で操作していました。このAPIは自己同期型として文書化されており、呼び出し元はスレッド間で1つのバッファを共有(例:k_fifo経由)でき、各所有者はロックなしで独立してnet_buf_unref()を呼び出すことができます。実際の並行動作(SMPや、非原子ロードとストアの間に単一コアでプリエンプションが発生し、別のコンテキストが同じバッファをアンリファレンスする場合)では、2つの所有者が同じ以前の参照値を観測し、両者とも最後の参照だと判断してしまいます。ヒープ/可変データプール(mem_pool_data_unref/heap_data_unref、zbusメッセージのサブスクライバー、CONFIG_NET_BUF_FIXED_DATA_SIZE=n時のIPスタックのRX/TXバッファ、capture、wireguard、ISO-TP、usbipで使用)においては、同じブロックの二重のk_heap_free()/k_free()を引き起こし、ヒープのメタデータ破損およびヒープ強化用Poisonパターンに対するUse-after-freeを招きます。ヘッダーごとの参照カウントでは、任意のプールタイプ(固定データプールを含むBluetoothやネットワーキングでの使用)でバッファがプールのフリーLIFOに2回戻され、フリーリストが破損し、後の割り当てで同じバッファが2つの所有者に渡されてしまいます。修正では、buf->refをatomic_tサイズのunionに重ねて両方の参照カウントをatomic_inc/atomic_decに変換し、データブロックの参照カウントをuint8_tからatomic_tに変更しました。影響は真の並行動作と、複数の独立したunref呼び出し元が1つのバッファを共有するアプリケーションアーキテクチャに限定されます。トリガーはパケット内容ではなく参照カウントおよびタイミングレースのため、外部攻撃者がレースウィンドウに与える影響は最小限の間接的なものに留まります。v4.4.0までのすべてのZephyrリリースに影響があります。
CVSS による深刻度 (CVSS とは?)

CVSS v3 による深刻度
基本値: 8.1 (重要) [NVD値]
  • 攻撃元区分: ネットワーク
  • 攻撃条件の複雑さ: 高
  • 攻撃に必要な特権レベル: 不要
  • 利用者の関与: 不要
  • 影響の想定範囲: 変更なし
  • 機密性への影響(C): 高
  • 完全性への影響(I): 高
  • 可用性への影響(A): 高
影響を受けるシステム


Zephyr Project
  • Zephyr 2.7.0 から 4.4.1

本脆弱性の影響を受ける製品の詳細については、ベンダ情報および参考情報をご確認ください。
想定される影響

・当該ソフトウェアが扱う全ての情報が外部に漏れる可能性があります。
・当該ソフトウェアが扱う全ての情報が書き換えられる可能性があります。
・当該ソフトウェアが完全に停止する可能性があります。
対策

ベンダ情報を参照して適切な対策を実施してください。
ベンダ情報

GitHub
CWEによる脆弱性タイプ一覧  CWEとは?

  1. 二重解放(CWE-415) [その他]
共通脆弱性識別子(CVE)  CVEとは?

  1. CVE-2026-10653
参考情報

  1. National Vulnerability Database (NVD) : CVE-2026-10653
  2. 関連文書 : net_buf: make reference counts atomic  zephyrproject-rtos/zephyr@9bb2878  GitHub
更新履歴

  • [2026年07月08日]
      掲載