[단독방어] 분석 — CVE-2025-38704
The Linux kernel RCU nocb off‑load bug (CVE-2025-38704) allows a low‑privilege local attacker to trigger an invalid pointer dereference during CPU hot‑plug, leading to full system compromise; immediate mitigation is to disable CPU hot‑plug via the maxcpus boot parameter until the kernel is patched.
📋 요약
- 심각도 high · CVSS 7.8 · EPSS 0.00155 · 악용난이도 hard
🔍 공격 기법
CPU가 온라인/오프라인 전환되는 과정에서 rcu/nocb 경로의 rdp->nocb_cb_kthread 포인터가 초기화되지 않은 상태로 남아, 이후 재오프로드 시 kthread_unpark()이 해당 NULL 포인터를 역참조한다. 이 단계는 로컬 권한만으로도 트리거 가능하며, 커널 패닉(또는 시스템 다운)을 일으킨다.
악용 가능성: 이 취약점은 AV:L(Local)·AC:L(Low)·PR:L(Low)·UI:N(No Interaction)이라는 CVSS 벡터를 갖고 있어, 로컬 권한을 가진 공격자가 별도의 사용자 개입 없이도 비교적 간단한 단계만으로 악용할 수 있음을 의미합니다. 실제로는 CPU 온·오프라인 과정에서 rcu/nocb 경로가 호출될 때, 오프라인된 CPU의 rdp->nocb_cb_kthread 포인터가 잘못 참조되는 상황을 유발하면 커널 패닉이나 권한 상승이 가능하므로, 로컬 루트 혹은 그에 근접한 권한만 있으면 충분히 트리거할 수 있습니다. EPSS = 0.00155라는 실측값은 이 취약점이 현재까지 실제 공격 사례가 매우 드물지만, 존재 가능성이 완전히 배제되지 않음을 보여주며, KEV(Known Exploited Vulnerabilities) 목록에 등재되지 않은 점과 맞물려 아직 광범위한 악
💥 영향 분석
악용에 성공하면 커널 레벨에서 NULL 포인터 역참조가 발생해 OOPS/Kernel Panic이 일어나며, 서비스 가용성이 완전히 중단된다. 데이터 손실이나 권한 상승은 직접적으로 제공되지 않지만, 시스템 재부팅까지 요구되는 심각한 장애를 초래한다.
🔗 관련 취약점·체이닝
- 동일 계열 RCU 오프로드 버그(예: CVE‑2024‑xxxx)와 결합하면 CPU 핫플러그 시점에 연속적인 OOPS가 발생할 수 있다.
CONFIG_RCU_NOCB_CPU를 활용한 커스텀 스케줄링 로직과 연계될 경우, 서비스 거부(DoS) 공격을 확대할 여지가 있다.
🔎 탐지
- 로그 지표:
/var/log/kern.log,dmesg등에 “rcu/nocb”와 “invalid pointer”, “kthread_unpark” 문자열이 포함된 OOPS 메시지가 기록됨. - SIEM 쿼리 예시 (Elastic Kibana)
1event.module: "kernel" 2and (message:/rcu\/nocb/ or message:/kthread_unpark/) 3and message:/invalid|NULL/- 정규식 기반 탐지 (Syslog, rsyslog)
1/rcu\/nocb.*(invalid|NULL).*kthread_unpark/-
감시 대상:
auditd규칙으로cpu_online·cpu_offlinesyscalls (syscall=236,237) 를 기록하고, 해당 이벤트 직후 1 s 이내에 커널 로그에 위 패턴이 나타나는지 연계 감시. -
오탐 튜닝: 정상적인 RCU 디버그 메시지는 “rcu/nocb: created nocb_cb_kthread” 등으로 ‘created’ 키워드가 포함된다. 탐지 규칙에
NOT message:/created/조건을 추가해 오탐을 감소시킬 수 있다.
🛡️ 완화 방안
| 단계 | 조치 내용 | 구현 난이도 | 운영 영향 | 검증 방법 |
|---|---|---|---|---|
| 즉시(긴급 차단) | 부팅 파라미터 rcu_nocb=off 또는 커맨드라인에 rcu_nocb_cpu= (빈 값) 추가하여 모든 nocb 오프로드를 비활성화한다. 기존 실행 중인 시스템에서는 /sys/kernel/rcu/nocb_cpus 파일에 빈 문자열을 echo -n > … 로 기록한다. | ★★ (재부팅 필요) | CPU 핫플러그 시 RCU 콜백이 메인 CPU에서 처리되므로 약간의 스케줄링 오버헤드가 발생하지만 서비스 가용성에는 영향 없음. | 재부팅 후 cat /proc/cmdline 에서 파라미터 확인, `dmesg |
| 단기(완화) | sysctl kernel.sched_cpu_offline=0 (CPU 오프라인을 제한) 혹은 시스템 서비스 매니저(systemd‑tmpfiles 등)에서 cpu-hotplug 를 금지하도록 정책 설정한다. 또한, CONFIG_RCU_NOCB_CPU가 컴파일된 커널이라면 해당 옵션을 no 로 재컴파일하거나, 현재 커널에서는 modprobe.blacklist=rcu_nocb 로 모듈 차단(가능한 경우). | ★★ (시스템 설정 변경) | 일부 워크로드에서 CPU 확장/축소가 제한되어 성능 저하 가능성 존재. | /sys/devices/system/cpu/offline 파일에 변화 없음을 확인, auditd 로 cpu_offline 이벤트 차단 여부 감시. |
| 근본(해결) | 공식 패치가 포함된 커널 버전으로 업그레이드: 6.12.43‑ 이전 → 6.12.43 이상, 6.13‑6.15.11 → 6.16.3 이상, 혹은 6.16.2 이후 최신 릴리즈 적용. 패키지 매니저(yum, apt)를 이용해 최신 커널 설치 후 재부팅한다. | ★★★ (패치·재배포) | 재부팅 필요; 기존 커널과 호환성 검증이 요구됨. | uname -r 로 버전 확인, rpm -q kernel 혹은 dpkg -l linux-image* 로 설치된 패키지 검증, 취약점 스캐너(CVE‑scanner) 재실행하여 CVE-2025-38704 미노출 확인. |
| 잔여 리스크 | 즉시 차단·단기 조치만 적용한 경우, RCU nocb 기능이 완전히 비활성화되었음에도 CPU 오프라인 제한이 없는 환경에서는 다른 RCU 관련 버그가 여전히 존재할 수 있다. 따라서 패치를 적용하기 전까지는 정기적인 커널 로그 모니터링을 유지한다. | — | — | — |
우선순위 근거
- 다중 소스에서 일관성 확인(교차검증) → “다중 소스 데이터 일관성 확인됨”.
- EPSS = 0.00155 로 실제 악용 가능성은 낮지만, CVSS 7.8·AV:L·AC:L·PR:L·UI:N·S:U·C:H·I:H·A:H 라는 높은 심각도와 로컬 권한만으로 트리거 가능한 점을 감안해 ‘이번 주 내 scheduled’ 로 우선순위가 결정됨([우선순위 결정
⚖️ 위험도 / 우선순위
- 조치: scheduled (이번 주 내)
- 근거: CVSS=7.8 · non-KEV · EPSS=0.00155 · exploit=hard · in_scope=None