Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
KVM-Januscape — Correção da vulnerabilidade CVE-2026-53359 | Kitploit
Ferramentas/GitHubGitHub/xj2268-ta/kvm-januscape
Análise de VulnerabilidadesExploraçãoAnálise de Binários
GitHubxj2268-ta/kvm-januscape

KVM-Januscape

Correção da vulnerabilidade CVE-2026-53359

Ver Repositório
2há 1 mêsAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

KVM-XJ Hotpatch

dump_tool.py encontra os offsets automaticamente; para saber como usar, veja o código você mesmo.

Resumo da Vulnerabilidade

CVE-2026-53359 (Januscape) é uma vulnerabilidade de use-after-free (UAF) na shadow MMU do KVM do kernel Linux.

  • Tempo de latência: 16 anos (agosto de 2010 a julho de 2026)
  • Impacto: todos os sistemas x86 Intel/AMD com virtualização aninhada habilitada
  • Nível de gravidade: alto; um usuário root dentro da VM pode escapar para o host e obter root no host
  • Vetor de exploração: panic no kernel do host (DoS) ou fuga completa da VM (sem POC público)

Princípio da Vulnerabilidade

A função kvm_mmu_get_page() procura tabelas de páginas sombra reutilizáveis na tabela hash comparando apenas o gfn (número do quadro de página física do guest), sem comparar o role (papel da tabela de páginas/papel da MMU), fazendo com que tabelas de páginas com papéis incompatíveis sejam reutilizadas incorretamente, resultando em UAF.

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

No commit 81ccda30b4e8 do kernel upstream, foi adicionada uma comparação 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)

Minha Abordagem de Correção

Método: hotpatch binário com text_poke (NOP Patch)

Não modifica o código-fonte do kernel, não substitui funções; em vez disso, altera diretamente a instrução vulnerável na memória do kernel em execução.

Princípio

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

Implementação Técnica

  1. Encontrar o endereço da função kvm_mmu_get_page via kallsyms_lookup_name
  2. Encontrar a função text_poke via kallsyms_lookup_name (API de modificação a quente do código do kernel)
  3. Usar stop_machine para pausar todas as CPUs, garantindo uma modificação segura
  4. Usar text_poke para substituir a instrução je de 6 bytes por 6 bytes de NOP
  5. Ao descarregar, usar text_poke para restaurar a instrução original

Por que Não Usar Outras Abordagens

Avaliação de Impacto

Requisitos de Implantação

条件说明
Versão do kernelLinux 4.18+ (CentOS 8 / RHEL 8 / Rocky 8, etc.)
Ambiente de compilaçãokernel-devel + gcc + make

Compilação e Carregamento

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

Adaptação para Outros Kernels

Diferentes versões do kernel possuem otimizações de compilação diferentes, e o offset da instrução je também é diferente. Use o dump_tool.py para análise automática:

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

内核版本je 偏移状态
4.18.0-496.el8.x86_640x108Testado
4.18.0-358.el8.x86_640xe8Testado

Avisos

  1. Se você não sabe usar ou não sabe ler código, é recomendável não usar.
Baixar ferramenta
方案问题
Atualizar o kernel e reiniciarRequer reiniciar o host; todas as VMs param
nested=0 (desativar a virtualização aninhada)Perda da funcionalidade de virtualização aninhada; impossível executar VM dentro de VM
Método kpatchRequer kernel-debuginfo; compilação leva de 10 a 20 minutos; dependências complexas
Substituição de função com ftracekvm_mmu_get_child_sp é inline pelo GCC; sem ponto de entrada de função independente
Minha solução com text_pokeCompila em 10 segundos; um único arquivo .c; modifica diretamente a instrução vulnerável
功能影响
Reinício do hostNão é necessário
Reinício/migração de VMNão é necessário
Virtualização aninhada (executar VM dentro de VM)Preservada, uso normal
Criar/iniciar máquinas virtuaisNormal
Fusão de memória KSMSem impacto; funcionalidade independente
Desempenho da CPUQuase sem impacto (NOP não consome CPU)
MemóriaAs tabelas de páginas sombra não são mais reutilizadas; uma nova página é alocada a cada vez, consumindo um pouco mais de memória
Descarregamento do módulo KVMNormal (rmmod restaura automaticamente o código original)
Reinício do hostNão é necessário
Parada de VMsNão é necessário
Virtualização aninhadaPreservada