🇰🇷 한글 설명
Linux 커널의 geneve 드라이버에서 GRO(Generic Receive Offload) 힌트 처리 로직의 불일치로 인해 발생하는 취약점입니다. 공격자가 조작된 힌트 옵션을 제공할 경우, 커널이 유효하지 않은 오프셋을 참조하여 메모리 경계를 벗어나는 읽기(Out-of-bounds Read) 오류를 발생시킬 수 있습니다.
💡 쉬운 설명
네트워크 데이터를 처리하는 과정에서 검증되지 않은 정보를 잘못 읽어 들여 시스템 메모리의 민감한 정보를 유출하거나 오류를 일으킬 수 있는 문제입니다. 공격자가 특수하게 제작된 네트워크 패킷을 보내 시스템을 공격할 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
geneve: gate GRO hint in geneve_gro_complete() on gs->gro_hint
geneve_gro_receive() reads the GRO hint through geneve_sk_gro_hint_off(),
which honours it only when the socket enabled IFLA_GENEVE_GRO_HINT
(gs->gro_hint). geneve_gro_complete() instead calls the low-level
geneve_opt_gro_hint_off() and acts on the hint unconditionally.
On a tunnel without the hint, receive aggregates the frames as plain
ETH_P_TEB while complete still honours an attacker-supplied hint option: it
inflates gh_len by gro_hint->nested_hdr_len (u8) and redirects the dispatch
type, so the inner gro_complete handler runs at nhoff + gh_len, an offset
receive never pulled nor validated, reading out of bounds of the skb head:
BUG: KASAN: slab-out-of-bounds in ipv6_gro_complete (net/ipv6/ip6_offload.c:196)
Read of size 1 at addr ffff88800fe91980 by task exploit/153
ipv6_gro_complete (net/ipv6/ip6_offload.c:196)
geneve_gro_complete (drivers/net/geneve.c:965)
udp_gro_complete (net/ipv4/udp_offload.c:940)
inet_gro_complete (net/ipv4/af_inet.c:1621)
__gro_flush (net/core/gro.c:306)
Gate the complete path on gs->gro_hint too via geneve_sk_gro_hint_off(), so
both paths agree. Tunnels that enable the hint are unaffected.
📍 영향받는 시스템
Linux Kernel (geneve 드라이버를 사용하는 시스템)
⚔️ 공격 벡터
조작된 GENEVE 프로토콜 힌트 옵션이 포함된 네트워크 패킷 전송
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 해결된 패치 버전 이후인지 확인하십시오.