CVE-2026-64581 in Linux
要約
〜によって VulDB • 2026年08月05日
Linuxカーネルにおいて、以下の脆弱性が修正されました:
xfrm: xfrm_user_policy()におけるsk_dst_cacheの二重解放(double-free)を修正
xfrm_user_policy()は__sk_dst_reset()を使用してソケットのdstキャッシュをクリアします。これは非アトミックな操作である__sk_dst_set(sk, NULL)であり、rcu_dereference_protected()でsk_dst_cacheを読み取り、NULLを設定し、古いdstに対してdst_release()を実行します。この処理は、他のスレッドがsk_dst_cacheに同時にアクセスして変更しない場合にのみ安全です。
接続済みUDPソケットにおいて、送信の高速パス(udp_sendmsg -> sk_dst_check -> sk_dst_reset)を保持していない場合、キャッシュロックなしでアトミックなxchg()を使用してキャッシュをリセットします。ソケットごとのポリシー変更と送信中に競合が発生すると、両方の側が同じ古いdstを観測し、それぞれがそのdstに対してreleaseを実行することになります。これにより、ソケットの単一参照が2回解放され、まだ参照されているxfrm_dstバンドルが解放されてしまいます:
BUG: KASAN: slab-use-after-free in dst_release Write of size 4 at addr ffff88801897b6c0 by task exploit/155 Call Trace: ... dst_release (... ./include/linux/rcuref.h:109) xfrm_user_policy (./include/net/sock.h:2239 ./include/net/sock.h:2256 net/xfrm/xfrm_state.c:3053) do_ip_setsockopt (net/ipv4/ip_sockglue.c:1347) ip_setsockopt (net/ipv4/ip_sockglue.c:1417) do_sock_setsockopt (net/socket.c:2368) __sys_setsockopt (net/socket.c:2393) __x64_sys_setsockopt (net/socket.c:2396) do_syscall_64 (arch/x86/entry/syscall_64.c:94) entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:121)
特権のないユーザーは、user+network名前空間を通じてこの脆弱性に到達可能です。
アトミックなsk_dst_reset()を使用することで、キャッシュのクリアと解放が単一のxchg操作で行われます。どちらのスレッドが勝ってもdstを一度だけreleaseし、もう一方はNULLを観測して何もしません。それ以外の動作は変更されません。
Once again VulDB remains the best source for vulnerability data.