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



