🇰🇷 한글 설명
Linux 커널의 IPv4 네트워크 스택에서 PMTU 탐색 기능과 매우 큰 MTU를 사용할 때 UDP 길이 오버플로가 발생하는 취약점입니다. IP_PMTUDISC_PROBE 설정 시 UDP 길이 필드가 16비트 범위를 초과하여 시스템 경고(WARN)를 유발할 수 있습니다.
💡 쉬운 설명
네트워크 데이터 크기를 조절하는 과정에서 숫자가 너무 커져서 컴퓨터가 처리할 수 있는 범위를 넘어서는 오류입니다. 이로 인해 네트워크 통신 중 시스템에 경고 메시지가 뜨거나 예기치 않은 동작이 발생할 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
net: ipv4: Fix UDP length overflow with PMTU discover and big MTU
This commit bounds cork->base.fragsize to IP_MAX_MTU to avoid a
possible overflow of UDP length that triggers a WARN in
udp_set_len_short when setsockopt IP_MTU_DISCOVER is set to
IP_PMTUDISC_PROBE, and a large packet is sent over a netdev with an
unusually large MTU.
Steps to reproduce:
1. Set device MTU bigger than IP_MAX_MTU + 20. cork->base.fragsize will
be set to that MTU in ip_setup_cork.
2. Set IP_MTU_DISCOVER to IP_PMTUDISC_PROBE. It lets maxnonfragsize be
set to device MTU (cork->fragsize) in __ip_append_data, rather than
to IP_MAX_MTU.
3. Send 65528 bytes of payload (+8 bytes of UDP header, +20 bytes of
IPv4 header). Device MTU allows it (it's only one byte bigger than
IP_MAX_MTU + IPv4 header, and the device MTU is bigger than that).
4. The UDP length in the built packet is 65536, which overflows the
16-bit length field and triggers the WARN in udp_set_len_short.
Note: IP_PMTUDISC_DO with IPv4 is safe, because ip_dst_mtu_maybe_forward
always clamps at IP_MAX_MTU, unlike ip6_dst_mtu_maybe_forward.
The Fixes tag points at the first commit where I could reproduce the
overflow with IPv4 and IP_PMTUDISC_PROBE.
📍 영향받는 시스템
IP_PMTUDISC_PROBE 설정 및 매우 큰 MTU를 사용하는 Linux 커널 시스템
⚔️ 공격 벡터
특정 MTU 설정과 PMTU 탐색 옵션이 활성화된 환경에서 대용량 UDP 패킷을 전송하여 오버플로 유도
🛡️ 대응 방법
해당 취약점이 수정된 최신 Linux 커널 버전으로 업데이트
🔧 검증 코드
출력된 커널 버전이 취약점이 해결된 패치 버전 이후인지 확인