[공격] 분석 — CVE-2026-31466
CVE-2026-31466 is a local race condition in the Linux kernel’s THP handling that can be triggered by an unprivileged process to cause a kernel panic, mitigated by applying the upstream patch or disabling hugepage splitting.
📋 요약
- 심각도 medium · CVSS 4.7 · EPSS 0.00094 · 악용난이도 hard
🔍 공격 기법
- 공격 표면:
mm/huge_memory내부 함수softleaf_to_folio()·zap_nonpresent_ptes()가 실행되는 커널 경로. 직접적인 사용자 인터페이스는 없으며, 로컬 프로세스가 메모리 매핑(예:mmap,madvise(MADV_HUGEPAGE))을 통해 THP를 생성/분할하면 트리거될 수 있다. - 전제 조건
- 대상 시스템이 ARM64이며 커널 버전 4.5‑6.19.11 중 하나이고, 아직 패치가 적용되지 않은 경우.
- 공격자는 로컬에서 일반 사용자 권한(Low Privilege)만 보유한다(PR:L).
- 시스템에 Transparent Huge Pages(THP)가 활성화돼 있어
mTHP분할이 발생할 수 있다.
- 단계
1️⃣ 정찰 –uname -r,/proc/cpuinfo로 커널·아키텍처 확인;/sys/kernel/mm/transparent_hugepage/enabled로 THP 활성화 여부 판단.
2️⃣ 초기 접근 – 일반 사용자 쉘 또는 컨테이너 안에서 대용량 메모리 매핑을 수행(mmap+MADV_HUGEPAGE). 이는deferred_split_scan()를 유발한다.
3️⃣ 경쟁 조건 유도 – 동시에 다른 스레드/프로세스가 동일 페이지를munmap혹은madvise(MADV_DONTNEED)로 해제하여zap_nonpresent_ptes()가 실행되도록 만든다. 두 작업을 시간차 없이 진행하면softleaf_to_folio()가 메모리 배리어 없이 migration entry 를 읽어 잠금되지 않은 folio 를 반환한다.
4️⃣ 실행·권한 획득 – 잠금되지 않은 folio 에 대한 커널 내부 구조를 조작해 페이지 테이블을 손상시키면, 커널 OOPS/패닉이 발생하고 서비스 가용성이 중단된다(A:H). 실제 코드 실행 권한은 얻지 못하지만, DoS 효과가 확보된다. - CVSS ↔ 공격 조건 매핑 –
AV:L(로컬),AC:H(경쟁 상황을 정확히 동기화해야 함),PR:L(일반 사용자),UI:N,A:H(패닉).
악용 가능성: AV:L·AC:H·PR:L·UI:N 벡터는 이 취약점이 로컬 환경에서만 발현되며, 공격 성공을 위해서는 CPU 0과 CPU 1 사이의 deferred_split_scan()와 zap_nonpresent_ptes()가 동시에 진행되는 레이스 상황을 정확히 맞춰야 함을 의미합니다. 즉, 일반 사용자 권한(Low privilege)으로도 해당 경로에 진입할 수는 있으나, 메모리 배리어 부재를 이용해 softleaf_to_folio()와 split_folio() 사이의 타이밍을 조작해야 하므로 공격 복잡도가 매우 높습니다(High Complexity). EPSS 0.00094와 KEV 미등재는 현재까지 실제 악용 사례가 거의 없으며, 연구 단계에서만 관찰된 위험임을 뒷받침합니다. 노출되는 공격 표면은 커널 내부 함수 softleaf_to_folio(), split_folio(), zap_nonpresent_ptes()와 이들에 연계된 페이지 테이블 엔트리(PTE) 변환 로직이며, 사용자 공간에서는 MAP_HUGETLB 플래그가 설정된 메모리 매핑을 통해 간접적으로 트리거될 수 있습니다. 따라서 공격자는 로컬에서 THP(Transparent Huge Pages)를 활성화하고
💥 영향 분석
- 성공 시 커널 패닉이 발생해 해당 노드가 재부팅될 때까지 서비스가 중단된다.
- 컨테이너·VM 환경에서는 동일 호스트의 모든 워크로드가 영향을 받아 가용성 손실이 확대될 수 있다(특히 공유 메모리 사용 시).
- 기밀성·무결성은 직접적인 피해가 없으며, 주된 위험은 서비스 거부이다.
🔗 관련 취약점·체이닝
- 동일한 메모리 배리어 결함을 이용하는 다른 커널 레이스(예:
__split_huge_page()관련)와 조합하면 다중 페이지 손상 → 커널 루트 권한 상승 가능성이 있다(추정). CWE‑362(Race Condition)·CWE‑667(Improper Locking) 유형에 속한다. 현재 확인된 CVE 번호는 없으므로, 일반적인 레이스 기반 DoS와 메모리 관리 결함 체인으로만 서술한다.
🔎 탐지
dmesg혹은 커널 로그에서VM_WARN_ON_ONCE(!folio_test_locked(...))와 같은 경고 메시지가 발생하면 즉시 의심할 수 있다.- 비정상적인 OOPS/패닉 기록과 함께 CPU0·CPU1 에서 동시다발적으로
zap_nonpresent_ptes가 호출된 스택 트레이스가 나타난다면 해당 레이스가 재현된 것이다.
🛡️ 완화 방안
- 즉시: 공급업체에서 제공하는 커널 패치를 적용하고 시스템을 재부팅한다(패치 적용이 불가능한 경우 kexec 기반 무중단 롤링 업데이트 고려).
- 근본 해결: 최신 커널(≥ 6.19.12 등)으로 업그레이드하거나,
livepatch가용 시 실시간 적용한다. - 보조 조치: Transparent Huge Pages 를 비활성화(
echo never > /sys/kernel/mm/transparent_hugepage/enabled)하거나, THP 분할을 제한하는 sysctl(vm.nr_hugepages,vm.max_map_count등) 값을 낮춘다. - 운영 정책: 로컬 사용자에게 대용량 메모리 매핑 권한을 최소화하고, 컨테이너 환경에서는 cgroup‑v2 메모리 제한·SELinux/AppArmor 프로파일로 공유 페이지 매핑을 차단한다.
⚖️ 위험도 / 우선순위
- 조치: monitor (모니터링)
- 근거: CVSS=4.7 · non-KEV · EPSS=0.00094 · exploit=hard · in_scope=None