【活用ガイド】

JVNDB-2026-022668

Zephyr ProjectのZephyrにおける解放済みメモリの使用に関する脆弱性

概要

ZephyrのBSDソケットのgetaddrinfo()実装(subsys/net/lib/sockets/getaddrinfo.c)は、スタック上に確保された状態オブジェクト(struct getaddrinfo_state ai_state)へのポインタを非同期DNSリゾルバクエリのuser_dataとして渡しています。ソケットレイヤはリゾルバの各クエリごとのタイムアウトよりわずかに長く設定されたタイムアウト付きのセマフォを待機します。しかし、そのセマフォ待機がタイムアウト(-EAGAIN)になることがあります。これは、リゾルバのタイムアウト処理がワークキューの競合で遅れる場合や、CONFIG_NET_SOCKETS_DNS_TIMEOUTがCONFIG_NET_SOCKETS_DNS_BACKOFF_INTERVALを超える複数リトライ構成のドキュメント化されたケースで発生します。修正前のコードは以前のクエリをキャンセルせず、セマフォもリセットせずにクエリを再試行(goto again)していました。以前のクエリのスロットはリゾルバでそのコールバックとスタックポインタをuser_dataとして保持したままであり、ai_stateのdns_idが上書きされてしまい、古いクエリはキャンセル不能となっていました。その後のDNS応答はUDP経由で16ビットのトランザクションID(dispatcher_cb()/dns_read()内)により照合されるか、リゾルバ自身の遅延したクエリタイムアウト処理によってdns_resolve_cb()がスコープ外のスタックフレームに対して呼び出され、古いポインタを通じて状態のstatus、idx、ai_arr[]、およびk_sem_give()を書き込んでしまいます。起動する応答はネットワーク経由で送信されるもので、16ビットのIDはオンパスまたはオフパス攻撃者によって偽装・リプレイ可能であるため、これはネットワークから影響を受けうるuse-after-return脆弱性となります。この脆弱性は再利用されたスタックメモリの破損を招き、クラッシュやサービス拒否、メモリ破損を引き起こす可能性があります。本修正では、再試行前に名前とタイプでタイムアウトしたクエリをキャンセルし、ローカルのセマフォをリセットすることで古いコールバック経路を排除します。影響を受けるバージョンはZephyr v4.0.0からv4.4.0です。
CVSS による深刻度 (CVSS とは?)

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


Zephyr Project
  • Zephyr 4.0.0 から 4.4.1

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

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

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

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

  1. 解放済みメモリの使用(CWE-416) [その他]
共通脆弱性識別子(CVE)  CVEとは?

  1. CVE-2026-10646
参考情報

  1. National Vulnerability Database (NVD) : CVE-2026-10646
  2. 関連文書 : net: sockets: getaddrinfo: cancel timed-out DNS query before retry  zephyrproject-rtos/zephyr@cd27da5  GitHub
更新履歴

  • [2026年07月08日]
      掲載