Debian等の複数ベンダの製品における解放済みメモリの使用に関する脆弱性
タイトル Debian等の複数ベンダの製品における解放済みメモリの使用に関する脆弱性
概要

Linuxカーネルにおいて、以下の脆弱性が修正されました。tcp: tcp_twsk_unique()内でrefcount_inc_not_zero()を使用します。Anderson Nascimentoは、tcp_twsk_unique()におけるUse-after-freeの脆弱性を詳細な解析とともに報告しました。コミットec94c2696f0b("tcp/dccp: timewaitハッシュダンスのための1回のアトミック操作を回避")以降、inet_twsk_hashdance()はTIME-WAITソケットをehashに入れ、バケットロックを解放した後にsk_refcntを設定しています。したがって、connect()中に他のスレッドがポートの再利用を試み、refcntが0のTIME-WAITソケットに対してtcp_twsk_unique()内でsock_hold()を呼び出す可能性がある小さな競合状態があります。もしそれが発生すると、tcp_twsk_unique()で取得したrefcntが上書きされ、sock_put()がアンダーフローを引き起こし、他の場所で実際のUse-after-freeを誘発します。Use-after-freeを避けるために、tcp_twsk_unique()内でrefcount_inc_not_zero()を使用し、falseを返した場合はポートの再利用を諦める必要があります。[0]: refcount_t: 0への加算によるuse-after-freeが発生します。警告: CPU: 0 PID: 1039313 at lib/refcount.c:25 refcount_warn_saturate+0xe5/0x110 CPU: 0 PID: 1039313 コマンド: trigger このカーネルは未改造ではありません。バージョンは6.8.6-200.fc39.x86_64 #1です。ハードウェア名はVMware, Inc. VMware20,1/440BX Desktop Reference Platformで、BIOSはVMW201.00V.21805430.B64.2305221830(2023年5月22日)です。RIPは0010:refcount_warn_saturate+0xe5/0x110です。以下は省略し、詳細なコールトレース等があります。

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

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

公表日 2024年5月30日0:00
登録日 2026年1月27日17:38
最終更新日 2026年1月27日17:38
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 4.16 以上 4.19.314 未満
Linux Kernel 4.20 以上 5.4.276 未満
Linux Kernel 5.11 以上 5.15.159 未満
Linux Kernel 5.16 以上 6.1.91 未満
Linux Kernel 5.5 以上 5.10.217 未満
Linux Kernel 6.2 以上 6.6.31 未満
Linux Kernel 6.7 以上 6.8.10 未満
Linux Kernel 6.9
CVE (情報セキュリティ 共通脆弱性識別子)
CWE (共通脆弱性タイプ一覧)
ベンダー情報
その他
変更履歴
No 変更内容 変更日
1 [2026年01月27日]
  掲載
2026年1月27日17:38

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

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

tcp: Use refcount_inc_not_zero() in tcp_twsk_unique().

Anderson Nascimento reported a use-after-free splat in tcp_twsk_unique()
with nice analysis.

Since commit ec94c2696f0b ("tcp/dccp: avoid one atomic operation for
timewait hashdance"), inet_twsk_hashdance() sets TIME-WAIT socket's
sk_refcnt after putting it into ehash and releasing the bucket lock.

Thus, there is a small race window where other threads could try to
reuse the port during connect() and call sock_hold() in tcp_twsk_unique()
for the TIME-WAIT socket with zero refcnt.

If that happens, the refcnt taken by tcp_twsk_unique() is overwritten
and sock_put() will cause underflow, triggering a real use-after-free
somewhere else.

To avoid the use-after-free, we need to use refcount_inc_not_zero() in
tcp_twsk_unique() and give up on reusing the port if it returns false.

[0]:
refcount_t: addition on 0; use-after-free.
WARNING: CPU: 0 PID: 1039313 at lib/refcount.c:25 refcount_warn_saturate+0xe5/0x110
CPU: 0 PID: 1039313 Comm: trigger Not tainted 6.8.6-200.fc39.x86_64 #1
Hardware name: VMware, Inc. VMware20,1/440BX Desktop Reference Platform, BIOS VMW201.00V.21805430.B64.2305221830 05/22/2023
RIP: 0010:refcount_warn_saturate+0xe5/0x110
Code: 42 8e ff 0f 0b c3 cc cc cc cc 80 3d aa 13 ea 01 00 0f 85 5e ff ff ff 48 c7 c7 f8 8e b7 82 c6 05 96 13 ea 01 01 e8 7b 42 8e ff <0f> 0b c3 cc cc cc cc 48 c7 c7 50 8f b7 82 c6 05 7a 13 ea 01 01 e8
RSP: 0018:ffffc90006b43b60 EFLAGS: 00010282
RAX: 0000000000000000 RBX: ffff888009bb3ef0 RCX: 0000000000000027
RDX: ffff88807be218c8 RSI: 0000000000000001 RDI: ffff88807be218c0
RBP: 0000000000069d70 R08: 0000000000000000 R09: ffffc90006b439f0
R10: ffffc90006b439e8 R11: 0000000000000003 R12: ffff8880029ede84
R13: 0000000000004e20 R14: ffffffff84356dc0 R15: ffff888009bb3ef0
FS: 00007f62c10926c0(0000) GS:ffff88807be00000(0000) knlGS:0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 0000000020ccb000 CR3: 000000004628c005 CR4: 0000000000f70ef0
PKRU: 55555554
Call Trace:
<TASK>
? refcount_warn_saturate+0xe5/0x110
? __warn+0x81/0x130
? refcount_warn_saturate+0xe5/0x110
? report_bug+0x171/0x1a0
? refcount_warn_saturate+0xe5/0x110
? handle_bug+0x3c/0x80
? exc_invalid_op+0x17/0x70
? asm_exc_invalid_op+0x1a/0x20
? refcount_warn_saturate+0xe5/0x110
tcp_twsk_unique+0x186/0x190
__inet_check_established+0x176/0x2d0
__inet_hash_connect+0x74/0x7d0
? __pfx___inet_check_established+0x10/0x10
tcp_v4_connect+0x278/0x530
__inet_stream_connect+0x10f/0x3d0
inet_stream_connect+0x3a/0x60
__sys_connect+0xa8/0xd0
__x64_sys_connect+0x18/0x20
do_syscall_64+0x83/0x170
entry_SYSCALL_64_after_hwframe+0x78/0x80
RIP: 0033:0x7f62c11a885d
Code: ff c3 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f 1e fa 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d a3 45 0c 00 f7 d8 64 89 01 48
RSP: 002b:00007f62c1091e58 EFLAGS: 00000296 ORIG_RAX: 000000000000002a
RAX: ffffffffffffffda RBX: 0000000020ccb004 RCX: 00007f62c11a885d
RDX: 0000000000000010 RSI: 0000000020ccb000 RDI: 0000000000000003
RBP: 00007f62c1091e90 R08: 0000000000000000 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000296 R12: 00007f62c10926c0
R13: ffffffffffffff88 R14: 0000000000000000 R15: 00007ffe237885b0
</TASK>

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