CVE-2026-52943
net: skbuff: pskb_carve 헬퍼에서 누락된 zerocopy 참조 수정
- 게시됨
- 2026. 6. 24.
- 업데이트됨
- 2026. 10. 16.
- CNA 할당 중
- Linux
- 증거 관찰됨
- 2026. 8. 17.
기본 CVSS
nvd · CVSS 3.1
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H낮음 · 다음 30일
- 백분위수
- 14.9%
- 모델 날짜
- 2026. 10. 15.
EPSS는 통계적 추정치이지 확실성이나 영향의 척도가 아닙니다. 이를 CVSS, KEV 상태, 노출 및 환경과 결합하세요.
요약
Linux 커널에서 다음 취약점이 해결되었습니다: net: skbuff: pskb_carve 헬퍼에서 누락된 zerocopy 참조 수정 `pskb_carve_inside_header()`와 `pskb_carve_inside_nonlinear()`는 둘 다 `memcpy()`를 통해 기존 `skb_shared_info` 헤더를 새 버퍼로 복사하며, 여기에는 MSG_ZEROCOPY skb의 `destructor_arg` 포인터(uarg)가 포함됩니다. 두 함수 모두 새 shinfo에 대해 `net_zcopy_get()`을 호출하지 않아, 계정에 잡히지 않는 보유자(holder)가 생성됩니다: `destructor_arg`가 설정된 모든 `skb_shared_info`는 해제 시 `skb_zcopy_clear()`를 한 번 호출하지만, 새 복사본에 대해 해당하는 `net_zcopy_get()`은 호출된 적이 없습니다. 반복적인 호출로 인해 `uarg->refcnt`가 조기에 0으로 떨어지면서, TX skb가 여전히 유효한 `destructor_arg` 포인터를 보유하고 있는 동안 `ubuf_info_msgzc`가 해제됩니다. KASAN은 해제된 `ubuf_info_msgzc`에 대한 use-after-free를 보고합니다: ``` 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 ``` 늦은 접근을 소비한 skb는 여전히 `pskb_carve_inside_nonlinear()`가 refcount 증가 없이 복사한 `shinfo->destructor_arg`를 통해 동일한 uarg를 참조하고 있었습니다. 이는 안정적으로 악용 가능한 것으로 확인되었습니다: 실제 동작하는 proof-of-concept가 기본 커널 구성에서 권한이 없는 로컬 사용자로부터 완전한 루트 권한 상승을 달성합니다. 이 수정은 동일한 memcpy/cloned 구조를 가진 `pskb_expand_head()`의 패턴을 따릅니다. `pskb_carve_inside_header()`의 경우, `net_zcopy_get()`은 `skb_orphan_frags()`가 성공한 후에 배치되므로, orphan 오류 경로에는 정리(cleanup)가 필요하지 않습니다. `pskb_carve_inside_nonlinear()`의 경우, `net_zcopy_get()`은 모든 실패 지점 이후이자 `skb_release_data()` 직전에 배치되므로, 어떤 오류 경로에도 정리가 전혀 필요하지 않습니다 — 이는 `pskb_expand_head()`에 더 가깝게 일치하며 균형을 맞추기 위한 `net_zcopy_put()`의 필요성을 피합니다.
소스
이것은 CVE-2026-52943용 Linux 커널 로컬 권한 상승 PoC 코드로, skbuff.c의 use-after-free 취약점이며, 제가 Linux 커널에서 처음 발견한 0day입니다.
책임 있는 사용
귀하가 소유하고 있거나 테스트할 권한이 있는 시스템에 대해서만 취약점 정보를 사용하십시오. Kitploit은 공개 연구 메타데이터에 연결되며 익스플로잇 코드나 악성 페이로드를 저장하지 않습니다.