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
CVE-2022-34302 — Dimostra CVE-2022-34302, un bypass di Secure Boot tramite il bootloader firmato New Horizon Datasys il cui loader PE/COFF personalizzato integrato esegue applicazioni UEFI non firmate. | Kitploit
Strumenti/GitHubGitHub/themalwareguardian/cve-2022-34302
Sicurezza Sistemi EmbeddedMeccanismi di PersistenzaAnalisi delle VulnerabilitàExploitReverse EngineeringSicurezza HardwarePaper e RicercaSviluppo PayloadAnalisi del Firmware

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
Binary Exploitation
GitHubthemalwareguardian/cve-2022-34302

CVE-2022-34302

Dimostra CVE-2022-34302, un bypass di Secure Boot tramite il bootloader firmato New Horizon Datasys il cui loader PE/COFF personalizzato integrato esegue applicazioni UEFI non firmate.

Vedi Repository
10h 5m faNon ancora revisionato

🕷️ CVE-2022-34302 - Nuova vulnerabilità del boot loader di Horizon Datasys

New Horizon Datasys Reboot Restore Boot Loader - Bring Your Own Vulnerable UEFI Application (BYOVUA) - Bypass di Secure Boot tramite bootloader firmato con loader PE/COFF personalizzato integrato che carica applicazioni UEFI non firmate.




📑 Indice

  • Panoramica
  • Contesto
    • Bring Your Own Vulnerable UEFI Application
    • Il Bootloader Firmato
    • La Vulnerabilità
    • Il Loader PE/COFF Personalizzato
    • LoadImage vs Loader Personalizzato
    • Requisiti di Compatibilità PE/COFF
    • Parallelismo con il BYOVD a livello Kernel
  • Come Funziona
    • Fase 1 - Avvio del Bootloader Firmato
    • Fase 2 - Attivazione del Loader PE Personalizzato
    • Fase 3 - Esecuzione di Codice Non Firmato
    • Fase 4 - Persistenza
  • Exploit
  • Configurazione del Laboratorio
  • Riferimenti



Panoramica

Questo repository dimostra la tecnica BYOVUA (Bring Your Own Vulnerable UEFI Application) sfruttando CVE-2022-34302, una vulnerabilità di bypass di Secure Boot nel boot loader di New Horizon Datasys.

A differenza delle vulnerabilità basate su UEFI Shell (CVE-2022-34301 e CVE-2022-34303), questo bootloader non espone una UEFI Shell. Al contrario, shdloader.efi implementa il proprio loader PE/COFF personalizzato che carica un binario di secondo stadio (shdmgr.ef_) senza utilizzare la funzione LoadImage() del firmware e senza eseguire alcuna verifica della firma. Un attaccante deve solamente sostituire shdmgr.ef_ con qualsiasi applicazione UEFI compatibile per ottenere l'esecuzione di codice arbitrario con Secure Boot abilitato.

Questa è la più pericolosa delle tre vulnerabilità divulgate nella ricerca "One Bootloader to Load Them All". Come osservato da Eclypsium: il bypass è integrato, completamente silenzioso e non lascia alcuna indicazione visiva sullo schermo - rendendolo invisibile anche su sistemi dotati di monitor e non rilevabile su sistemi headless come server o apparecchiature industriali.

Scarica lo strumento



Contesto


Bring Your Own Vulnerable UEFI Application

BYOVUA è l'equivalente UEFI della tecnica BYOVD (Bring Your Own Vulnerable Driver) utilizzata a livello kernel. Invece di portare un driver kernel firmato con una vulnerabilità, l'attaccante porta un'applicazione UEFI firmata che contiene funzionalità in grado di compromettere Secure Boot.

Poiché shdloader.efi è firmato con un certificato considerato attendibile da Microsoft, viene accettato da Secure Boot senza obiezioni, rendendolo attendibile su qualsiasi sistema che includa questo certificato nel proprio database Secure Boot (db) - ovvero praticamente ogni PC con supporto UEFI spedito nell'ultimo decennio. Una volta in esecuzione, il suo loader PE personalizzato integrato fornisce all'attaccante la capacità di caricare ed eseguire codice arbitrario non firmato prima del caricamento del sistema operativo, in un ambiente in cui i moderni controlli di sicurezza (ASLR, DEP, protezioni del kernel) semplicemente non esistono.


Il Bootloader Firmato

shdloader.efi è un boot loader UEFI distribuito come parte dei prodotti di ripristino e recupero del sistema di New Horizon Datasys (Reboot Restore Rx, RollBack Rx). Il suo ruolo nella catena di avvio legittima è caricare un componente di gestione pre-OS (shdmgr.ef_) che gestisce le operazioni di snapshot e ripristino prima dell'avvio del sistema operativo.


La Vulnerabilità

La vulnerabilità è un difetto di progettazione nell'architettura del boot loader. Anziché utilizzare i boot services del firmware LoadImage() e StartImage() - che impongono la verifica della firma Secure Boot - shdloader.efi implementa il proprio loader PE/COFF personalizzato che legge, rilocalizza ed esegue shdmgr.ef_ direttamente dai byte grezzi del disco, aggirando completamente i controlli di sicurezza del firmware.

Il problema principale: un binario firmato considerato attendibile da Secure Boot contiene il proprio image loader che non verifica le firme. Il firmware convalida shdloader.efi come firmato, ma una volta in esecuzione, carica shdmgr.ef_ senza alcuna verifica. Sostituire shdmgr.ef_ con un'applicazione UEFI arbitraria comporta che tale applicazione venga eseguita con pieno accesso all'hardware, mentre Secure Boot risulta abilitato.

Questo è fondamentalmente diverso da CVE-2022-34301 e CVE-2022-34303, dove l'attaccante deve interagire con una UEFI Shell e corrompere manualmente per disabilitare la verifica. Qui, il bypass è - nessuna interazione utente, nessun output visibile, nessun prompt della shell.

ProprietàValore
Fileshdloader.efi = EFI/Boot/bootx64.efi
VendorNew Horizon Datasys Inc
ProdottoReboot Restore Rx / RollBack Rx
CVECVE-2022-34302
FirmaMicrosoft Windows UEFI Driver Publisher → Microsoft Corporation UEFI CA 2011
ScopertaEclypsium (Mickey Shkatov, Jesse Michael) - Agosto 2022
PresentazioneDEF CON 30 - "One Bootloader to Load Them All"
RevocaAggiunto al DBX tramite Microsoft KB5012170 (Agosto 2022)
gSecurity2
automatico e silenzioso

Il Loader PE/COFF Personalizzato

Il firmato shdloader.efi contiene la propria implementazione di un loader di immagini PE/COFF. Anziché chiamare il boot service LoadImage() del firmware, che invocherebbe i Security Architectural Protocols e verificherebbe la firma dell'immagine rispetto al database Secure Boot, il bootloader:

  1. Apre \EFI\Boot\shdmgr.ef_ utilizzando il protocollo EFI_SIMPLE_FILE_SYSTEM_PROTOCOL
  2. Legge il contenuto grezzo del file in un buffer di memoria
  3. Analizza le intestazioni PE/COFF (firma MZ, firma PE, Optional Header)
  4. Alloca memoria a un indirizzo arbitrario
  5. Copia le sezioni in base alla tabella delle sezioni
  6. Elabora la sezione .reloc e applica le rilocazioni di base
  7. Risolve l'indirizzo del punto di ingresso
  8. Salta al punto di ingresso

In nessun momento di questo processo il loader verifica la firma Authenticode dell'immagine, controlla il database Secure Boot (db/dbx) o invoca il protocollo EFI_SECURITY2_ARCH_PROTOCOL. L'immagine viene caricata esclusivamente in base alla sua validità strutturale PE/COFF.```c // Pseudocode of what shdloader.efi does internally // // NOTE: This is a simplified representation. The actual // implementation was derived from reverse engineering.

EFI_STATUS LoadShdmgr(VOID) { // Step 1: Open the file File = OpenFile(L"\EFI\Boot\shdmgr.ef_");

root@kitploit:~
// Step 2: Read raw bytes (no signature check)
ReadFile(File, &Buffer, &Size);

// Step 3: Parse PE/COFF headers
DosHeader = (EFI_IMAGE_DOS_HEADER *)Buffer;
PeHeader  = (EFI_IMAGE_NT_HEADERS *)(Buffer + DosHeader->e_lfanew);

// Step 4: Allocate memory and copy sections
ImageBase = AllocatePages(...);
CopySections(ImageBase, Buffer, PeHeader);

// Step 5: Apply base relocations from .reloc
Delta = ImageBase - PeHeader->OptionalHeader.ImageBase;
ApplyRelocations(ImageBase, PeHeader, Delta);

// Step 6: Jump to entry point
//         NO SIGNATURE VERIFICATION ANYWHERE
EntryPoint = ImageBase + PeHeader->OptionalHeader.AddressOfEntryPoint;
((EFI_IMAGE_ENTRY_POINT)EntryPoint)(ImageHandle, SystemTable);

}

root@kitploit:~
---

<div id='LoadImageVsCustomLoader'/>

### ***LoadImage vs Custom Loader***

La differenza tra `LoadImage()` del firmware e il loader personalizzato è il divario di sicurezza critico:```
┌─────────────────────────────────────────────────────────────────────────┐
│  Firmware LoadImage() - How legitimate boot chains work                 │
│                                                                         │
│  bootx64.efi ──> LoadImage("shdmgr.ef_")                                │
│                      │                                                  │
│                      ├── Parse PE/COFF headers                          │
│                      ├── Verify Authenticode signature                  │
│                      ├── Check signature against db (allowed)           │
│                      ├── Check hash against dbx (revoked)               │
│                      ├── Call gSecurity2->FileAuthenticationState()     │
│                      │       │                                          │
│                      │       ├── Signature valid? ── YES ──> Load image │
│                      │       └── Signature invalid? ── NO ──> REJECT    │
│                      └── StartImage()                                   │
│                                                                         │
├─────────────────────────────────────────────────────────────────────────┤
│  Custom PE Loader - What shdloader.efi does                             │
│                                                                         │
│  shdloader.efi ──> OpenFile("shdmgr.ef_")                               │
│                      │                                                  │
│                      ├── ReadFile() into buffer                         │
│                      ├── Parse PE/COFF headers                          │
│                      ├── Allocate memory                                │
│                      ├── Copy sections                                  │
│                      ├── Apply .reloc relocations                       │
│                      ├── *** NO SIGNATURE CHECK ***                     │
│                      └── Jump to EntryPoint                             │
│                                                                         │
│  Result: ANY valid PE/COFF EFI application runs, signed or not          │
└─────────────────────────────────────────────────────────────────────────┘

Requisiti di compatibilità PE/COFF

Il loader PE personalizzato è un'implementazione semplificata e si aspetta un layout PE/COFF specifico. I binari che non sono conformi vengono rifiutati con errori:``` Reloc table overflows binary Relocation failed Invalid entry point

root@kitploit:~
Un binario privo di uno qualsiasi di questi elementi verrà rifiutato dal loader personalizzato.

| Campo | Valore richiesto | Motivo |
|-------|---------------|--------|
| *Machine* | `0x8664` (x64) | Il loader supporta solo immagini x86-64 |
| *Subsystem* | `10` (EFI Application) | Deve essere un'EFI Application |
| *sezione .reloc* | `.reloc` deve esistere con voci di base relocation valide | Il loader esegue la propria relocation dell'immagine. Senza .reloc, fallisce con "Reloc table overflows binary" |
| *Relocation Directory* | `VirtualAddress` != 0, Size != 0 (DATA_DIRECTORY[5]) | La voce di directory deve puntare a dati di relocation validi |

Uno script di verifica (Scripts/VerifyPE.py) è fornito per controllare la compatibilità prima del deployment.

---

<div id='BYOVD'/>

### ***Parallelismo con il Kernel BYOVD***

Il parallelismo strutturale tra UEFI BYOVUA e kernel BYOVD è esatto, sebbene CVE-2022-34302 rappresenti la forma più diretta - il componente firmato **stesso** carica codice non firmato, invece di fornire una primitiva per disabilitare la verifica:```
┌──────────────────────────────────────────────────────────────┐
│  UEFI BYOVUA - CVE-2022-34302 (Custom PE Loader)             │
│                                                              │
│  Signed Bootloader ──> Custom PE Loader ──> Load unsigned    │
│  (trusted by            (no sig check)       UEFI apps       │
│   Secure Boot)                                               │
├──────────────────────────────────────────────────────────────┤
│  UEFI BYOVUA - CVE-2022-34301/34303 (Shell + gSecurity2)     │
│                                                              │
│  Signed Shell ─ mm ─> gSecurity2 = NULL ─> Load unsigned     │
│  (trusted by          (Security2 Protocol)   UEFI apps       │
│   Secure Boot)                                               │
├──────────────────────────────────────────────────────────────┤
│  Kernel BYOVD (DSE Bypass)                                   │
│                                                              │
│  Signed Driver ─ IOCTL ─> g_CiOptions = 0 ─> Load unsigned   │
│  (trusted by              (CI.dll)            kernel drivers │
│   DSE / CI)                                                  │
└──────────────────────────────────────────────────────────────┘

CVE-2022-34302 è la variante più pericolosa perché il bypass è insito nel design del bootloader - non esiste alcuno step intermedio in cui l'attaccante debba corrompere un meccanismo di sicurezza. Il componente firmato carica direttamente codice non firmato come sua normale operazione.




Come Funziona


Fase 1 - Avvio del Bootloader Firmato

Il file firmato shdloader.efi viene posizionato sulla EFI System Partition (ESP) come boot loader predefinito. Poiché è firmato dal certificato Microsoft UEFI Driver Publisher, Secure Boot lo convalida e lo carica senza problemi.``` EFI System Partition (ESP) └── EFI/ └── Boot/ └── bootx64.efi (shdloader.efi) ← Signed by Microsoft Windows UEFI Driver Publisher └── shdmgr.ef_ (PAYLOAD) ← Unsigned, loaded by shdloader's custom PE loader

root@kitploit:~
Quando il sistema si avvia, il firmware:
1. Legge `bootx64.efi` dall'ESP
2. Chiama `LoadImage()` che verifica la firma Authenticode rispetto al database Secure Boot
3. La firma corrisponde al certificato Microsoft UEFI CA 2011 nel `db` → l'immagine viene accettata
4. Chiama `StartImage()` per trasferire l'esecuzione a `shdloader.efi`

---

<div id='Phase2'/>

### ***Fase 2 - Attivazione del PE Loader Personalizzato***

Una volta che `shdloader.efi` ha il controllo, stampa un messaggio diagnostico e attiva immediatamente il suo PE/COFF loader personalizzato:```
Booting in insecure mode

Il bootloader quindi:

  1. Apre \EFI\Boot\shdmgr.ef_ utilizzando il protocollo del filesystem
  2. Legge l'intero file in un buffer di memoria
  3. Analizza le intestazioni PE/COFF per estrarre il layout delle sezioni e i dati di rilocazione
  4. Alloca memoria eseguibile a un indirizzo fisico arbitrario
  5. Copia ciascuna sezione PE (.text, .data, .reloc, ecc.) nella memoria allocata
  6. Calcola il delta di rilocazione (LoadAddress - ImageBase) e applica tutte le rilocazioni di base dalla sezione .reloc
  7. Risolve LoadAddress + AddressOfEntryPoint come target di esecuzione

Nessuna verifica della firma avviene in nessun punto di questo processo. Il loader non chiama LoadImage(), non invoca gSecurity2->FileAuthenticationState() e non controlla i database db o dbx. Il file viene caricato esclusivamente in base alla validità strutturale.

Se il file non viene trovato, il bootloader segnala:``` Failed to open \EFI\Boot\shdmgr.ef_ - 800000000000000E Failed to load image

root@kitploit:~
---

<div id='Phase3'/>

### ***Fase 3 - Esecuzione di codice non firmato***

Il loader personalizzato salta al punto di ingresso di `shdmgr.ef_`. L'applicazione UEFI non firmata ora viene eseguita con:

- Accesso completo all'hardware (memoria diretta, porte I/O, PCI, MMIO)
- Nessun sistema operativo ancora caricato
- Nessun ASLR, DEP o protezione del kernel
- Nessun EDR o monitoraggio della sicurezza degli endpoint
- Secure Boot segnalato come **abilitato** a qualsiasi query successiva del sistema operativo

L'attacco è completamente silenzioso. A differenza di CVE-2022-34301 e CVE-2022-34303, che mostrano un prompt visibile della UEFI Shell, questo exploit non produce alcun output visivo oltre al messaggio "Booting in insecure mode" (che, su un sistema legittimo, appare brevemente e viene rapidamente sostituito dalla schermata di avvio del sistema operativo). Su sistemi headless (server, IoT, apparecchiature industriali), non c'è alcuna indicazione.

---

<div id='Phase4'/>

### ***Fase 4 - Persistenza***

L'attacco è persistente per impostazione predefinita. Finché `shdloader.efi` rimane in `\EFI\Boot\bootx64.efi` e il payload dell'attaccante rimane in `\EFI\Boot\shdmgr.ef_` sull'ESP, il payload non firmato viene eseguito a ogni avvio.

Non è necessario alcuno script `startup.nsh`. Non è necessario ricalcolare alcun indirizzo gSecurity2 tra gli aggiornamenti del firmware. Il loader PE personalizzato carica qualunque `shdmgr.ef_` trovi, incondizionatamente.

Il sistema continua a segnalare Secure Boot come "abilitato" - solo la catena di fiducia è stata infranta a livello di bootloader. Questo rende l'attacco invisibile alle query sullo stato di Secure Boot a livello di sistema operativo e a qualsiasi software di sicurezza che si basa sull'attestazione di Secure Boot.

> **Importante:** La persistenza viene interrotta solo se il DBX viene aggiornato con la voce di revoca per `shdloader.efi` (KB5012170), il che causa il rifiuto di `shdloader.efi` da parte del firmware stesso prima che il loader personalizzato si attivi.



---
---
---



<div id='Exploit'/>

## ***Exploit***

La directory `Exploit/` contiene tutto il necessario per compilare un `shdmgr.ef_` compatibile:```
Exploit/
|
├── README.md                           ← Build guide and PE/COFF requirements
|
├── PayloadShdmgr/
|   |
│   ├── ForceReloc.nasm                 ← Force .reloc section generation
│   ├── shdmgr.ef_.c                    ← UEFI application source (EDK2)
│   ├── shdmgr.ef_.inf                  ← EDK2 module definition
│   ├── shdmgr.ef_.dsc                  ← EDK2 platform build configuration
│   └── shdmgr.ef_.dec                  ← EDK2 package declaration
|
└── Scripts/
    └── VerifyPE.py                    ← PE/COFF compatibility verifier



Configurazione del laboratorio

DBX (Forbidden Signature Database)

Il bootloader firmato è stato aggiunto alla lista di revoca DBX di Microsoft tramite KB5012170 (agosto 2022). Sui sistemi aggiornati, il bootloader verrà rifiutato da Secure Boot prima che il custom PE loader possa mai attivarsi.

Per l'ambiente di laboratorio, è necessario un sistema in cui:

  • Il DBX non sia stato aggiornato con la voce di revoca per questo specifico bootloader
  • Oppure il DBX sia vuoto (VM appena creata con chiavi Secure Boot predefinite)
  • Oppure si utilizzi un ambiente QEMU/OVMF con registrazione personalizzata delle chiavi Secure Boot

Il QEMU UEFI Research Environment fornisce una configurazione automatizzata per questo scopo.

Confronto con le CVE basate su Shell

CVE-2022-34302 è più semplice da sfruttare rispetto a CVE-2022-34301 e CVE-2022-34303:

AspettoCVE-2022-34302 (Custom Loader)CVE-2022-34301/34303 (Shell)
TecnicaSostituire shdmgr.ef_ con il payloadCorrompere gSecurity2 tramite il comando mm
InterazioneNessuna (completamente automatica)Comandi shell manuali o startup.nsh
VisibilitàSilenziosa ("Booting in insecure mode")Prompt UEFI Shell visibile
Dipendenza dal firmwareNessuna (il payload è autonomo)L'indirizzo di gSecurity2 cambia per ogni build del firmware
ComplessitàBassa (sostituzione di file)Media (scansione e patching della memoria)
StealthAlta (nessun output visivo su headless)Bassa (shell visibile sullo schermo)



Riferimenti

Direttamente correlati

  • Awesome Bring Your Own Vulnerable UEFI Application - Raccolta curata di applicazioni UEFI firmate vulnerabili note

Ricerca Eclypsium

  • One Bootloader to Load Them All - Ricerca originale di Eclypsium che divulga CVE-2022-34301, CVE-2022-34302, CVE-2022-34303
  • DEF CON 30 - One Bootloader to Load Them All - Presentazione di Mickey Shkatov e Jesse Michael

Fornitore

  • New Horizon Datasys (Horizon DataSys) - Fornitore di Reboot Restore Rx e RollBack Rx
  • Reboot Restore Rx Pro v12 Release Notes - Documenta il bootloader EFI pre-OS ridisegnato e il nuovo certificato di firma del codice

Specifiche UEFI

  • UEFI Specification - LoadImage() - Servizio di boot del firmware che applica la verifica Secure Boot
  • UEFI PI Specification - Security Architectural Protocols - Definizione ufficiale del Security2 Architectural Protocol aggirato dal custom loader

Advisory

  • CERT/CC - VU#309662
  • NVD - CVE-2022-34302

Catalogo Bootloader

  • Bootloaders.io - shdloader.efi - Regole YARA, rilevamenti Sigma e hash dei campioni per il bootloader revocato di New Horizon Datasys

Tecniche correlate

  • CVE-2022-34301 - Bypass della UEFI Shell firmata Eurosoft (esdiags.efi)
  • CVE-2022-34303 - Bypass della UEFI Shell firmata CryptoPro Secure Disk (Shell_Full.efi)
  • CVE-2024-7344 - Bootloader firmato Howyar SysReturn con custom PE loader (tecnica simile a CVE-2022-34302)