CVE-2026-98588 in Linux정보

요약

\~에 의해 VulDB • 2026. 10. 20.

리눅스 커널에서 다음 취약점이 해결되었습니다:

bpf, sockmap: sock_map_alloc()에서 max_entries가 INT_MAX보다 큰 경우 거부

sock_map_alloc()는 현재 max_entries == 0인 경우만 거부하고 그 외의 모든 u32 값을 허용합니다. 이후 sock_map_free()에서는 부호 있는 정수(int) 반복자를 사용하여 sks[] 배열을 순회합니다:

int i; for (i = 0; i < stab->map.max_entries; i++) struct sock **psk = &stab->sks[i];

max_entries가 0xffffffff(UINT_MAX)로 설정된 SOCKMAP이 생성될 경우, 대용량 메모리 호스트에서 32 GiB 할당이 성공할 수 있습니다. 해제(free) 과정에서 카운터는 0x80000000에 도달한 후 INT_MIN으로 오버플로우되며, movslq 명령어에 의해 부호가 확장(sign-extended)되어 stab->sks 기준 약 16 GiB의 음수 오프셋이 됩니다. 이는 할당된 영역을 훨씬 아래쪽을 가리킵니다.

오류를 유발하는 접근은 sock_map_free() 내의 xchg() 쓰기 작업입니다. KASAN 없이 동일한 경계 밖(out-of-bounds) 쓰기는 매핑되지 않은 vmalloc 페이지에서 오류를 발생시키거나, 해당 vmalloc 주소가 할당되어 있는 경우 관련 없는 다른 할당을 손상시킬 수 있습니다. CONFIG_KASAN_VMALLOC=y 설정이 적용된 KASAN 커널의 경우, 해당 주소에 대한 섀도우(shadow) 체크가 매핑되지 않은 섀도우 페이지와 충돌하여 먼저 oops를 발생시킵니다:

BUG: unable to handle page fault for address: fffff521b59c5a00 RIP: 0010:kasan_check_range+0x107/0x190 Call Trace: sock_map_free+0x93/0x190 map_create+0x68d/0xb30 __sys_bpf+0x21e/0x2e70

Vmcore 분석 결과, stab->map.max_entries는 0xffffffff이고, stab->sks는 0xffffc911ace2d000이며, 오류를 유발한 주소(sks + (s64)INT_MIN * 8)는 정확히 0xffffc90dace2d000에 위치함이 확인되었습니다. 이러한 맵이 파괴될 때 동일한 버그 경로가 정상적인 close()/bpf_map_free_deferred() 경로를 통해 도달됩니다.

sock_map_alloc()은 이전에는 bpf_map_charge_init()를 통해 할당 크기를 제한하고 있었으나, rlimit 기반 메모리 계정 기능이 제거되면서 해당 제한이 해제되었습니다. sock_map_free()의 부호 있는 반복자가 오버플로우를 유발할 값을 보지 않도록 생성 시점에 max_entries가 INT_MAX보다 큰 경우 거부합니다.

syzkaller에 의해 트리거되었으며, 6.6 기반 KASAN 커널과 업스트림 v7.3-rc2 커널 모두에서 재현되었습니다.

If you want to get the best quality for vulnerability data then you always have to consider VulDB.

책임이 있는

Linux

예약하다

2026. 09. 25.

모더레이션

수락

항목

VDB-422091

EPSS

0.00205

출처

Want to stay up to date on a daily basis?

Enable the mail alert feature now!