Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
KVM-Januscape — CVE-2026-53359 취약점 패치 | Kitploit
도구/GitHubGitHub/xj2268-ta/kvm-januscape
Vulnerability AnalysisExploitationBinary Analysis
GitHubxj2268-ta/kvm-januscape

KVM-Januscape

CVE-2026-53359 취약점 패치

저장소 보기
21개월 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

KVM-XJ 핫패치

dump_tool.py는 오프셋을 자동으로 찾는 도구입니다. 사용법은 코드를 직접 확인하세요.

취약점 개요

CVE-2026-53359(Januscape)는 Linux 커널 KVM 섀도 MMU에서 발생하는 use-after-free(UAF) 취약점입니다.

  • 잠복 기간: 16년(2010년 8월 ~ 2026년 7월)
  • 영향 범위: 중첩 가상화(nested virtualization)가 활성화된 모든 Intel/AMD x86 시스템
  • 위험 등급: 높음. VM 내 root 사용자가 호스트로 탈출하여 호스트 root 권한을 획득할 수 있음
  • 악용 방식: 호스트 커널 패닉(DoS) 또는 완전한 VM 탈출(공개 PoC 없음)

취약점 원리

kvm_mmu_get_page() 함수는 해시 테이블에서 재사용 가능한 섀도 페이지 테이블을 찾을 때 gfn(게스트 물리 페이지 프레임 번호)만 비교하고 role(페이지 테이블 역할/MMU 역할)은 비교하지 않아, 역할이 일치하지 않는 페이지 테이블이 잘못 재사용되어 UAF가 발생합니다.

root@kitploit:~
修复前(有漏洞):
┌──────────────────────────────────────┐
│ kvm_mmu_get_page()                   │
│   遍历哈希表                          │
│   if (child->gfn == gfn)             │
│       return child  ← 只比较gfn!     │
│       角色不匹配也复用 → UAF!         │
│   分配新页(安全)                     │
└──────────────────────────────────────┘

상위 커널 커밋 81ccda30b4e8에서 role 비교 한 줄이 추가되었습니다:

root@kitploit:~
// 修复前
if (... && spte_to_child_sp(*sptep)->gfn == gfn)

// 修复后
if (... && spte_to_child_sp(*sptep)->gfn == gfn
       && spte_to_child_sp(*sptep)->role.word == role.word)

나의 수정 방법

방법: text_poke 바이너리 핫패치(NOP 패치)

커널 소스 코드를 수정하거나 함수를 교체하지 않고, 실행 중인 커널 메모리에서 취약한 명령어를 직접 변경합니다.

원리

root@kitploit:~
二进制层面:
偏移 0x104: 49 39 47 28          cmp %rax, 0x28(%r15)   ← 比较 gfn
偏移 0x108: 0f 84 9f 01 00 00    je   +0x19f            ← 匹配就跳转复用

打补丁后:
偏移 0x108: 66 0f 1f 44 00 00    NOP × 6               ← 什么也不做
root@kitploit:~
修复后:
┌──────────────────────────────────────┐
│ kvm_mmu_get_page()                   │
│   遍历哈希表                          │
│   if (child->gfn == gfn)             │
│       NOP(跳转被抹掉,滑过去)        │
│   分配新页(强制走安全路径)            │
│   → 不复用 = 不触发 UAF = 漏洞修复     │
└──────────────────────────────────────┘

기술 구현

  1. kallsyms_lookup_name를 통해 kvm_mmu_get_page 함수 주소를 찾습니다.
  2. kallsyms_lookup_name를 통해 text_poke 함수(커널 코드 핫 수정 API)를 찾습니다.
  3. stop_machine으로 모든 CPU를 중지하여 수정이 안전하도록 보장합니다.
  4. text_poke로 6바이트의 je 명령어를 6바이트의 NOP로 교체합니다.
  5. 언로드 시 text_poke로 원래 명령어를 복원합니다.

다른 방식을 사용하지 않는 이유

방식문제
커널 업그레이드 후 재부팅

영향 평가

배포 요구 사항

조건설명
커널 버전Linux 4.18+(CentOS 8 / RHEL 8 / Rocky 8 등)
컴파일 환경kernel-devel + gcc + make
호스트 재부팅필요 없음
VM 중지필요 없음

컴파일 및 로드

root@kitploit:~
# 编译
make

# 加载热补丁
insmod KVM-XJ.ko

# 查看状态
dmesg | grep KVM-XJ
cat /sys/module/kvm_intel/parameters/nested   # 应该还是 1
lsmod | grep KVM_XJ

# 卸载(恢复原始代码)
rmmod KVM_XJ

다른 커널에 적용

커널 버전마다 컴파일 최적화가 달라 je 명령어 오프셋도 다릅니다. dump_tool.py로 자동 분석합니다:

root@kitploit:~
# 1. 从母鸡下载 kvm.ko
scp root@母鸡:/lib/modules/.../kvm.ko.xz .
xz -d kvm.ko.xz

# 2. 运行分析工具
python dump_tool.py kvm.ko

# 3. 工具会输出 patch 偏移,修改 KVM-XJ.c 中的 0x108

검증된 커널

커널 버전je 오프셋상태
4.18.0-496.el8.x86_640x108테스트 완료
4.18.0-358.el8.x86_640xe8테스트 완료

주의 사항

  1. 사용법을 모르거나 코드를 읽지 못하는 경우 사용하지 않는 것을 권장합니다.
도구 다운로드
호스트 재부팅 필요, 모든 VM 중단
nested=0(중첩 가상화 비활성화)중첩 가상화 기능 상실, VM 안에서 VM을 실행할 수 없음
kpatch 방식kernel-debuginfo 필요, 컴파일 시간 10~20분, 의존성 복잡
ftrace 함수 교체kvm_mmu_get_child_sp가 GCC에 의해 인라인되어 독립된 함수 진입점 없음
나의 text_poke 방식컴파일 10초, .c 파일 하나, 취약 명령어 직접 수정
기능영향
호스트 재부팅필요 없음
VM 재시작/마이그레이션필요 없음
중첩 가상화(VM 안에서 VM 실행)유지, 정상 사용 가능
VM 생성/시작정상
KSM 메모리 병합영향 없음, 독립 기능
CPU 성능거의 영향 없음(NOP는 CPU를 소비하지 않음)
메모리섀도 페이지 테이블을 더 이상 재사용하지 않아 매번 새 페이지를 할당하므로 메모리를 약간 더 사용
KVM 모듈 언로드정상(rmmod가 원래 코드 자동 복원)
중첩 가상화유지