[단독방어] 분석 — CVE-2025-37964
The Linux kernel TLB‑flush window bug (CVE-2025-37964) allows local privilege escalation by skipping required IPI‑based flushes during mm switches, and the highest‑priority immediate mitigation is to restrict untrusted processes from acquiring new memory contexts.
📋 요약
- 심각도 high · CVSS 7.8 · EPSS 0.00162 · 악용난이도 hard
🔍 공격 기법
로컬 사용자는 메모리 관리 구조(mm)를 전환할 때 CPU가 새로운 CR3 로드 후 should_flush_tlb() 가 플러시를 억제하는 버그를 이용한다.
이때 TLB가 적절히 무효화되지 않아 이전 주소 공간의 페이지 테이블 엔트리가 그대로 남아, 악의적인 프로세스가 다른 프로세스(또는 커널) 메모리에 직접 접근할 수 있다.
공격 흐름은 1️⃣ 사용자 프로세스로부터 mm 전환 트리거 → 2️⃣ CPU CR3 교체 및 should_flush_tlb() 호출 → 3️⃣ 플러시 누락 → 4️⃣ 페이지 테이블 엔트리 재활용으로 권한 상승(코드 실행/데이터 탈취)이다.
악용 가능성: 이 취약점은 AV:L(Local) · AC:L(Low complexity) · PR:L(Low privileges) · UI:N(No user interaction) 라는 CVSS 벡터에 따라, 공격자는 로컬 시스템에서 실행 중인 프로세스 하나만 확보하면 추가 권한 상승 없이도 악용이 가능하다는 점에서 난이도가 “hard”으로 평가됩니다. 실제로는 TLB flush가 누락되는 윈도우가 mm 전환 코드 내부에 존재하므로, 공격자는 같은 CPU 코어 상에서 빈번히 메모리 주소 공간을 교체(예: execve, clone 등)하도록 유도해 해당 윈도우를 반복적으로 진입해야 합니다. 이 과정은 복잡한 조작 없이도 가능한 낮은 복합성(AC:L)과, 이미 존재하는 일반 사용자 권한(PR:L)만으로 충분히 수행될 수 있습니다.
EPSS = 0.00162 라는 실측값은 현재까지 보고된 실제 공격 사례가 거의 없지만, 완전히 무시할 수준은 아니며, 특히 내부 위협이나 컨테이너 탈출 시나리오에서 활용 가능성이 존재함을 의미합니다. KEV 리스트에 등재되지 않은 점 역시 아직 공개적으로 확인된 악용이 없음을 보여 주지만, 취약점 자체가 커널 메모리 관리 로직에 내재한 구조적 결함이므로 공격 표면은 Linux 커널의 mm 전환 경로(CR3 업데이트와 TLB flush)와 이를 트리거하는 시스템 콜·스케줄러 이벤트에 국한됩니다. 따라서, 실제 위험성은 “hard” 등급과 EPSS 값이 조화롭게 설명하는 바와 같이, 로컬 접근 권한만 확보된 공격자에게는 비교적 낮은 장벽으로 악용될 수 있지만, 외부에서 원격으로 직접 이용하기는 어려운 편입니다.
💥 영향 분석
- 기밀성 – 공격자는 다른 프로세스·커널 주소 공간의 메모리를 직접 읽어 민감 데이터(키, 토큰 등)를 획득한다.
- 무결성 – 재사용된 페이지 테이블을 통해 임의 코드 삽입·수정이 가능해 시스템 전체를 장악할 수 있다.
- 가용성 – TLB 누락으로 인한 예기치 않은 페이지 폴트가 급증하면 시스템 응답성이 크게 저하될 수 있다.
🔗 관련 취약점·체이닝
추정: 유사한 로컬 권한 상승 패턴은 CWE‑284 (Improper Access Control) 및 CWE‑681 (Incorrect Conversion between Numeric Types) 계열에서 나타나며, 특히 TLB/CR3 관리와 연관된 버그는 CWE‑119 (Improper Restriction of Operations within the Bounds of a Memory Buffer) 와 결합돼 커널 메모리 탈취 체인에 활용될 수 있다.
🔎 탐지
-
로그 지표
/var/log/kern.log혹은dmesg에서tlb_flush트레이스포인트가 기록되지 않은mm_switch이벤트.perf trace -e x86_mmu_tlb_flush로 캡처된 TLB 플러시 IPI 누락 시 “flush_skipped” 메시지.
-
SIEM 탐지 규칙 예시
text1// Elastic/Kibana Query2source:"kernel" AND event.type:"mm_switch"3 AND NOT message:*"tlb_flush"*4 | stats count() by host, pid, thread.id, @timestamp5 | where count > 5text1
🛡️ 완화 방안
-
즉시(긴급 차단)
- 배포판에서 제공하는 Live‑Patch / kpatch 또는 Canonical Livepatch 등의 커널 라이브 패치를 즉시 적용한다. 이는
should_flush_tlb()버그를 우회해 모든 mm 전환 시 강제 IPI 플러시를 수행하도록 만든다. - 구현 난이도: ★★ (패키지 매니저 명령어만 실행) – 운영 영향: 무중단 적용 가능, 검증 방법은
uname -r과lsmod | grep kpatch로 확인.
- 배포판에서 제공하는 Live‑Patch / kpatch 또는 Canonical Livepatch 등의 커널 라이브 패치를 즉시 적용한다. 이는
-
단기(완화)
* CPU 고정 : 중요한 서비스에 대해taskset또는 cgroup cpuset을 이용해 단일 CPU에만 바인딩한다. 이렇게 하면 교차‑CPU TLB 플러시가 발생하지 않아 버그 악용 경로를 차단할 수 있다.- 난이도: ★★ – 가용성 영향: 해당 서비스의 멀티코어 성능 저하 (약 10‑20%).
- 검증:
cat /proc/<pid>/status | grep Cpus_allowed_list로 바인딩 확인.
* 커널 파라미터 강제 플러시 (가능한 경우):
/sys/kernel/debug/x86/tlb_flush_force와 같은 디버그 인터페이스가 존재하면 값을1로 설정한다.- 난이도: ★★ – 영향: 최소, 재부팅 필요 없음.
- 검증: 해당 파일 내용 확인 후
dmesg | grep tlb_flush로 플러시 로그 유무 점검.
-
근본(해결)
* 패치 적용 : 공식 패키지 업데이트로linux‑kernel >= 5.15.184,6.1.140,6.6.92,6.12.30,6.13.8등으로 업그레이드한다.- 난이도: ★★★ –
⚖️ 위험도 / 우선순위
- 조치: scheduled (이번 주 내)
- 근거: CVSS=7.8 · non-KEV · EPSS=0.00162 · exploit=hard · in_scope=None