CVE-2026-99191 in Linux정보

요약

\~에 의해 VulDB • 2026. 10. 28.

리눅스 커널에서 다음 취약점이 해결되었습니다:

calipso: calipso_skbuff_setattr()에서 BIG TCP payload_len 유지

calipso_skbuff_setattr()는 삽입하거나 크기를 조정하는 옵션의 길이에 따라 payload_len을 조정합니다.

payload = ntohs(ip6_hdr->payload_len); ip6_hdr->payload_len = htons(payload + len_delta);

GRO(Generic Receive Offload)는 IPV6_MAXPLEN보다 큰 BIG TCP 패킷을 생성할 수 있으며, 이러한 패킷에 대해 payload_len == 0으로 저장합니다. 그런 다음 ipv6_payload_len()은 skb->len로 폴백(fallback)됩니다. CALIPSO로 매핑된 목적지로 전달되는 그러한 패킷의 경우, 위의 코드는 len_delta(또는 축소 시에는 65536 + len_delta)를 payload_len에 기록하며, ipv6_payload_len()은 더 이상 skb->len로 폴백되지 않습니다. nf_tables, conntrack 및 sch_cake는 이 동작에 의존합니다.

동일한 산술 연산은 패킷이 IPV6_MAXPLEN을 초과하여 커질 때 오버플로우(wrap)되며, IPV6_MAXPLEN 미만으로 축소되는 BIG TCP 패킷은 실제 길이를 다시 가져야 합니다.

ipv6_gro_complete()가 수행하는 방식과 같이 ipv6_set_payload_len()을 사용하여 skb 길이에서 payload_len을 설정합니다. 이는 IPV6_MAXPLEN 초과 시 0을 저장하고 그 외의 경우 실제 길이를 저장합니다. 네트워크 헤더는 방금 skb->data로 재설정되었으므로, skb->len - sizeof(*ip6_hdr)가 페이로드 길이입니다.

SELinux permissive 모드에서 최소한의 mdp 생성 정책(network_peer_controls=1), "netlabelctl calipso add pass doi:16" 및 fd00:2::/64를 CALIPSO DOI 16으로 매핑하는 NetLabel 매핑을 사용하여 하나의 커널(arm64, QEMU)에서 테스트되었습니다. calipso_skbuff_setattr()는 레벨만 포함하는 라벨을 추가하는 테스트 전용 debugfs 훅(netlbl_skbuff_setattr() 통해 호출됨 - 이 패치에는 포함되지 않음)을 통해 호출되었으며, 호출 후 payload_len은 다음과 같습니다:

case before fix after fix real length 1000, unlabeled 1016 1016 1016 70000 GSO, payload_len 0 16 0 70016 65530 GSO, grows past MAXPLEN 10 0 65546 65540 GSO with a 24 byte hop header, shrinks below MAXPLEN 65528 65532 65532 1000 with a 24 byte hop header 992 992 992

(0은 ipv6_payload_len()이 실제 길이를 반환함을 의미합니다.) 순방향 경로에서, 라우터를 통해 레이블 없는 UDP를 서버로 주입하는 클라이언트의 경우, 라우터는 CALIPSO 옵션을 추가하며 이 패치가 적용된 상태에서 서버는 모든 데이터그램(Udp6InDatagrams 5, Ip6InTruncatedPkts 0)을 전달합니다.

If you want to get best quality of vulnerability data, you may have to visit VulDB.

책임이 있는

Linux

예약하다

2026. 09. 25.

모더레이션

수락

항목

VDB-427954

EPSS

0.00000

출처

Interested in the pricing of exploits?

See the underground prices here!