🔍 CVE-2026-52943

7.8
CVSS Score
HIGH
2026-06-24
2026-10-19 20:18
✅ 완료

🇰🇷 한글 설명

Linux 커널의 net: skbuff 구성 요소에서 pskb_carve 헬퍼 함수가 MSG_ZEROCOPY skb의 참조 횟수를 적절히 증가시키지 않아 발생하는 취약점입니다. 이로 인해 메모리 참조 카운트가 조기에 0이 되어 ubuf_info_msgzc 구조체가 해제된 후에도 참조되는 Use-After-Free(UAF) 오류가 발생합니다. 공격자는 이를 통해 권한이 없는 로컬 사용자가 루트 권한을 획득할 수 있습니다.

💡 쉬운 설명

데이터를 복사하는 과정에서 메모리를 사용 중이라는 표시를 제대로 남기지 않아, 이미 사용이 끝난 메모리를 시스템이 다시 사용하려고 시도하는 오류입니다. 이를 악용하면 해커가 일반 사용자 권한에서 컴퓨터의 최고 관리자 권한을 뺏을 수 있습니다.

🇺🇸 원문 (English)

In the Linux kernel, the following vulnerability has been resolved: net: skbuff: fix missing zerocopy reference in pskb_carve helpers pskb_carve_inside_header() and pskb_carve_inside_nonlinear() both copy the old skb_shared_info header into a new buffer via memcpy(), which includes the destructor_arg pointer (uarg) for MSG_ZEROCOPY skbs. Neither function calls net_zcopy_get() for the new shinfo, creating an unaccounted holder: every skb_shared_info with destructor_arg set will call skb_zcopy_clear() once when freed, but the corresponding net_zcopy_get() was never called for the new copy. Repeated calls drive uarg->refcnt to zero prematurely, freeing ubuf_info_msgzc while TX skbs still hold live destructor_arg pointers. KASAN reports use-after-free on a freed ubuf_info_msgzc: BUG: KASAN: slab-use-after-free in skb_release_data+0x77b/0x810 Read of size 8 at addr ffff88801574d3e8 by task poc/220 Call Trace: skb_release_data+0x77b/0x810 kfree_skb_list_reason+0x13e/0x610 skb_release_data+0x4cd/0x810 sk_skb_reason_drop+0xf3/0x340 skb_queue_purge_reason+0x282/0x440 rds_tcp_inc_free+0x1e/0x30 rds_recvmsg+0x354/0x1780 __sys_recvmsg+0xdf/0x180 Allocated by task 219: msg_zerocopy_realloc+0x157/0x7b0 tcp_sendmsg_locked+0x2892/0x3ba0 Freed by task 219: ip_recv_error+0x74a/0xb10 tcp_recvmsg+0x475/0x530 The skb consuming the late access still referenced the same uarg via shinfo->destructor_arg copied by pskb_carve_inside_nonlinear() without a refcount bump. This has been verified to be reliably exploitable: a working proof-of-concept achieves full root privilege escalation from an unprivileged local user on a default kernel configuration. The fix follows the pattern of pskb_expand_head() which has the same memcpy/cloned structure. For pskb_carve_inside_header(), net_zcopy_get() is placed after skb_orphan_frags() succeeds, so the orphan error path needs no cleanup. For pskb_carve_inside_nonlinear(), net_zcopy_get() is placed after all failure points and just before skb_release_data(), so no error path needs cleanup at all -- matching pskb_expand_head() more closely and avoiding the need for a balancing net_zcopy_put().

📍 영향받는 시스템

Linux Kernel (pskb_carve 관련 함수를 사용하는 버전)

⚔️ 공격 벡터

권한이 없는 로컬 사용자가 특수하게 조작된 네트워크 패킷을 처리하도록 유도하여 메모리 오류를 일으킴

🛡️ 대응 방법

Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하여 pskb_carve 함수 내 net_zcopy_get() 호출 로직을 적용해야 함

🔧 검증 코드

출력된 커널 버전이 해당 취약점이 수정된 패치 버전 이후인지 확인하십시오.

Shell / Script
uname -r

📊 CVSS Vector String

CVSS Vector
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H

💻 영향받는 소프트웨어

Linux Kernel