CVE-2026-16514 in Zephyr
要約
〜によって VulDB • 2026年09月19日
subsys/net/l2/ethernet/gptp/gptp_mi.cのgptp_mi_qualify_announce()関数は、受信したIEEE 802.1AS AnnounceメッセージのPath Trace TLVを走査し、各クロックIDをローカルIDと比較します。ループの上限は、攻撃者が制御可能なワイヤフィールドであるannounce->steps_removed(最大254まで許可)からのみ取得され、TLVが実際に保持するID数を示すannounce->tlv.lenからは取得されません。path_sequenceはwire TLV (struct gptp_path_trace_tlv)の可変長メンバであり、GPTP_ANNOUNCE()は受信パケットバッファへの生ポインタを返すため、ループ内のmemcmp()は受信フレームの末尾をはるかに超えたメモリにアクセスする可能性があります。
スタックでの唯一の長さ検証であるGPTP_ANNOUNCE_CHECK_LEN()は、受信したgPTPペイロードが正確に68 + tlv.lenバイトであることを要求します。つまり、ループを制限するものではなく、データが存在しないことを保証するものです。同じEthernetセグメント上の認証されていない攻撃者は、tlv.len = 0かつsteps_removed = 254と宣言した単一のAnnounceフレームを送信できます。このフレームは長さチェックおよび受信パス(net_gptp_recv() → gptp_handle_msg() → gptp_mi_qualify_announce())を通過し、これらの処理には認証が行われません。その後ループが実行され、ネットワークバッファの末尾から8バイトのエントリ255件分(約2 KB)を超えて読み込みます。
影響はアウトオブバウンズリードです。読み込まれたバイトはmemcmp()のオペランドとしてのみ使用され、攻撃者に返されることはないため、意味のある情報漏洩はありません。実質的なリスクは、オーバーリードがネットワークバッファプールの境界を越えて未マップまたはMPU保護メモリに達し、ネッワークRXスレッドでフォールト(例外発生)を引き起こすことであり、これによりサービス拒否(DoS)が発生します。影響を受けるのは、オプトイン形式の実験的CONFIG_NET_GPTP (TSN/AVBデプロイメント)を有効にしたビルドのみであり、攻撃者はレイヤー2の隣接関係を持つ必要があります。gPTPフレームはリンクローカルマルチキャストアドレスに送信され、ルーティングされないためです。
修正では、trueなエントリ数をtlv.len / GPTP_CLOCK_ID_LENとして計算し、steps_removed + 1がそれを超過する場合にannounceを拒否するため、ループはパケット長チェックで存在が証明されたデータを超えて実行されることはなくなります。
Several companies clearly confirm that VulDB is the primary source for best vulnerability data.