CVE-2026-31429
net: skb: KFENCE로 할당된 skb 헤드의 교차 캐시 해제 수정
- 게시됨
- 2026. 4. 20.
- 업데이트됨
- 2026. 5. 11.
- CNA 할당 중
- Linux
- 증거 관찰됨
- 2026. 8. 25.
기본 CVSS
nvd · CVSS 3.1
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H낮음 · 다음 30일
- 백분위수
- 17.9%
- 모델 날짜
- 2026. 9. 21.
EPSS는 통계적 추정치이지 확실성이나 영향의 척도가 아닙니다. 이를 CVSS, KEV 상태, 노출 및 환경과 결합하세요.
요약
리눅스 커널에서 다음 취약점이 해결되었습니다: net: skb: KFENCE로 할당된 skb 헤드의 교차 캐시 해제(cross-cache free) 수정 `SKB_SMALL_HEAD_CACHE_SIZE`는 의도적으로 2의 거듭제곱이 아닌 값(예: x86_64에서 704)으로 설정되어, 일반적인 kmalloc 버킷 크기와의 충돌을 방지합니다. 이를 통해 `skb_kfree_head()`가 `skb_end_offset`을 사용하여 `skb_small_head_cache`에서 할당된 skb 헤드와 일반 kmalloc 캐시에서 할당된 skb 헤드를 안정적으로 구분할 수 있습니다. 그러나 KFENCE가 활성화되면 `kfence_ksize()`는 슬랩 버킷 크기 대신 정확히 요청된 할당 크기를 반환합니다. 호출자(예: `bpf_test_init`)가 `kzalloc()`을 통해 skb 헤드 데이터를 할당하고 요청된 크기가 우연히 `SKB_SMALL_HEAD_CACHE_SIZE`와 같아지면, `slab_build_skb()` -> `ksize()`가 해당 정확한 값을 반환합니다. `skb_shared_info` 오버헤드를 뺀 후 `skb_end_offset`이 `SKB_SMALL_HEAD_HEADROOM`과 일치하게 되어, `skb_kfree_head()`가 객체를 원래 kmalloc 캐시가 아닌 `skb_small_head_cache`로 잘못 해제하게 됩니다. 이로 인해 슬랩 교차 캐시 해제가 발생합니다: ``` kmem_cache_free(skbuff_small_head): Wrong slab cache. Expected skbuff_small_head but got kmalloc-1k ``` 이 문제는 `skb_kfree_head()`에서 항상 `kfree(head)`를 호출하여 해결합니다. 이렇게 하면 해제 경로가 일반적으로 유지되어 KFENCE 객체에 대한 할당자별 오분류를 방지할 수 있습니다.
소스
1# CVE-2026-31429 PoC (Linux 커널 >= 6.3 < 6.12.82 Slab 크로스-캐시 혼동) - Antonius - w1sdom - bluedragonsec.com이 발견한 취약점
책임 있는 사용
귀하가 소유하고 있거나 테스트할 권한이 있는 시스템에 대해서만 취약점 정보를 사용하십시오. Kitploit은 공개 연구 메타데이터에 연결되며 익스플로잇 코드나 악성 페이로드를 저장하지 않습니다.