🇰🇷 한글 설명
Linux 커널의 GUE(Generic UDP Encapsulation) 프로토콜 처리 과정에서 내부 IP 프로토콜 번호가 0인 패킷을 처리할 때 skb(socket buffer) 메모리 누수가 발생하는 취약점입니다. ip_protocol_deliver_rcv() 함수가 0이 아닌 프로토콜 번호에 대해서만 정상 작동하도록 설계되어 있어, 특정 조건에서 메모리가 해제되지 않고 남게 됩니다.
💡 쉬운 설명
특수한 형태의 네트워크 패킷을 보냈을 때 컴퓨터의 메모리가 제대로 비워지지 않고 계속 쌓이는 문제입니다. 이 현상이 반복되면 시스템의 메모리가 부족해져 컴퓨터가 느려지거나 멈출 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
gue: Fix skb memleak with inner IP protocol 0.
syzbot reported skb memleak below. [0]
The repro generated a GUE packet with its inner protocol 0.
gue_udp_recv() returns -guehdr->proto_ctype for "resubmit"
in ip_protocol_deliver_rcu(), but this only works with
non-zero protocol number.
Let's drop such packets.
Note that 0 is a valid number (IPv6 Hop-by-Hop Option).
I think it is not practical to encap HOPOPT in GUE, so once
someone starts to complain, we could pass down a resubmit
flag pointer to distinguish two zeros from the upper layer:
* no error
* resubmit HOPOPT
[0]
BUG: memory leak
unreferenced object 0xffff888109695a00 (size 240):
comm "syz.0.17", pid 6088, jiffies 4294943096
hex dump (first 32 bytes):
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 40 c2 10 81 88 ff ff 00 00 00 00 00 00 00 00 .@..............
backtrace (crc a84b336f):
kmemleak_alloc_recursive include/linux/kmemleak.h:44 [inline]
slab_post_alloc_hook mm/slub.c:4958 [inline]
slab_alloc_node mm/slub.c:5263 [inline]
kmem_cache_alloc_noprof+0x3b4/0x590 mm/slub.c:5270
__build_skb+0x23/0x60 net/core/skbuff.c:474
build_skb+0x20/0x190 net/core/skbuff.c:490
__tun_build_skb drivers/net/tun.c:1541 [inline]
tun_build_skb+0x4a1/0xa40 drivers/net/tun.c:1636
tun_get_user+0xc12/0x2030 drivers/net/tun.c:1770
tun_chr_write_iter+0x71/0x120 drivers/net/tun.c:1999
new_sync_write fs/read_write.c:593 [inline]
vfs_write+0x45d/0x710 fs/read_write.c:686
ksys_write+0xa7/0x170 fs/read_write.c:738
do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
do_syscall_64+0xa4/0xf80 arch/x86/entry/syscall_64.c:94
entry_SYSCALL_64_after_hwframe+0x77/0x7f
📍 영향받는 시스템
Linux Kernel (GUE 프로토콜을 사용하는 환경)
⚔️ 공격 벡터
내부 IP 프로토콜 번호가 0으로 설정된 조작된 GUE 패킷을 전송하여 메모리 누수 유발
🛡️ 대응 방법
GUE 내부 프로토콜이 0인 패킷을 드롭(drop)하도록 수정된 최신 Linux 커널로 업데이트
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 패치된 버전인지 커널 보안 공지(Changelog)를 통해 확인하십시오.