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値]
| |
| 影響を受けるシステム | |
|
| |
Zephyr Project | |
本脆弱性の影響を受ける製品の詳細については、ベンダ情報および参考情報をご確認ください。 | |
| 想定される影響 | |
・当該ソフトウェアが扱う全ての情報が外部に漏れる可能性があります。 | |
| 対策 | |
ベンダ情報を参照して適切な対策を実施してください。 | |
| ベンダ情報 | |
GitHub | |
| CWEによる脆弱性タイプ一覧 CWEとは? | |
| |
| 共通脆弱性識別子(CVE) CVEとは? | |
|
| |
| 参考情報 | |
| |
| 更新履歴 | |
|
| 公表日 | 2026/06/30 |
| 登録日 | 2026/07/08 |
| 最終更新日 | 2026/07/08 |



