LinuxカーネルのWireGuardに削除済みピア処理の不備が原因でuse-after-freeが発生する脆弱性
タイトル LinuxカーネルのWireGuardに削除済みピア処理の不備が原因でuse-after-freeが発生する脆弱性
概要

LinuxカーネルにおけるWireGuardの脆弱性は、ネットリンク処理でis_deadではなく空リストのチェックが行われていたため、削除されたピアを誤って処理してしまう可能性があるという問題が修正されました。この問題は、すべてのピアがwg_peer_remove_all()によって一括削除された場合でも、削除済みのピアが一時的なリストに残り、netlink dumpでこれらのピアを誤ってダンプしてしまうことから発生します。今回の修正では、空リストのチェックではなくpeer->is_deadフラグを使用して削除済みのピアかどうかを判定し、より確実なチェックが可能となりました。また、ロックの取得に関するアサーション位置も適切に調整されました。この問題は特定のスクリプトの実行によって再現でき、KASANによるuse-after-freeの警告が発生します。

想定される影響 当該ソフトウェアが扱う全ての情報が外部に漏れる可能性があります。 また、当該ソフトウェアが扱う全ての情報が書き換えられる可能性があります。 さらに、当該ソフトウェアが完全に停止する可能性があります。 そして、この脆弱性を悪用した攻撃の影響は、他のソフトウェアには及びません。 
対策

正式な対策が公開されています。ベンダ情報を参照して適切な対策を実施してください。

公表日 2024年5月1日0:00
登録日 2025年12月25日17:01
最終更新日 2025年12月25日17:01
CVSS3.0 : 重要
スコア 7.8
ベクター CVSS:3.0/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
影響を受けるシステム
Debian
Debian GNU/Linux 10.0
Linux
Linux Kernel 5.11 から 5.15.154 未満
Linux Kernel 5.16 から 6.1.84 未満
Linux Kernel 5.6 から 5.10.215 未満
Linux Kernel 6.2 から 6.6.24 未満
Linux Kernel 6.7 から 6.7.12 未満
Linux Kernel 6.8 から 6.8.3 未満
CVE (情報セキュリティ 共通脆弱性識別子)
CWE (共通脆弱性タイプ一覧)
ベンダー情報
その他
変更履歴
No 変更内容 変更日
1 [2025年12月25日]
  掲載
2025年12月25日17:01

NVD脆弱性情報
CVE-2024-26951
概要

In the Linux kernel, the following vulnerability has been resolved:

wireguard: netlink: check for dangling peer via is_dead instead of empty list

If all peers are removed via wg_peer_remove_all(), rather than setting
peer_list to empty, the peer is added to a temporary list with a head on
the stack of wg_peer_remove_all(). If a netlink dump is resumed and the
cursored peer is one that has been removed via wg_peer_remove_all(), it
will iterate from that peer and then attempt to dump freed peers.

Fix this by instead checking peer->is_dead, which was explictly created
for this purpose. Also move up the device_update_lock lockdep assertion,
since reading is_dead relies on that.

It can be reproduced by a small script like:

echo "Setting config..."
ip link add dev wg0 type wireguard
wg setconf wg0 /big-config
(
while true; do
echo "Showing config..."
wg showconf wg0 > /dev/null
done
) &
sleep 4
wg setconf wg0 <(printf "[Peer]\nPublicKey=$(wg genkey)\n")

Resulting in:

BUG: KASAN: slab-use-after-free in __lock_acquire+0x182a/0x1b20
Read of size 8 at addr ffff88811956ec70 by task wg/59
CPU: 2 PID: 59 Comm: wg Not tainted 6.8.0-rc2-debug+ #5
Call Trace:
<TASK>
dump_stack_lvl+0x47/0x70
print_address_description.constprop.0+0x2c/0x380
print_report+0xab/0x250
kasan_report+0xba/0xf0
__lock_acquire+0x182a/0x1b20
lock_acquire+0x191/0x4b0
down_read+0x80/0x440
get_peer+0x140/0xcb0
wg_get_device_dump+0x471/0x1130

公表日 2024年5月1日15:15
登録日 2024年5月1日20:00
最終更新日 2024年11月21日18:03
関連情報、対策とツール
共通脆弱性一覧