🇰🇷 한글 설명
Linux 커널의 IPv4 ICMP 모듈에서 IPv6 스택이 비활성화된 상태에서 icmp_build_probe() 함수가 에러 포인터를 잘못 처리하여 커널 null-ptr-deref 크래시를 발생시킨다. RFC 8335 ICMP Extended Echo 요청 처리 중 IPv6 인터페이스 조회 실패 시 에러 포인터를 dev_hold()에 전달하면서 발생하는 문제를 요청 폐기로 해결한다.
💡 쉬운 설명
리눅스가 IPv6 기능을 사용하지 않을 때 특정 네트워크 요청이 들어오면 커널이 잘못된 메모리 주소를 접근하려다 멈춘다. 패치는 이런 요청을 조용히 무시하도록 변경한다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
ipv4: icmp: fix null-ptr-deref in icmp_build_probe()
ipv6_stub->ipv6_dev_find() may return ERR_PTR(-EAFNOSUPPORT) when the
IPv6 stack is not active (CONFIG_IPV6=m and not loaded), and passing
this error pointer to dev_hold() will cause a kernel crash with
null-ptr-deref.
Instead, silently discard the request. RFC 8335 does not appear to
define a specific response for the case where an IPv6 interface
identifier is syntactically valid but the implementation cannot perform
the lookup at runtime, and silently dropping the request may safer than
misreporting "No Such Interface".
📍 영향받는 시스템
Linux kernel (5.x ~ 6.x), CONFIG_IPV6=m으로 컴파일되었으나 IPv6 모듈 미로드 상태
⚔️ 공격 벡터
원격 공격자가 ICMP Extended Echo (RFC 8335) 요청을 특정 IPv6 인터페이스로 전송하여 커널 크래시 유발
🛡️ 대응 방법
Linux 커널을 patched 버전으로 업그레이드하거나 IPv6 모듈 로드 (modprobe ipv6)
🔧 검증 코드
커널 소스에 icmp_build_probe 함수가 있고, 현재 커널 버전이 패치 적용 이후 버전인지 확인. 커널 소스 미설치 시 대신 'cat /proc/version | grep -E 'Linux.*6\..*'로 커널 버전 확인
grep -r 'icmp_build_probe' /usr/src/linux* 2>/dev/null | head -1 && uname -r