CVE-2023-53836 in Linux
要約
〜によって VulDB • 2026年05月27日
Linuxカーネルにおいて、以下の脆弱性が修正されました。
bpf, sockmap: ロック変更後の sk_psock_backlog における skb refcnt の競合状態の修正
sk_psock_backlog から取得された skb が、ユーザー空間側で既に skb_consumed() を呼び出して sk_buff の参照カウント(refcnt)が 0 に低下させた後に参照される競合状態が存在し、これにより use-after-free が発生します。
フローは以下の通りです。
while ((skb = skb_peek(&psock->ingress_skb)) sk_psock_handle_Skb(psock, skb, ..., ingress) if (!ingress) ... sk_psock_skb_ingress sk_psock_skb_ingress_enqueue(skb) msg->skb = skb sk_psock_queue_msg(psock, msg) skb_dequeue(&psock->ingress_skb)
sk_psock_queue_msg() は、msg を ingress_msg キューに配置します。これは recvmsg() が呼び出された際にアプリケーションが読み取るデータです。アプリケーションは、msg がキューに配置された後であればいつでもこれを読み取ることができます。recvmsg フックは msg->skb を読み取り、その後ユーザー空間が msg を読み終えると、consume_skb(skb) を呼び出して sk_buff を解放します。
しかし、上記の競合状態では、backlog キューがまだ skb への参照を保持しており、skb_dequeue() を呼び出しています。skb_dequeue() がユーザーによる読み取りと解放の後に実行されると、use-after-free が発生します。
!ingress のケースはこの問題の影響を受けません。これは sendmsg_*(sk, msg) を使用しており、sk_buff をスタックのさらに下層に渡さないためです。
'test_progs -t sockmap_listen' で以下のスプラット(クラッシュログ)が観測されました。
[ 1022.710250][ T2556] general protection fault, ...
[...]
[ 1022.712830][ T2556] Workqueue: events sk_psock_backlog
[ 1022.713262][ T2556] RIP: 0010:skb_dequeue+0x4c/0x80
[ 1022.713653][ T2556] Code: ...
[ 1022.714033][ T2556] RSP: 0018:ffffc90000193d30 EFLAGS: 00010246
[ 1022.714423][ T2556] RAX: 0000000000000000 RBX: ffff888007380000
[ 1022.714813][ T2556] RCX: 0000000000000000 RDX: 0000000000000000
[ 1022.715203][ T2556] RSI: ffff888007380000 RDI: ffff888007380000
[ 1022.715593][ T2556] RBP: ffffc90000193d30 R00: 0000000000000000
[ 1022.715983][ T2556] R01: 0000000000000000 R02: 0000000000000000
[ 1022.716373][ T2556] R03: 0000000000000000 R04: 0000000000000000
[ 1022.716763][ T2556] R05: 0000000000000000 R06: 0000000000000000
[ 1022.717153][ T2556] R07: 0000000000000000 R08: 0000000000000000
[ 1022.717543][ T2556] R09: 0000000000000000 R10: 0000000000000000
[ 1022.717933][ T2556] R11: 0000000000000000 R12: ffff888007380000
[ 1022.718323][ T2556] R13: ffff888007380000 R14: ffff888007380000
[ 1022.718713][ T2556] R15: ffff888007380000
[ 1022.719103][ T2556] FS: 00007f3a00000740(0000) GS:ffff8880bfc00000(0000)
knlGS:0000000000000000 [ 1022.719493][ T2556] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[ 1022.719883][ T2556] CR2: 00007f39f8000000 CR3: 0000000007380000
CR4: 00000000003706e0 [ 10
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.