[공격] 분석 — CVE-2025-71098
CVE-2025-71098 allows a local unprivileged process to trigger an ip6gre header handling bug that causes a kernel panic, and the fastest mitigation is to apply the upstream kernel patch or temporarily disable IPv6 GRE tunnels.
📋 요약
- 심각도 medium · CVSS 5.5 · EPSS 0.00114 · 악용난이도 hard
🔍 공격 기법
- 트리거 조건
- 로컬에서
team또는bonding네트워크 인터페이스가dev->needed_headroom·dev->hard_header_len값을 동적으로 변경할 수 있어야 함. - 이후 IPv6 GRE(
ip6gre) 디바이스를 생성하고, MLD 패킷 전송 흐름(mld_newpack()→mld_sendpack())이 실행될 때, 할당된 SKB의 헤드룸이 부족해ip6gre_header()내부에서BUG_ON(skb_under_panic) 가 발생한다.
- 로컬에서
- 공격 표면
- 노출 엔드포인트:
/sys/class/net/<iface>/needed_headroom,/sys/class/net/<iface>/hard_header_len(root가 아니어도 일부 시스템에서는 일반 사용자에게 쓰기 권한이 부여될 수 있음). - 호출 함수:
ip6gre_header()(net/ipv6/ip6_gre.c),mld_newpack(),dev_hard_header().
- 노출 엔드포인트:
- 단계별 흐름
1️⃣ 정찰 –ls /sys/class/net/*/needed_headroom등으로 헤드룸 조정 가능 여부와team·bonding인터페이스 존재를 확인한다.
2️⃣ 초기 접근 – 로컬 사용자 권한만으로echo <value> > /sys/class/net/<iface>/needed_headroom와 같이 값 변경이 가능한 경우 진행한다. (PR:L,AV:L).
3️⃣ 실행 – 조정된 헤드룸 상태에서ip -6 gre add dev ip6gre0 remote <addr> local <addr>로 GRE 디바이스를 만들고,mld_sendpack()를 유발하는 MLD 패킷을 전송한다(예:ping6 -I ip6gre0 ff02::1). 이때 커널은ip6gre_header()에서 헤드룸 부족을 감지하고 BUG 발생 → 시스템 전체 패닉(A:H).
4️⃣ 영향 – 즉시 서비스 거부(DoS) 발생. 재부팅 후 자동 복구가 되지만, 지속적인 공격이 가능하다. - CVSS 벡터와 실제 조건 매핑 –
AV:L(로컬),AC:L(헤드룸 값만 조정),PR:L(일반 사용자 권한 충분),UI:N,S:U,C:N/I:N/A:H. - 추정: 현재 공개된 증거는 커널 패닉을 초래하는 DoS에 국한되며, 메모리 오염을 통한 로컬 권한 상승(LPE) 가능성은 확인되지 않았다(추정).
악용 가능성: 이 취약점은 로컬 공격자(Privilege Required = Low)만으로도 충분히 악용할 수 있으며, 네트워크를 통한 원격 접근이 필요하지 않으므로 공격 전제조건이 비교적 단순합니다. CVSS 벡터 AV:L/AC:L/UI:N에 따라 물리적 또는 컨테이너 내부 등 로컬 환경에서 실행 가능한 코드가 있으면, 복잡한 권한 상승 절차 없이도 커널 크래시를 유발할 수 있습니다. EPSS 0.00114는 실제 악용 사례가 드물지만 존재함을 의미하며, KEV에 등재되지 않은 점은 아직 대규모 공격이 보고되지 않았다는 점을 반영합니다. 핵심 공격 표면은 ip6gre_header() 함수와 이를 호출하는 경로인 mld_newpack()·mld_sendpack()에서 할당되는 skb의 헤드룸이며, 팀(team) 혹은 본딩(bonding) 드라이버가 동적으로 dev->needed_headroom·dev->hard_header_len을 조정할 때 메모리 오버플로우가 발생합니다. 공격자는 로컬에서 특수하게 구성된 네트워크 인터페이스(예: ip6gre device)를 삽입하고, 의도적으로 헤드룸이 부족한 skb를 생성해 커널 패닉을 트리거할 수 있습니다. 따라서 난이도는 “hard”로 평가되지만, 로컬 권한만 확보하면 실현 가능성이 충분히 존재합니다.
💥 영향 분석
- 성공 시
BUG at net/core/skbuff.c가 발생하여 시스템 전체가 강제 재부팅된다. - 서비스 중단이 즉시 발생하고, 복구 전까지 모든 사용자와 프로세스가 영향을 받는다.
- 취약한 커널 버전(3.7.1‑6.18.4 및 이후 6.x 계열)이 다수 배포판에 포함돼 있어 광범위한 환경에서 DoS 위험이 존재한다.
🔗 관련 취약점·체이닝
- 추정: CWE‑787 (Out‑of‑bounds Write) – 헤드룸 계산 오류로 SKB 구조를 초과 쓰기.
- 추정: CWE‑20 (Improper Input Validation) – 드라이버가 제공한
needed_headroom값을 충분히 검증하지 않음. - 체인 가능 패턴
- 메모리 손상 → 커널 코드 실행(함수 포인터 오염 등) : 현재는 확인되지 않았으나, 동일 힙 오버플로를 이용한 다른 CVE와 결합하면 LPE가 이론적으로 가능할 수 있다(추정).
🔎 탐지
dmesg·/var/log/kern.log에서"BUG at net/core/skbuff.c"혹은"skb_under_panic"문자열이 기록되는지 실시간 모니터링.auditd또는ftrace로mld_newpack,ip6gre_header호출 흐름을 추적하고, 짧은 헤드룸(hard_header_len< 40) 을 가진ip6gre디바이스가 생성될 때 알림.
🛡️ 완화 방안
- 즉시: 해당 커널 버전을 최신 보안 패치가 적용된 릴리즈로 업데이트한다(패키지 매니저 혹은 공식 커널 소스).
- 임시:
sysctl -w net.ipv6.conf.all.disable_ipv6=1로 IPv6 GRE 사용을 차단하거나,modprobe -r ip6_gre로 모듈을 언로드한다. - 추가: SELinux/AppArmor 정책으로
/sys/class/net/*/needed_headroom·hard_header_len쓰기 권한을 제한하고,team·bonding인터페이스에서 헤드룸 자동 조정 기능을 비활성화한다.
교차검증 결과 다중 소스에서 일관성이 확인됐으며, EPSS 0.00114(실측 악용 가능성 낮음)와 “monitor” 우선순위 결정 로직(CVSS 5.5·non‑KEV·exploit=hard)을 근거로 위 대응을 권고합니다.
⚖️ 위험도 / 우선순위
- 조치: monitor (모니터링)
- 근거: CVSS=5.5 · non-KEV · EPSS=0.00114 · exploit=hard · in_scope=None