🇰🇷 한글 설명
Linux 커널의 IPv6 RPL(Routing Protocol for Low-Power and Lossy Networks) 구현에서 SRH(Source Routing Header) 재압축 시 헤드룸 공간을 충분히 확보하지 않아 발생하는 취약점입니다. 특정 조건에서 헤더 재압축 과정 중 메모리 경계를 초과하여 데이터를 쓰는 Out-of-Bounds(OOB) 쓰기 오류가 발생할 수 있습니다.
💡 쉬운 설명
네트워크 데이터 패킷을 처리하는 과정에서 데이터가 들어갈 공간을 잘못 계산하여, 정해진 메모리 범위를 벗어나 다른 데이터를 덮어쓸 수 있는 문제입니다. 공격자가 특수하게 조작된 패킷을 보내 시스템을 중단시키거나 제어권을 탈취할 위험이 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
ipv6: rpl: reserve mac_len headroom when recompressed SRH grows
ipv6_rpl_srh_rcv() decompresses an RFC 6554 Source Routing Header, swaps
the next segment into ipv6_hdr->daddr, recompresses, then pulls the old
header and pushes the new one plus the IPv6 header back. The
recompressed header can be larger than the received one when the swap
reduces the common-prefix length the segments share with daddr (CmprI=0,
CmprE>0, seg[0][0] != daddr[0] gives the maximum +8 bytes).
pskb_expand_head() was gated on segments_left == 0, so on earlier
segments the push consumed unchecked headroom. Once skb_push() leaves
fewer than skb->mac_len bytes in front of data,
skb_mac_header_rebuild()'s call to:
skb_set_mac_header(skb, -skb->mac_len);
will store (data - head) - mac_len into the u16 mac_header field, which
wraps to ~65530, and the following memmove() writes mac_len bytes ~64KiB
past skb->head.
A single AF_INET6/SOCK_RAW/IPV6_HDRINCL packet over lo with a two
segment type-3 SRH (CmprI=0, CmprE=15) reaches headroom 8 after one
pass; KASAN reports a 14-byte OOB write in ipv6_rthdr_rcv.
Fix this by expanding the head whenever the remaining room is less than
the push size plus mac_len, and request that much extra so the rebuilt
MAC header fits afterwards.
📍 영향받는 시스템
IPv6 RPL 기능을 사용하는 Linux 커널 (패치 적용 전 버전)
⚔️ 공격 벡터
조작된 IPv6 SRH(Source Routing Header)를 포함한 AF_INET6/SOCK_RAW 패킷 전송
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하십시오.
🔧 검증 코드
출력된 커널 버전을 확인하여 해당 취약점이 해결된 최신 버전인지 보안 공지(CVE-2026-43501 관련)와 대조하십시오.