🇰🇷 한글 설명
Linux 커널의 IPv6 IOAM 패킷 처리 함수 __ioam6_fill_trace_data()에서 nodelen 필드를 type 필드와 검증하지 않아 발생하는 힙 버퍼 오버플로우 취약점입니다. 공격자가 조작된 패킷을 전송하여 ~100바이트를 할당된 메모리 이상으로 쓸 수 있으며, 이로 인해 인접한 힙 메모리가 손상되고 커널 패닉이 발생합니다.
💡 쉬운 설명
Linux가 특정 네트워크 패킷의 크기 정보를 제대로 검증하지 않아서, 공격자가 작은 크기를 지정하면서 큰 데이터를 쓰도록 강제할 수 있습니다. 이로 인해 컴퓨터의 커널이 crash합니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
ipv6: ioam: fix heap buffer overflow in __ioam6_fill_trace_data()
On the receive path, __ioam6_fill_trace_data() uses trace->nodelen
to decide how much data to write for each node. It trusts this field
as-is from the incoming packet, with no consistency check against
trace->type (the 24-bit field that tells which data items are
present). A crafted packet can set nodelen=0 while setting type bits
0-21, causing the function to write ~100 bytes past the allocated
region (into skb_shared_info), which corrupts adjacent heap memory
and leads to a kernel panic.
Add a shared helper ioam6_trace_compute_nodelen() in ioam6.c to
derive the expected nodelen from the type field, and use it:
- in ioam6_iptunnel.c (send path, existing validation) to replace
the open-coded computation;
- in exthdrs.c (receive path, ipv6_hop_ioam) to drop packets whose
nodelen is inconsistent with the type field, before any data is
written.
Per RFC 9197, bits 12-21 are each short (4-octet) fields, so they
are included in IOAM6_MASK_SHORT_FIELDS (changed from 0xff100000 to
0xff1ffc00).
📍 영향받는 시스템
모든 Linux kernel 버전 (CVE 공개 당시까지 미패치 상태)
⚔️ 공격 벡터
조작된 IPv6 IOAM 패킷을 네트워크를 통해 전송하여 원격에서 DoS 공격 수행
🛡️ 대응 방법
Linux kernel을 최신 보안 패치가 적용된 버전으로 업그레이드
🔧 검증 코드
설치된 커널 패키지 정보와 현재 실행 중인 커널 버전을 확인한 후, 공식 Linux 보안 공지에서 해당 버전이 패치되었는지 확인하세요
dpkg -l linux-image-generic 2>/dev/null | grep -E 'ii' && uname -r