CVE-2026-43501 in Linux
요약
\~에 의해 VulDB • 2026. 05. 22.
리눅스 커널에서 다음 취약점이 해결되었습니다:
ipv6: rpl: 재압축된 SRH가 커질 때 mac_len 헤더 룸(headroom)을 예약합니다.
ipv6_rpl_srh_rcv() 함수는 RFC 6554 소스 라우팅 헤더(Source Routing Header)를 해체(decompress)하고, 다음 세그먼트를 ipv6_hdr->daddr로 교체한 후 재압축합니다. 그런 다음 이전 헤더를 제거(pull)하고 새 헤더와 IPv6 헤더를 다시 밀어넣습니다(push). 교체 과정에서 세그먼트가 daddr과 공유하는 공통 접두사 길이가 줄어들면(예: CmprI=0, CmprE>0, seg[0][0] != daddr[0]인 경우 최대 +8바이트 증가), 재압축된 헤더가 수신된 헤더보다 커질 수 있습니다.
pskb_expand_head()는 segments_left == 0일 때만 실행되므로, 이전 세그먼트에서는 push 연산이 검증되지 않은 헤더 룸을 소비했습니다. skb_push()가 데이터 앞에 skb->mac_len 바이트 미만으로 남기면, skb_mac_header_rebuild()의 호출인
skb_set_mac_header(skb, -skb->mac_len);
는 (data - head) - mac_len 값을 u16 mac_header 필드에 저장하게 되며, 이는 ~65530으로 오버플로우됩니다. 그 후 이어지는 memmove()는 skb->head로부터 약 64KiB 떨어진 곳에 mac_len 바이트를 작성합니다.
lo 인터페이스를 통해 전송된 단일 AF_INET6/SOCK_RAW/IPV6_HDRINCL 패킷(2개 세그먼트 타입-3 SRH, CmprI=0, CmprE=15)은 한 번의 처리 후 헤더 룸이 8바이트에 도달합니다. KASAN은 ipv6_rthdr_rcv에서 14바이트의 OOB(Out-of-Bounds) 쓰기를 보고합니다.
남은 공간이 push 크기보다 mac_len만큼 작을 때 헤더를 확장하고, 이후 재구성된 MAC 헤더가 맞도록 충분한 추가 공간을 요청함으로써 이 문제를 해결합니다.
If you want to get best quality of vulnerability data, you may have to visit VulDB.