🔍 CVE-2026-98299

0.0
CVSS Score
UNKNOWN
2026-10-06
2026-10-19 10:18
✅ 완료

🇰🇷 한글 설명

Linux 커널의 TCP 스택에서 tcp_rmem 설정값이 4096 미만으로 설정될 경우, tcp_rcvbuf_grow() 및 tcp_rcv_space_adjust() 함수에서 0으로 나누기(Division by Zero) 오류가 발생하여 시스템이 충돌할 수 있는 취약점입니다. 이는 tcp_rmem[1] 값이 매우 작게 설정될 때 수신 버퍼 공간이 0이 되어 발생하며, 이를 방지하기 위해 최소값을 4096으로 제한하도록 수정되었습니다.

💡 쉬운 설명

컴퓨터가 인터넷 데이터를 받는 통로(버퍼)의 크기를 너무 작게 설정하면, 계산 과정에서 0으로 나누는 수학적 오류가 발생해 시스템이 멈출 수 있습니다. 이 문제는 통로의 최소 크기를 안전한 수준으로 고정함으로써 해결되었습니다.

🇺🇸 원문 (English)

In the Linux kernel, the following vulnerability has been resolved: tcp: do not let tcp_rmem be set below 4096 We can hit a division by zero crash in tcp_rcvbuf_grow() and tcp_rcv_space_adjust(): divide error: 0000 [#1] PREEMPT SMP RIP: 0010:tcp_rcvbuf_grow+0x187/0x450 net/ipv4/tcp_input.c:939 ... grow = div_u64(((u64)rcvwin << 1) * (newval - oldval), oldval); The division uses oldval = tp->rcvq_space.space as divisor. When tp->rcvq_space.space is zero, this leads to a divide-by-zero exception. tp->rcvq_space.space is initialized in tcp_init_buffer_space(): tp->rcvq_space.space = min3(tp->rcv_ssthresh, tp->rcv_wnd, (u32)TCP_INIT_CWND * tp->advmss); If tcp_rmem[1] is configured to very small values (such as 1), sk->sk_rcvbuf is initialized to 1. Then tcp_full_space(sk), which computes (sk->sk_rcvbuf * scaling_ratio) >> 8, truncates to 0. This sets tp->window_clamp = 0, tp->rcv_ssthresh = 0, and tp->rcvq_space.space = 0. Later, when data arrives and DRS is invoked, tcp_rcvbuf_grow() divides by oldval == 0. Back in 2015, commit b1cb59cf2efe ("net: sysctl_net_core: check SNDBUF and RCVBUF for min length") ensured that net.core.rmem_default and net.core.rmem_max cannot be set below SOCK_MIN_RCVBUF. Similarly, SO_RCVBUF setsockopt enforces max_t(int, val * 2, SOCK_MIN_RCVBUF). However, net.ipv4.tcp_rmem still had .extra1 = SYSCTL_ONE, allowing arbitrarily small values. Because SOCK_MIN_RCVBUF depends on sizeof(struct sk_buff) and cacheline alignment, its value varies across architectures and configuration options. Using a fixed constant of 4096 ensures a predictable, architecture- independent lower bound that is safely above SOCK_MIN_RCVBUF everywhere and matches the documented 4K default. Fix this by setting tcp_rmem.extra1 to 4096 and updating the documentation.

📍 영향받는 시스템

Linux Kernel (tcp_rmem 설정이 매우 작게 구성된 시스템)

⚔️ 공격 벡터

시스템 관리자 또는 공격자가 네트워크 설정(sysctl)을 통해 tcp_rmem 값을 극도로 낮게 설정할 수 있는 경우 발생

🛡️ 대응 방법

Linux 커널을 최신 패치가 적용된 버전으로 업데이트하거나, tcp_rmem의 최소값을 4096 이상으로 유지하십시오.

🔧 검증 코드

출력된 세 개의 값 중 두 번째 값(tcp_rmem[1])이 4096보다 작은지 확인하십시오.

Shell / Script
sysctl net.ipv4.tcp_rmem

💻 영향받는 소프트웨어

NVIDIA Cloud Gaming Guest Driver for Linux