🇰🇷 한글 설명
리눅스 커널의 icmp_tag_validation() 함수에서 NULL 포인터 역참조 취약점이 발견되었습니다. 특정 설정(hardened PMTU mode)에서 등록되지 않은 프로토콜 번호를 포함한 ICMP Fragmentation Needed 에러 패킷을 수신할 경우, 커널 패닉이 발생하여 시스템이 중단될 수 있습니다.
💡 쉬운 설명
인터넷 통신 규약 중 하나인 ICMP 메시지를 처리할 때, 시스템이 알지 못하는 잘못된 정보를 받으면 컴퓨터의 두뇌 역할을 하는 커널이 충돌하여 멈춰버리는 문제입니다. 공격자가 특수하게 조작된 패킷을 보내 시스템을 강제로 다운시킬 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
icmp: fix NULL pointer dereference in icmp_tag_validation()
icmp_tag_validation() unconditionally dereferences the result of
rcu_dereference(inet_protos[proto]) without checking for NULL.
The inet_protos[] array is sparse -- only about 15 of 256 protocol
numbers have registered handlers. When ip_no_pmtu_disc is set to 3
(hardened PMTU mode) and the kernel receives an ICMP Fragmentation
Needed error with a quoted inner IP header containing an unregistered
protocol number, the NULL dereference causes a kernel panic in
softirq context.
Oops: general protection fault, probably for non-canonical address 0xdffffc0000000002: 0000 [#1] SMP KASAN NOPTI
KASAN: null-ptr-deref in range [0x0000000000000010-0x0000000000000017]
RIP: 0010:icmp_unreach (net/ipv4/icmp.c:1085 net/ipv4/icmp.c:1143)
Call Trace:
<IRQ>
icmp_rcv (net/ipv4/icmp.c:1527)
ip_protocol_deliver_rcu (net/ipv4/ip_input.c:207)
ip_local_deliver_finish (net/ipv4/ip_input.c:242)
ip_local_deliver (net/ipv4/ip_input.c:262)
ip_rcv (net/ipv4/ip_input.c:573)
__netif_receive_skb_one_core (net/core/dev.c:6164)
process_backlog (net/core/dev.c:6628)
handle_softirqs (kernel/softirq.c:561)
</IRQ>
Add a NULL check before accessing icmp_strict_tag_validation. If the
protocol has no registered handler, return false since it cannot
perform strict tag validation.
📍 영향받는 시스템
Linux Kernel (ip_no_pmtu_disc가 3으로 설정된 환경)
⚔️ 공격 벡터
등록되지 않은 프로토콜 번호를 포함한 조작된 ICMP Fragmentation Needed 패킷 전송
🛡️ 대응 방법
리눅스 커널을 최신 보안 패치가 적용된 버전으로 업데이트하여 icmp_tag_validation() 내 NULL 체크 로직을 적용해야 합니다.
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 해결된 패치 버전 이후인지 확인합니다.