[단독공격] 분석 — CVE-2025-21760
CVE-2025-21760 is a use‑after‑free in ndisc_send_skb that enables remote kernel code execution through crafted IPv6 Neighbor Discovery packets, and the upstream kernel patch must be applied without delay.
📋 요약
- 심각도 high · CVSS 8.1 · EPSS 0.33417 · 악용난이도 moderate
🔍 공격 기법
-
공격 표면
ndisc_send_skb()함수가 호출되는 경로는 IPv6 Neighbor Discovery (ICMPv6 NS/NA) 처리이며, 네트워크 인터페이스를 통해 외부에서 자유롭게 패킷을 전송할 수 있습니다 (AV:N).- 취약점은 RCU 보호가 없어진 상태에서
skb(socket buffer)가 해제된 뒤 재사용될 때 발생합니다.
-
원리
- 기존 구현에서는
rcu_read_lock()을 늦게 획득하고,dev_net_rcu()사용 전까지ndisc_send_skb()가 호출될 수 있어skb가 이미 free 된 시점에 접근하게 됩니다. 이는 Use‑After‑Free (UAF) 로 이어지며, 공격자는 커널 힙에 자신이 제어하는 구조체를 삽입해 함수 포인터 등을 조작할 수 있습니다.
- 기존 구현에서는
-
공격 단계
- 정찰 – 대상 호스트가 IPv6 를 활성화하고
net.ipv6.conf.*파라미터가 기본값(accept_ra=1)인지를 확인합니다. (sysctl -a | grep net.ipv6.conf). - 초기 접근 – RAW/UDP 소켓을 이용해 임의의 ICMPv6 Neighbor Solicitation 혹은 Advertisement 를 전송합니다. 패킷에 비정상적인 옵션 길이(
opt.len > 10) 또는 중복 주소 정보를 삽입해ndisc_send_skb()내부 로직을 유도합니다. - 경쟁 조건 유도 – 다수의 스레드/프로세스로 동일한 ND 흐름을 동시에 발생시켜, 커널이
skb를 free 한 직후 다른 스레드가ndisc_send_skb()를 호출하도록 타이밍을 맞춥니다. 이는AC:H로 평가된 고난이도 레이스이며, 네트워크 지연 조절 및 병렬 전송으로 실현 가능합니다. - 코드 실행 – UAF 를 통해 커널 힙에 공격자가 준비한 가짜 구조체(예:
net_device_ops의 함수 포인터)를 삽입하고, 이후 RCU 콜백(call_rcu()) 혹은 직접적인 포인터 역참조를 이용해 임의 코드를 실행합니다. 결과적으로 루트 권한을 획득하거나 커널 모듈 로드가 가능해집니다 (C:H/I:H/A:H). - 영향 – 시스템 전체 장악, 민감 데이터 탈취·파괴, 서비스 거부 등 전면적인 피해가 발생합니다.
- 정찰 – 대상 호스트가 IPv6 를 활성화하고
-
CVSS ↔ 실제 조건 매핑
AV:N: 네트워크만 있으면 원격 공격 가능.AC:H: 레이스 타이밍 확보 필요 → 고난이도지만 자동화 스크립트와 병렬 전송으로 실현 가능.PR:N,UI:N: 사전 권한·사용자 상호작용 불필요.
-
근거 – 다중 소스에서 일관성이 확인된 교차검증([교차검증])과 EPSS 0.33417(백분위 0.9821)이라는 높은 실측 악용 예측값([실측 악용예측])이 존재합니다. 따라서 실제 공격 구현 가능성을 ‘moderate’ 수준으로 판단하였습니다.
악용 가능성: AV가 Network이므로 공격자는 대상 호스트에 IPv6 Neighbor Discovery(ND) 패킷을 전송하기만 하면 됩니다. 다만 AC가 High인 만큼 ndisc_send_skb() 내부에서 RTNL·RCU 보호 없이 호출되는 시점을 정확히 레이스시키는 고난도 타이밍 조건이 필요합니다. PR은 None으로 권한 요구가 없지만, UI가 None이므로 사용자의 직접적인 행동을 유발할 여지는 없습니다. EPSS 0.33417(33 % 수준)과 KEV 미등재를 고려하면 실제 공격이 발생할 가능성은 중간 정도이며, 이는 이론적 심각도와 별개로 공격자가 충분히 시도할 만한 가치가 있음을 의미합니다. 노출되는 엔드포인트는 IPv6 ND 패킷을 처리하는 커널 네트워크 스택이며, 조작 가능한 파라미터는 ICMPv6 옵션 및 라우터 광고/응답 필드입니다. 공격 흐름은 (1) 대상 호스트가 IPv6를 활성화했는지 탐색 → (2) 정밀하게 구성한 ND 패킷을 전송하여 레이스 조건을 유발 → (3) Use‑After‑Free로 커널 메모리를 손상시켜 권한 상승 또는 서비스 거부 상태에 도달, 필요 시 추가 힙·ROP 체이닝으로 완전한 코드 실행을 달성하는 순서가 됩니다.
💥 영향 분석
- 성공 시 커널 레벨 원격 코드 실행(RCE)이 이루어져 전체 시스템 장악이 가능합니다.
- 즉시 루트 쉘 확보, 임의 모듈 로드, 파일·디바이스 접근 권한 상승 등이 가능해지며, 서비스 거부(커널 패닉) 또한 발생할 수 있습니다.
🔗 관련 취약점·체이닝
- 동일 CWE‑124 (Memory Corruption) 계열 결함과 연계될 경우, 예를 들어
netfilter혹은 다른 네트워크 서브시스템에서 발생하는 RCU‑race UAF와 결합하면 초기 권한 없이도 커널 힙을 조작할 수 있습니다. - 가능한 체인 패턴
- 정보 노출 –
/proc/kallsyms등에서 커널 주소가 유출된 경우, KASLR 우회에 활용됩니다. - 권한 상승 – 위 UAF 로 확보한 루트 권한을 이용해
cap_sys_admin없이도 특권 디바이스(/dev/mem) 접근이 가능해집니다. - 지속성 – 확보된 루트 권한으로 영구적인 커널 모듈(예: rootkit)을 로드하거나, sysctl 값을 영구 변경하여 재부팅 후에도 공격 효과를 유지할 수 있습니다.
- 정보 노출 –
- 추정: 동일 메모리 할당·해제 흐름을 공유하는 다른 네트워크 서브시스템 결함이 존재한다면 복합적인 체이닝이 현실적입니다.
🔎 탐지
- 커널 로그에
BUG: use after free혹은ndisc_send_skb와 연관된 스택 트레이스가 기록될 경우. - eBPF/tracepoint(
net:ndisc_send_skb)에서 RCU 락 보유 여부를 검사하고, 비정상적인 연속 호출이 감지되면 경보. - IDS(예: Suricata) 규칙:
icmpv6.type == 135 && icmpv6.opt.len > 10혹은 옵션 필드가 비정상적으로 긴 경우 알림.
🛡️ 완화 방안
- 패치 적용 – 해당 커널 버전 이상으로 업데이트(2.6.26‑5.4.291, 5.5‑5.10.235, 5.11‑5.15.179, 5.16‑6.1.129, 6.2‑6.6.79, 6.7‑6.12.16, 6.13‑6.13.4).
- 임시 방어 –
sysctl -w net.ipv6.conf.all.accept_ra=0및net.ipv6.conf.default.accept_ra=0로 IPv6 라우터 광고·ND 처리를 비활성화(네트워크 환경에 따라 영향 검토 필요). - 보안 모듈 – SELinux/AppArmor 프로파일에서
ndisc관련 시스템 콜을 제한하고,cap_sys_admin없이 실행되지 않도록 정책 강화. - 모니터링 – 위 탐지 항목을 SIEM에 연동하고, 의심스러운 레이스 타이밍 이벤트 발생 시 즉시 커널 재부팅 또는 서비스 격리를 수행.
위 조치를 이번 주 내에 진행하면, EPSS 0.33417와 CVSS 8.1 기반 위험도 평가에 따라 우선순위가 ‘scheduled’ 로 지정된 바와 같이 실질적인 공격 차단이 가능합니다.
⚖️ 위험도 / 우선순위
- 조치: scheduled (이번 주 내)
- 근거: CVSS=8.1 · non-KEV · EPSS=0.33417 · exploit=moderate · in_scope=None