[방어] 분석 — CVE-2026-31415
The IPv6 opt_flen overflow in Linux kernels (CVE-2026-31415) enables a locally triggerable kernel panic and, potentially, privilege escalation; the highest‑priority mitigation is to disable IPv6 immediately via sysctl.
📋 요약
- 심각도 medium · CVSS 5.5 · EPSS 0.00114 · 악용난이도 hard
🔍 공격 기법
IPv6 소켓의 sendmsg() 호출 시 다수의 IPV6_DSTOPTS ancillary data 를 전달하면 struct ipv6_txoptions::opt_flen(16 bit) 가 랩오버한다. 이후 __ip6_append_data() 에서 잘못된 헤더 길이를 사용해 skb_under_panic() 이 호출되어 커널이 패닉(panic) 상태가 된다. 공격자는 로컬 권한(Low‑privilege)만으로 반복적인 sendmsg() 를 수행하면 서비스 거부(DoS)를 일으킬 수 있다.
악용 가능성: 이 취약점은 AV:L (로컬 공격)·AC:L (낮은 복잡도)·PR:L (저권한)·UI:N (사용자 개입 없음)으로 평가되었으므로, 로컬 계정만 있으면 별도의 특수 권한 없이도 sendmsg 시스템 콜을 이용해 악의적인 IPV6_DSTOPTS cmsg를 여러 번 삽입하면 충분히 트리거할 수 있습니다. 실제 악용 가능성은 EPSS 0.00114 (0.114 %) 수준으로 매우 낮으며, KEV에 등재되지 않은 점을 보면 현재까지 광범위한 공격이 보고되거나 자동화된 위협에 활용되고 있지는 않다는 것을 의미합니다. 그러나 로컬 사용자가 IPv6 소켓을 열고 IPV6_DSTOPTS 옵션을 제어할 수 있는 환경이라면, 해당 옵션을 과다하게 전송함으로써 opt_flen (16‑bit) 가 랩오버되어 커널 패닉을 유발하는 DoS 공격이 이론적으로 가능합니다. 공격 표면은 Linux kernel IPv6 스택의 ip6_datagram_send_ctl() 함수이며, 이는 AF_INET6 소켓을 사용하는 모든 프로세스가 접근할 수 있는 엔드포인트이므로 특별히 제한된 서비스가 아니면 폭넓게 노출
💥 영향 분석
- 서비스 가용성: 커널 패닉 → 즉시 시스템 재부팅 필요, 가용성 전면 상실.
- 권한 상승 가능성: 추정:
opt_flen오버플로우가 힙 메모리 경계 침범을 초래하면, 특수히 조작된 IPv6 옵션으로 커널 힙 오염 및 로컬 권한 상승(LPE) 체인이 구성될 수 있다(현재 공개 PoC는 없음).
🔗 관련 취약점·체이닝
- 동일한 정수 오버플로우 패턴을 이용하는 과거 IPv6 옵션 처리 버그와 연계되어, 메모리 손상 후 다른 커널 권한 상승(CWE‑190) 취약점과 체인될 가능성이 있다.
- 추정:
sendmsg호출 제한 정책(SELinux/AppArmor)이나 네트워크 네임스페이스 격리와 결합하면 공격 표면을 감소시킬 수 있다.
🔎 탐지
로그 지표
/var/log/kern.log·dmesg:skb_under_panic혹은ip6_datagram_send_ctl.*overflow문자열 포함.audit.log:sendmsg시스템 콜이 AF_INET6(값 = 10)와 함께cmsg_len > 0인 경우 기록.
SIEM 탐지 규칙 예시 (예: Azure Sentinel, Splunk, Elastic)
- Kernel Oops 패턴
1source = syslog 2| where Message matches regex "ip6_datagram_send_ctl.*overflow|skb_under_panic" 3| summarize Count() by Host, bin(TimeGenerated, 5m) 4| where Count > 0- Auditd sendmsg 이상 징후
1source = auditd 2| where EventID == "sendmsg" and a0 == 10 // a0 = AF_INET6 3 and exists (select cmsg_len from AncillaryData where cmsg_len > 0) 4| summarize Count() by Host, bin(TimeGenerated, 1m) 5| where Count > 5 // 환경에 따라 임계값 조정- 연속 호출 레이트 감시
1source = auditd 2| where EventID == "sendmsg" and a0 == 10 3| summarize Rate = count() / 60 by Host, bin(TimeGenerated, 1m) 4| where Rate > 30 // 정상 애플리케이션은 이보다 낮음오탐 튜닝
- 정상 IPv6 기반 서비스(예: systemd‑resolved)는
IPV6_DSTOPTS를 거의 사용하지 않으므로, 위 규칙에서cmsg_len > 0만을 필터링하면 오탐이 최소화된다. - 알림 빈도가 과도할 경우 레이트 임계값(예: 30 calls/min) 을 환경 평균보다 2배 이상 높은 값으로 상향한다.
eBPF 기반 실시간 감시 (옵션)
kprobe:ip6_datagram_send_ctl에서opt_flen값이 0xFFFF에 근접하면bpf_trace_printk로 경고를 전송하도록 간단한 프로그램을 배포할 수 있다(구현 난이도 중간, 커널 4.14 이상 지원).
🛡️ 완화 방안
즉시(긴급 차단) – 오늘 당장 적용할 임시 조치
- IPv6 비활성화:
1sysctl -w net.ipv6.conf.all.disable_ipv6=1 2sysctl -w net.ipv6.conf.default.disable_ipv6=1구현 난이도: 매우 쉬움.
운영 영향: 모든 IPv6 트래픽 차단 → IPv6를 필요로 하는 서비스는 즉시 중단됨. 사전 검증 필수.
검증 방법: ip a 실행 시 IPv6 주소가 표시되지 않는지 확인.
단기(패치 전 완화)
- 목적지 옵션 수신 비활성화:
1sysctl -w net.ipv6.conf.all.accept_dstopts=0 2sysctl -w net.ipv6.conf.default.accept_dstopts=0구현 난이도: 쉬움.
운영 영향: IPV6_DSTOPTS 를 필요로 하는 라우팅/진단 툴이 동작하지 않을 수 있음.
검증 방법: sysctl net.ipv6.conf.all.accept_dstopts 로 값 확인 후, 일반 IPv6 통신(ping6) 이 정상 수행되는지 테스트.
- SELinux/AppArmor 정책 강화 (선택):
ipv6_recvpktinfo등 불필요한 sockopt 사용을 제한하는 정책 추가.
구현 난이도: 중간.
운영 영향: 기존 애플리케이션이 해당 옵션에 의존하면 오류 발생 가능.
근본(패치·업그레이드)
- 공급업체가 제공한 커밋
ipv6: avoid overflows in ip6_datagram_send_ctl()이 포함된 커널 버전으로 업데이트한다. 적용 대상 커널 범위는 2.6.14‑5.10.253, 5.11‑5.15.203, 5.16‑6.1.168, 6.2‑6.6.134, 6.7‑6.12.81, 6.13‑6.18.22, 6.19‑6.19.12 등이다. - 패치 적용 시 롤링 재시작 전략을 사용해 서비스 가용성 손실을 최소화한다(예: 무중단 업데이트를 지원하는 kexec 또는 livepatch).
검증 및 운영
- 패치 전후
dmesg에서 해당 오버플로우 메시지가 사라졌는지 확인. - 재시작 후
sysctl net.ipv6.conf.all.disable_ipv6=0로 IPv6 복구 시 정상적인ping6테스트 수행.
잔여 리스크
- 패치가 적용되지 않은 오래된 커널이 여전히 존재한다면, 즉시 위 긴급 차단(IPv6 비활성화)으로 위험을 억제해야 한다.
- 권한 상승 가능성을 완전히 배제할 수 없으므로, 취약 노출 시스템에 대한 정기적인 권한 검증 및 메모리 무결성 체크를 병행한다.
⚖️ 위험도 / 우선순위
- 조치: monitor (모니터링)
- 근거: CVSS=5.5 · non-KEV · EPSS=0.00114 · exploit=hard · in_scope=None