[단독방어] 분석 — CVE-2025-68725
CVE-2025-68725 allows unprivileged eBPF programs to craft malformed GSO packets that trigger kernel offload warnings and disable GSO, therefore the highest‑priority immediate mitigation is to block non‑root eBPF loading via
kernel.unprivileged_bpf_disabled=1.
📋 요약
- 심각도 medium · CVSS 5.5 · EPSS 0.00168 · 악용난이도 hard
🔍 공격 기법
bpf_test_infra 로 로드된 eBPF 프로그램이 bpf_clone_redirect() 를 호출해 패킷을 루프백(lo) 인터페이스로 전달합니다. 변환 과정인 convert___skb_to_skb() 가 gso_type 을 초기화하지 않아 GSO 속성이 비정상(gso_segs, gso_size만 설정)되고, 이후 netif_skb_features() → gso_features_check() 에서 skb_warn_bad_offload 경고가 발생합니다. 이 경고로 인해 커널은 해당 흐름의 GSO‑related offload 기능을 비활성화합니다.
악용 가능성: 이 취약점은 CVSS 벡터 AV:L/AC:L/PR:L/UI:N 로 표시되므로 공격자는 동일한 호스트에 물리·논리적으로 접근할 수 있는 경우, 복잡한 사전 준비 없이도 낮은 난이도로 악용할 수 있습니다. 그러나 PR:L 은 로컬 사용자라도 최소 권한(예: 일반 사용자)만으로는 BPF 프로그램을 커널에 로드하기 어렵다는 점을 의미하므로, 실제 공격자는 보통 root 혹은 CAP_BPF·CAP_SYS_ADMIN 과 같은 특권을 이미 획득해야 합니다. EPSS 0.00168 은 전 세계적으로 이 취약점이 실질적으로 악용될 가능성이 매우 낮음을 보여주며, KEV 에 등재되지 않은 점도 현재까지 대규모 공격 캠페인이 보고되지 않았다는 사실과 일치합니다. 공격 표면은 BPF 테스트 인프라를 통해 bpf_clone_redirect() 로 패킷을 루프백 인터페이스에 전달할 때 발생하는 GSO 메타데이터(gso_segs, gso_size는 설정되지만 gso_type이 누락된 경우)이며, 이는 커널 내부의 skb_warn_bad_offload() 경고를 유발합니다. 따라서 노출되는 엔드포인트는 로컬 시스템 내 BPF 프로그램 로딩 인터페이스와 루프백 디바이스이며, 외부 네트워크를 통한 직접적인 접근은 존재하지 않습니다. 요약하면, 공격자는 로컬 특권을 확보한 뒤 악의적인 BPF 코드를 실행해야 하며, 그 전제조건이 충족되지 않으면 이 취약점은 실질적으로 이용되기 어렵습니다.
💥 영향 분석
- 커널 로그에 반복적인 “skb_warn_bad_offload” 메시지가 쌓이며 관리자는 네트워크 성능 저하를 오인할 수 있습니다.
- GSO(General Segmentation Offload) 기능이 비활성화돼 대량 트래픽 처리 효율이 감소하고, 서비스 레이턴시가 상승합니다.
- 직접적인 원격 코드 실행은 없지만, 지속적인 offload 비활성화는 DoS 성격의 가용성 저하를 초래할 수 있습니다.
🔗 관련 취약점·체이닝
유사하게 GSO‑type 검증 부재가 존재하는 과거 커널 버그와 결합하면, 오프로드 비활성화 후 메모리 손상 버그 등을 이용해 권한 상승이나 추가 DoS 공격으로 연계될 가능성이 있습니다. (구체적 CVE 번호는 확인되지 않음)
🔎 탐지
-
로그 지표
dmesg혹은/var/log/kern.log에"skb_warn_bad_offload"문자열이 포함된 레코드가 기록됨(필드: message).auditd이벤트 type=1300 (bpf program load)와 동시에syscall=clone또는 netlinkRTM_NEWLINK가 발생하면 의심.
-
SIEM 쿼리 예시 (Splunk/Elastic 스타일)
text1index=kernel_logs sourcetype=kern.log "skb_warn_bad_offload"2| stats count by host, _time3| where count > 5text1index=audit_events eventid=1300 msg="bpf_clone_redirect"2| join host [search index=kernel_logs "skb_warn_bad_offload"]3| table host,_time,msg -
정규식 / 의사코드
xss1if re.search(r"skb_warn_bad_offload", log.message):2 alert("Malformed GSO packet from eBPF") -
오탐 튜닝
- 개발·테스트 서버에서 정상적인 BPF 테스트가 수행되는 경우
host혹은process레이블을 화이트리스트에 추가. - 단일 이벤트만 발생하거나 짧은 시간(예: 10분) 내 재발하지 않을 경우 “low severity” 로 분류하고, 동일 호스트에서 일정 기간 내 다중 발생 시 알림 단계 상승.
- 개발·테스트 서버에서 정상적인 BPF 테스트가 수행되는 경우
🛡️ 완화 방안
-
즉시(긴급 차단)
sysctl kernel.unprivileged_bpf_disabled=1로 비특권 사용자의 eBPF 프로그램 로드를 차단합니다.- 난이도: 낮음, 운영 영향: 일부 개발·테스트 워크로드 제한 가능 → 사전 공지 필요.
- 검증:
sysctl -a | grep unprivileged_bpf_disabled로 값이1인지 확인하고, eBPF 프로그램 로드 시 “Operation not permitted” 오류가 발생하는지 테스트합니다.
-
단기(완화)
- SELinux/AppArmor 정책을 수정해
bpf_clone_redirect가 루프백(lo) 외 인터페이스로 패킷을 전송하는 것을 차단합니다.- 난이도: 중간, 운영 영향: 정책 적용 전 테스트 필요, 서비스 재시작 없이 적용 가능.
- 검증:
/var/log/audit/audit.log에 차단 이벤트가 기록되는지 확인.
sysctl net.core.bpf_jit_disable=1로 BPF JIT 컴파일을 비활성화합니다.- 난이도: 낮음, 운영 영향: 대부분 환경에서 성능 저하 미미.
- 검증:
sysctl net.core.bpf_jit_disable값 확인 및 커널 로그에 “BPF JIT disabled” 메시지 존재 여부 확인.
- SELinux/AppArmor 정책을 수정해
-
근본(해결)
패치가 포함된 최신 커널 버전으로 업그레이드합니다. 지원 범위는 5.6‑5.10.249, 5.11‑5.15.199, 5.16‑6.1.162, 6.2‑6.6.122, 6.7‑6.12.68, 6.13‑6.18.2 중 최신 마이너 릴리즈 적용이 권장됩니다.- 난이도: 높음, 운영 영향: 재부팅 및 호환성 테스트 필요 → 일시적 가용성 저하.
- 검증:
uname -r로 커널 버전 확인 후,dmesg | grep "gso: validate gso_type"로 패치 적용 여부를 검증합니다.
-
잔여 리스크
위 조치를 모두 적용해도 향후 다른 경로에서 GSO‑type 검증 누락이 발생할 가능성이 있습니다. 따라서 정기적인 커널 보안 업데이트와 eBPF 프로그램 검증 프로세스를 운영에 포함시키는 것이 필요합니다. EPSS 0.00168(실측 악용 확률)과 CVSS 5.5(중간 위험도)를 고려하면, 즉시 차단 후 패치 적용을 순차적으로 진행하는 것이 최적의 대응 전략입니다.
⚖️ 위험도 / 우선순위
- 조치: monitor (모니터링)
- 근거: CVSS=5.5 · non-KEV · EPSS=0.00168 · exploit=hard · in_scope=None