Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
KVM-Januscape — Parche de vulnerabilidad CVE-2026-53359 | Kitploit
Herramientas/GitHubGitHub/xj2268-ta/kvm-januscape
Análisis de VulnerabilidadesExplotaciónAnálisis de Binarios
GitHubxj2268-ta/kvm-januscape

KVM-Januscape

Parche de vulnerabilidad CVE-2026-53359

Ver Repositorio
2hace 1 mesAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

KVM-XJ: parche en caliente

dump_tool.py encuentra los offsets automáticamente; para saber cómo usarlo, lee el código tú mismo.

Resumen de la vulnerabilidad

CVE-2026-53359 (Januscape) es una vulnerabilidad de use-after-free (UAF) en el MMU sombra de KVM del kernel de Linux.

  • Tiempo latente: 16 años (agosto de 2010 a julio de 2026)
  • Alcance: todos los sistemas x86 Intel/AMD con virtualización anidada habilitada
  • Gravedad: alta; un usuario root dentro de la VM puede escapar al host y obtener privilegios root en el host
  • Método de explotación: pánico del kernel del host (DoS) o escape completo de la máquina virtual (sin POC público)

Principio de la vulnerabilidad

Cuando la función kvm_mmu_get_page() busca una tabla de páginas sombra reutilizable en la tabla hash, solo compara el gfn (número de marco de página física de la máquina invitada) y no compara el role (rol de la tabla de páginas / rol de MMU). Esto hace que se reutilice por error una tabla de páginas con un rol no coincidente, lo que provoca un UAF.

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

En el commit 81ccda30b4e8 del kernel upstream se añadió una comparación de 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)

Mi método de corrección

Método: parche binario en caliente con text_poke (NOP Patch)

No modifica el código fuente del kernel ni reemplaza funciones; en su lugar, modifica directamente las instrucciones vulnerables en la memoria del kernel en ejecución.

Principio

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 = 漏洞修复     │
└──────────────────────────────────────┘

Implementación técnica

  1. Localizar la dirección de la función kvm_mmu_get_page mediante kallsyms_lookup_name
  2. Localizar la función text_poke (API de modificación en caliente del código del kernel) mediante kallsyms_lookup_name
  3. Pausar todas las CPU con stop_machine para garantizar una modificación segura
  4. Sustituir la instrucción je de 6 bytes por 6 bytes de NOP con text_poke
  5. Al descargar el módulo, restaurar la instrucción original con text_poke

Por qué no se usan otras soluciones

Evaluación de impacto

Requisitos de despliegue

RequisitoDescripción
Versión del kernelLinux 4.18+ (CentOS 8 / RHEL 8 / Rocky 8, etc.)
Entorno de compilaciónkernel-devel + gcc + make

Compilación y carga

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

Adaptación a otros kernels

Distintas versiones del kernel tienen distintas optimizaciones de compilación, por lo que el offset de la instrucción je también varía. Usa dump_tool.py para analizarlo automáticamente:

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

Kernels verificados

Versión del kernelOffset de jeEstado
4.18.0-496.el8.x86_640x108Probado
4.18.0-358.el8.x86_640xe8Probado

Advertencias

  1. Si no sabes cómo usarlo o no sabes leer el código, se recomienda no utilizarlo.
Descargar herramienta
SoluciónProblema
Actualizar el kernel y reiniciarRequiere reiniciar el host; todas las VM se detienen
nested=0 (desactivar la virtualización anidada)Se pierde la virtualización anidada; no se pueden ejecutar VM dentro de VM
Enfoque kpatchRequiere kernel-debuginfo; la compilación tarda de 10 a 20 minutos; dependencias complejas
Sustitución de funciones con ftracekvm_mmu_get_child_sp es inlineada por GCC; no tiene entrada de función independiente
Mi solución con text_pokeCompila en 10 segundos; un solo archivo .c; modifica directamente la instrucción vulnerable
FuncionalidadImpacto
Reinicio del hostNo necesario
Reinicio/migración de VMNo necesario
Virtualización anidada (VM dentro de VM)Se conserva; uso normal
Crear/iniciar máquinas virtualesNormal
Fusión de memoria KSMSin impacto; función independiente
Rendimiento de CPUCasi sin impacto (NOP no consume CPU)
MemoriaLas tablas de páginas sombra ya no se reutilizan; cada vez se asigna una página nueva, ocupando un poco más de memoria
Descarga del módulo KVMNormal (rmmod restaura automáticamente el código original)
Reinicio del hostNo necesario
Apagado de VMNo necesario
Virtualización anidadaSe conserva