🇰🇷 한글 설명
Linux 커널의 ip4ip6_err() 함수에서 IPv6 수신 경로의 데이터가 포함된 skb2->cb[] 영역을 초기화하지 않아 발생하는 취약점입니다. 이로 인해 IPv4와 IPv6의 데이터 구조 차이로 인한 메모리 레이아웃 불일치가 발생하며, 공격자가 제어하는 패킷 데이터를 통해 스택 버퍼 오버플로우가 유발될 수 있습니다.
💡 쉬운 설명
네트워크 데이터를 처리하는 과정에서 IPv6 정보를 IPv4 정보로 잘못 해석하여 메모리 공간을 넘쳐나게 만드는 오류입니다. 공격자가 특수하게 조작된 패킷을 보내면 시스템의 중요한 정보를 훔치거나 제어권을 탈취할 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
ip6_tunnel: clear skb2->cb[] in ip4ip6_err()
Oskar Kjos reported the following problem.
ip4ip6_err() calls icmp_send() on a cloned skb whose cb[] was written
by the IPv6 receive path as struct inet6_skb_parm. icmp_send() passes
IPCB(skb2) to __ip_options_echo(), which interprets that cb[] region
as struct inet_skb_parm (IPv4). The layouts differ: inet6_skb_parm.nhoff
at offset 14 overlaps inet_skb_parm.opt.rr, producing a non-zero rr
value. __ip_options_echo() then reads optlen from attacker-controlled
packet data at sptr[rr+1] and copies that many bytes into dopt->__data,
a fixed 40-byte stack buffer (IP_OPTIONS_DATA_FIXED_SIZE).
To fix this we clear skb2->cb[], as suggested by Oskar Kjos.
Also add minimal IPv4 header validation (version == 4, ihl >= 5).
📍 영향받는 시스템
Linux Kernel (ip4ip6_err() 함수를 사용하는 IPv4-in-IPv6 터널링 관련 버전)
⚔️ 공격 벡터
조작된 IPv6 패킷을 전송하여 커널의 스택 버퍼 오버플로우 유발
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하여 skb2->cb[] 초기화 및 IPv4 헤더 검증 로직 적용
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 해결된 패치 버전 이후인지 배포판 보안 공지를 통해 확인하십시오.