Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
KVM-Januscape — patch per la vulnerabilità CVE-2026-53359 | Kitploit
Strumenti/GitHubGitHub/xj2268-ta/kvm-januscape
Analisi delle VulnerabilitàExploitAnalisi di Binari
GitHubxj2268-ta/kvm-januscape

KVM-Januscape

patch per la vulnerabilità CVE-2026-53359

Vedi Repository
21 mese faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

Hotpatch KVM-XJ

dump_tool.py è per trovare automaticamente gli offset, per come usarlo guarda il codice.

Panoramica della vulnerabilità

CVE-2026-53359 (Januscape) è una vulnerabilità use-after-free (UAF) nella MMU ombra KVM del kernel Linux.

  • Tempo di latenza: 16 anni (agosto 2010 – luglio 2026)
  • Impatto: tutti i sistemi x86 Intel/AMD con virtualizzazione annidata abilitata
  • Livello di pericolo: alto, l'utente root all'interno della VM può evadere nell'host e ottenere i permessi di root dell'host
  • Metodo di sfruttamento: panico del kernel dell'host (DoS) o evasione completa dalla VM (nessun POC pubblico)

Principio della vulnerabilità

La funzione kvm_mmu_get_page() quando cerca nella tabella hash pagine di tabella ombra riutilizzabili confronta solo il gfn (numero di frame della pagina fisica del guest) e non confronta il role (ruolo della tabella/ruolo MMU), causando il riutilizzo errato di una tabella con ruolo non corrispondente, scatenando UAF.

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

Nel commit 81ccda30b4e8 del kernel upstream è stata aggiunta una riga di confronto del 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)

Il mio metodo di correzione

Metodo: patch binaria a caldo con text_poke (NOP Patch)

Non modifica il codice sorgente del kernel, non sostituisce funzioni, ma modifica direttamente le istruzioni vulnerabili nella memoria del kernel in esecuzione.

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

Implementazione tecnica

  1. Trovare l'indirizzo della funzione kvm_mmu_get_page tramite kallsyms_lookup_name
  2. Trovare la funzione text_poke tramite kallsyms_lookup_name (API di modifica a caldo del codice kernel)
  3. Fermare tutte le CPU usando stop_machine per garantire una modifica sicura
  4. Sostituire l'istruzione je di 6 byte con un NOP di 6 byte usando text_poke
  5. Al momento dello scaricamento, ripristinare le istruzioni originali con text_poke

Perché non ho usato altre soluzioni

Valutazione dell'impatto

Requisiti di distribuzione

CondizioneDescrizione
Versione kernelLinux 4.18+ (CentOS 8 / RHEL 8 / Rocky 8, ecc.)
Ambiente di compilazionekernel-devel + gcc + make

Compilazione e caricamento

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

Adattamento ad altri kernel

Ottimizzazioni di compilazione diverse tra versioni kernel, anche l'offset dell'istruzione je è diverso. Usa dump_tool.py per l'analisi automatica:

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

Kernel verificati

Versione kernelOffset jeStato
4.18.0-496.el8.x86_640x108Testato
4.18.0-358.el8.x86_640xe8Testato

Note importanti

  1. Se non sai come usarlo o non sai leggere il codice, è sconsigliato utilizzarlo.
Scarica lo strumento
SoluzioneProblema
Aggiornare il kernel e riavviareRichiede riavvio dell'host, tutte le VM si fermano
nested=0 (disabilita virtualizzazione annidata)Perdita della funzionalità di virtualizzazione annidata, impossibile eseguire VM dentro VM
Metodo kpatchRichiede kernel-debuginfo, compilazione richiede 10-20 minuti, dipendenze complesse
Sostituzione di funzione con ftracekvm_mmu_get_child_sp è inlined da GCC, nessun punto di ingresso indipendente
La mia soluzione text_pokeCompilazione in 10 secondi, un singolo file .c, modifica diretta delle istruzioni vulnerabili
FunzionalitàImpatto
Riavvio dell'hostNon necessario
Riavvio/migrazione VMNon necessario
Virtualizzazione annidata (eseguire VM dentro VM)Mantenuta, funzionamento normale
Creazione/avvio di VMNormale
Unione memoria KSMNessun impatto, funzionalità indipendente
Prestazioni CPUQuasi nessun impatto (NOP non consuma CPU)
MemoriaLe tabelle ombra non vengono più riutilizzate, ogni volta viene allocata una nuova pagina, occupa un po' più di memoria
Rimozione modulo KVMNormale (rmmod ripristina automaticamente il codice originale)
Riavvio hostNon necessario
Arresto VMNon necessario
Virtualizzazione annidataMantenuta