CVE-2025-38248
bridge: mcast: ルーターポート設定中のuse-after-freeを修正
- 公開済み
- 2025/07/09
- 更新済み
- 2026/08/05
- CNA の割り当て
- Linux
- 観察された証拠
- 2026/08/08
プライマリ CVSS
nvd · CVSS 3.1
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H低 · 今後 30 日間
- パーセンタイル
- 18.5%
- モデルの日付
- 2026/09/21
EPSS は統計的な推定値であり、確実性や影響の尺度ではありません。 CVSS、KEV ステータス、暴露、環境と組み合わせます。
概要
Linux カーネルにおいて、以下の脆弱性が解決されました: bridge: mcast: ルーターポート設定中のuse-after-freeを修正 ブリッジは、マルチキャストルーターが存在するポートのグローバルリストを維持します。このリストは転送中に参照され、マッチするMDBエントリのメンバーでない場合でも、マルチキャストパケットがこれらのポートに転送されることを保証します。VLAN単位のマルチキャストスヌーピングが有効な場合、各ポートのポート単位マルチキャストコンテキストが無効化され、ポートはグローバルルーターポートリストから削除されます: # ip link add name br1 up type bridge vlan_filtering 1 mcast_snooping 1 # ip link add name dummy1 up master br1 type dummy # ip link set dev dummy1 type bridge_slave mcast_router 2 $ bridge -d mdb show | grep router router ports on br1: dummy1 # ip link set dev br1 type bridge mcast_vlan_snooping 1 $ bridge -d mdb show | grep router しかし、VLAN単位のマルチキャストスヌーピングが有効な場合でも、ポートはグローバルリストに再追加される可能性があります: # ip link set dev dummy1 type bridge_slave mcast_router 0 # ip link set dev dummy1 type bridge_slave mcast_router 2 $ bridge -d mdb show | grep router router ports on br1: dummy1 コミット 4b30ae9adb04 ("net: bridge: mcast: re-implement br_multicast_{enable, disable}_port functions") 以降、VLAN単位のマルチキャストスヌーピングが有効な場合、ポート上のマルチキャスト無効化は{ポート, VLAN}単位のマルチキャストコンテキストを無効化し、ポート単位のコンテキストは無効化しません。その結果、ポートは削除後もグローバルルーターポートリストに残ることになります。これにより、リストが走査されると(例えば、新しいポートをリストに追加するとき)、use-after-free [1] が発生します: # ip link del dev dummy1 # ip link add name dummy2 up master br1 type dummy # ip link set dev dummy2 type bridge_slave mcast_router 2 同様に、VLAN単位のルーターポートリストにも古いエントリが見つかる可能性があります。VLAN単位のマルチキャストスヌーピングが無効な場合、各ポートの{ポート, VLAN}単位のコンテキストが無効化され、ポートはVLAN単位のルーターポートリストから削除されます: # ip link add name br1 up type bridge vlan_filtering 1 mcast_snooping 1 mcast_vlan_snooping 1 # ip link add name dummy1 up master br1 type dummy # bridge vlan add vid 2 dev dummy1 # bridge vlan global set vid 2 dev br1 mcast_snooping 1 # bridge vlan set vid 2 dev dummy1 mcast_router 2 $ bridge vlan global show dev br1 vid 2 | grep router router ports: dummy1 # ip link set dev br1 type bridge mcast_vlan_snooping 0 $ bridge vlan global show dev br1 vid 2 | grep router しかし、VLAN単位のマルチキャストスヌーピングが無効な場合でも、ポートはVLAN単位のリストに再追加される可能性があります: # bridge vlan set vid 2 dev dummy1 mcast_router 0 # bridge vlan set vid 2 dev dummy1 mcast_router 2 $ bridge vlan global show dev br1 vid 2 | grep router router ports: dummy1 VLANがポートから削除されると、VLANでマルチキャストスヌーピングが有効でないため、{ポート, VLAN}単位のマルチキャストコンテキストは無効化されません。その結果、ポートはVLANのメンバーでなくなった後もVLAN単位のルーターポートリストに残ることになります。これにより、リストが走査されると(例えば、新しいポートをリストに追加するとき)、use-after-free [2] が発生します: # ip link add name dummy2 up master br1 type dummy # bridge vlan add vid 2 dev dummy2 # bridge vlan del vid 2 dev dummy1 # bridge vlan set vid 2 dev dummy2 mcast_router 2 これらの問題を修正するため、br_multicast_port_ctx_deinit() 内で、ポートを関連する(グローバルまたはVLAN単位の)ルーターポートリストから削除します。この関数は、ポート削除時にはポート単位のマルチキャストコンテキストで呼び出され、VLAN削除時には{ポート, VLAN}単位のマルチキャストコンテキストで呼び出されます。マルチキャストルータータイマーの削除だけでは不十分であることに注意してください。これは一時的なマルチキャストルーター状態(1または3)のみを処理し、永続的な状態(2)は処理しないためです。 [1] BUG: KASAN: slab-out-of-bounds in br_multicast_add_router.part.0+0x3f1/0x560 Write of size 8 at addr ffff888004a67328 by task ip/384 [...] Call Trace: <TASK> dump_stack ---truncated---
責任ある使用
脆弱性情報は、自分が所有しているシステム、またはテストを許可されているシステムでのみ使用してください。 Kitploit は公開研究メタデータにリンクしており、エクスプロイト コードや悪意のあるペイロードは保存しません。