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
CVE-2022-34302 — Demonstra CVE-2022-34302, um bypass do Secure Boot através do bootloader assinado da New Horizon Datasys, cujo carregador PE/COFF personalizado integrado executa aplicações UEFI não assinadas. | Kitploit
Ferramentas/GitHubGitHub/themalwareguardian/cve-2022-34302
Segurança de Sistemas EmbarcadosMecanismos de PersistênciaAnálise de VulnerabilidadesExploraçãoEngenharia ReversaSegurança de HardwarePapers e PesquisaDesenvolvimento de PayloadsAnálise de Firmware

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
Exploração de Binários
GitHubthemalwareguardian/cve-2022-34302

CVE-2022-34302

Demonstra CVE-2022-34302, um bypass do Secure Boot através do bootloader assinado da New Horizon Datasys, cujo carregador PE/COFF personalizado integrado executa aplicações UEFI não assinadas.

Ver Repositório
há 10h 5mAinda não revisado

🕷️ CVE-2022-34302 - Vulnerabilidade do Boot Loader da New Horizon Datasys

New Horizon Datasys Reboot Restore Boot Loader - Bring Your Own Vulnerable UEFI Application (BYOVUA) - Bypass do Secure Boot através de um bootloader assinado com um carregador PE/COFF personalizado incorporado que carrega aplicações UEFI não assinadas.




📑 Índice

  • Visão Geral
  • Contexto
    • Bring Your Own Vulnerable UEFI Application
    • O Bootloader Assinado
    • A Vulnerabilidade
    • O Carregador PE/COFF Personalizado
    • LoadImage vs Carregador Personalizado
    • Requisitos de Compatibilidade PE/COFF
    • Paralelo com o BYOVD no Kernel
  • Como Funciona
    • Fase 1 - Arrancar o Bootloader Assinado
    • Fase 2 - Ativação do Carregador PE Personalizado
    • Fase 3 - Execução de Código Não Assinado
    • Fase 4 - Persistência
  • Exploit
  • Configuração do Laboratório
  • Referências



Visão Geral

Este repositório demonstra a técnica BYOVUA (Bring Your Own Vulnerable UEFI Application) explorando a CVE-2022-34302, uma vulnerabilidade de bypass do Secure Boot no boot loader da New Horizon Datasys.

Ao contrário das vulnerabilidades baseadas na UEFI Shell (CVE-2022-34301 e CVE-2022-34303), este bootloader não expõe uma UEFI Shell. Em vez disso, o shdloader.efi implementa o seu próprio carregador PE/COFF personalizado que carrega um binário de segunda fase (shdmgr.ef_) sem utilizar a função LoadImage() do firmware e sem realizar qualquer verificação de assinatura. Um atacante só precisa de substituir o shdmgr.ef_ por qualquer aplicação UEFI compatível para alcançar execução de código arbitrário com o Secure Boot ativado.

Esta é a mais perigosa das três vulnerabilidades divulgadas na investigação "One Bootloader to Load Them All". Como a Eclypsium observou: o bypass é incorporado, completamente silencioso, e não deixa qualquer indicação visual no ecrã - tornando-o invisível mesmo em sistemas com monitor e indetetável em sistemas sem cabeça, como servidores ou equipamentos industriais.

Baixar ferramenta



Contexto


Bring Your Own Vulnerable UEFI Application

BYOVUA é o equivalente UEFI da técnica BYOVD (Bring Your Own Vulnerable Driver) utilizada ao nível do kernel. Em vez de trazer um driver de kernel assinado com uma vulnerabilidade, o atacante traz uma aplicação UEFI assinada que contém funcionalidades capazes de comprometer o Secure Boot.

Como o shdloader.efi está assinado com um certificado de confiança da Microsoft, é aceite pelo Secure Boot sem questionar, tornando-o fidedigno em qualquer sistema que inclua este certificado na sua base de dados do Secure Boot (db) - o que é praticamente todos os PCs com capacidade UEFI lançados na última década. Uma vez em execução, o seu carregador PE personalizado incorporado proporciona ao atacante a capacidade de carregar e executar código arbitrário não assinado antes do sistema operativo carregar, num ambiente onde os controlos de segurança modernos (ASLR, DEP, proteções do kernel) simplesmente não existem.


O Bootloader Assinado

O shdloader.efi é um boot loader UEFI distribuído como parte dos produtos de restauro e recuperação de sistema da New Horizon Datasys (Reboot Restore Rx, RollBack Rx). O seu papel na cadeia de arranque legítima é carregar um componente de gestão pré-SO (shdmgr.ef_) que trata de operações de snapshot e restauro antes do sistema operativo iniciar.


A Vulnerabilidade

A vulnerabilidade é uma falha de design na arquitetura do boot loader. Em vez de utilizar os serviços de arranque do firmware LoadImage() e StartImage() - que impõem a verificação de assinatura do Secure Boot - o shdloader.efi implementa o seu próprio carregador PE/COFF personalizado que lê, relocaliza e executa o shdmgr.ef_ diretamente a partir dos bytes brutos do disco, contornando completamente as verificações de segurança do firmware.

A questão central: um binário assinado que é fidedigno para o Secure Boot contém o seu próprio carregador de imagens que não verifica assinaturas. O firmware valida o shdloader.efi como assinado, mas uma vez em execução, este carrega o shdmgr.ef_ sem qualquer verificação. Substituir o shdmgr.ef_ por uma aplicação UEFI arbitrária resulta nessa aplicação a ser executada com acesso total ao hardware, enquanto o Secure Boot reporta como ativado.

Isto é fundamentalmente diferente da CVE-2022-34301 e CVE-2022-34303, onde o atacante precisa de interagir com uma UEFI Shell e corromper manualmente o para desativar a verificação. Aqui, o bypass é - sem interação do utilizador, sem saída visível, sem prompt de shell.

PropriedadeValor
Ficheiroshdloader.efi = EFI/Boot/bootx64.efi
FabricanteNew Horizon Datasys Inc
ProdutoReboot Restore Rx / RollBack Rx
CVECVE-2022-34302
AssinaturaMicrosoft Windows UEFI Driver Publisher → Microsoft Corporation UEFI CA 2011
DescobertaEclypsium (Mickey Shkatov, Jesse Michael) - Agosto 2022
ApresentaçãoDEF CON 30 - "One Bootloader to Load Them All"
RevogaçãoAdicionado ao DBX via Microsoft KB5012170 (Agosto 2022)
gSecurity2
automático e silencioso

O Carregador PE/COFF Personalizado

O shdloader.efi assinado contém a sua própria implementação de um carregador de imagens PE/COFF. Em vez de chamar o serviço de arranque LoadImage() do firmware, que invocaria os Security Architectural Protocols e verificaria a assinatura da imagem contra a base de dados do Secure Boot, o bootloader:

  1. Abre \EFI\Boot\shdmgr.ef_ utilizando o EFI_SIMPLE_FILE_SYSTEM_PROTOCOL
  2. Lê o conteúdo bruto do ficheiro para um buffer de memória
  3. Analisa os cabeçalhos PE/COFF (assinatura MZ, assinatura PE, Optional Header)
  4. Aloca memória num endereço arbitrário
  5. Copia as secções de acordo com a tabela de secções
  6. Processa a secção .reloc e aplica as relocalizações de base
  7. Resolve o endereço do ponto de entrada
  8. Salta para o ponto de entrada

Em nenhum momento deste processo o carregador verifica a assinatura Authenticode da imagem, consulta a base de dados do Secure Boot (db/dbx), ou invoca o EFI_SECURITY2_ARCH_PROTOCOL. A imagem é carregada puramente com base na sua validade estrutural 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***

A diferença entre o `LoadImage()` do firmware e o carregador personalizado é a lacuna de segurança crítica:```
┌─────────────────────────────────────────────────────────────────────────┐
│  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          │
└─────────────────────────────────────────────────────────────────────────┘

Requisitos de Compatibilidade PE/COFF

O carregador PE personalizado é uma implementação simplificada e espera um layout PE/COFF específico. Binários que não estejam em conformidade são rejeitados com erros:``` Reloc table overflows binary Relocation failed Invalid entry point

root@kitploit:~
Um binário que não tenha nenhum destes será rejeitado pelo carregador personalizado.

| Campo | Valor Obrigatório | Razão |
|-------|---------------|--------|
| *Machine* | `0x8664` (x64) | O carregador só suporta imagens x86-64 |
| *Subsystem* | `10` (EFI Application) | Deve ser uma EFI Application |
| *secção .reloc* | `.reloc` deve existir com entradas de realocação base válidas | O carregador realiza a sua própria realocação de imagem. Sem .reloc, falha com "Reloc table overflows binary" |
| *Relocation Directory* | `VirtualAddress` != 0, Size != 0 (DATA_DIRECTORY[5]) | A entrada do diretório deve apontar para dados de realocação válidos |

É fornecido um script de verificação (Scripts/VerifyPE.py) para verificar a compatibilidade antes da implementação.

---

<div id='BYOVD'/>

### ***Paralelo com Kernel BYOVD***

O paralelo estrutural entre UEFI BYOVUA e kernel BYOVD é exato, embora CVE-2022-34302 represente a forma mais direta - o componente assinado **ele próprio** carrega código não assinado, em vez de fornecer uma primitiva para desativar a verificação:```
┌──────────────────────────────────────────────────────────────┐
│  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 é a variante mais perigosa porque o bypass é inerente ao design do bootloader - não há etapa intermediária onde o atacante precise corromper um mecanismo de segurança. O componente assinado carrega diretamente código não assinado como sua operação normal.




Como Funciona


Fase 1 - Inicializar o Bootloader Assinado

O shdloader.efi assinado é colocado na EFI System Partition (ESP) como o boot loader padrão. Como é assinado pelo certificado Microsoft UEFI Driver Publisher, o Secure Boot o valida e carrega sem problemas.``` 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 o sistema inicializa, o firmware:
1. Lê `bootx64.efi` da ESP
2. Chama `LoadImage()` que verifica a assinatura Authenticode contra o banco de dados do Secure Boot
3. A assinatura corresponde ao certificado Microsoft UEFI CA 2011 no `db` → a imagem é aceita
4. Chama `StartImage()` para transferir a execução para `shdloader.efi`

---

<div id='Phase2'/>

### ***Fase 2 - Ativação do Carregador PE Personalizado***

Uma vez que `shdloader.efi` tem o controle, ele imprime uma mensagem de diagnóstico e ativa imediatamente seu carregador PE/COFF personalizado:```
Booting in insecure mode

O bootloader então:

  1. Abre \EFI\Boot\shdmgr.ef_ usando o protocolo de sistema de arquivos
  2. Lê o arquivo inteiro em um buffer de memória
  3. Analisa os cabeçalhos PE/COFF para extrair o layout das seções e os dados de relocação
  4. Aloca memória executável em um endereço físico arbitrário
  5. Copia cada seção PE (.text, .data, .reloc, etc.) para a memória alocada
  6. Calcula o delta de relocação (LoadAddress - ImageBase) e aplica todas as relocações de base da seção .reloc
  7. Resolve LoadAddress + AddressOfEntryPoint como o alvo de execução

Nenhuma verificação de assinatura ocorre em nenhum ponto deste processo. O loader não chama LoadImage(), não invoca gSecurity2->FileAuthenticationState() e não verifica os bancos de dados db ou dbx. O arquivo é carregado puramente com base na validade estrutural.

Se o arquivo não for encontrado, o bootloader reporta:``` Failed to open \EFI\Boot\shdmgr.ef_ - 800000000000000E Failed to load image

root@kitploit:~
---

<div id='Phase3'/>

### ***Fase 3 - Execução de Código Não Assinado***

O carregador personalizado salta para o ponto de entrada de `shdmgr.ef_`. A aplicação UEFI não assinada agora é executada com:

- Acesso total ao hardware (memória direta, portas de I/O, PCI, MMIO)
- Nenhum sistema operacional carregado ainda
- Sem ASLR, DEP ou proteções de kernel
- Sem EDR ou monitoramento de segurança de endpoint
- Secure Boot reportado como **habilitado** para qualquer consulta subsequente do SO

O ataque é completamente silencioso. Diferente de CVE-2022-34301 e CVE-2022-34303, que exibem um prompt visível do UEFI Shell, este exploit não produz saída visual além da mensagem "Booting in insecure mode" (que, em um sistema legítimo, aparece brevemente e é rapidamente substituída pela tela de boot do SO). Em sistemas headless (servidores, IoT, equipamentos industriais), não há indicação alguma.

---

<div id='Phase4'/>

### ***Fase 4 - Persistência***

O ataque é persistente por padrão. Enquanto `shdloader.efi` permanecer em `\EFI\Boot\bootx64.efi` e o payload do atacante permanecer em `\EFI\Boot\shdmgr.ef_` na ESP, o payload não assinado é executado a cada boot.

Nenhum script `startup.nsh` é necessário. Nenhum endereço gSecurity2 precisa ser recalculado entre atualizações de firmware. O carregador PE personalizado carrega qualquer `shdmgr.ef_` que encontrar, incondicionalmente.

O sistema continua a reportar o Secure Boot como "habilitado" - apenas a cadeia de confiança foi quebrada no nível do bootloader. Isso torna o ataque invisível para consultas de status do Secure Boot em nível de SO e para qualquer software de segurança que dependa da atestação do Secure Boot.

> **Importante:** A persistência só é quebrada se o DBX for atualizado com a entrada de revogação para `shdloader.efi` (KB5012170), o que faz o firmware rejeitar o próprio `shdloader.efi` antes que o carregador personalizado seja ativado.



---
---
---



<div id='Exploit'/>

## ***Exploit***

O diretório `Exploit/` contém tudo o que é necessário para compilar um `shdmgr.ef_` compatível:```
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



Configuração do Laboratório

DBX (Banco de Dados de Assinaturas Proibidas)

O bootloader assinado foi adicionado à lista de revogação DBX da Microsoft através do KB5012170 (agosto de 2022). Em sistemas atualizados, o bootloader será rejeitado pelo Secure Boot antes que o carregador PE personalizado seja ativado.

Para o ambiente de laboratório, você precisa de um sistema onde:

  • O DBX não tenha sido atualizado com a entrada de revogação para este bootloader específico
  • Ou o DBX esteja vazio (VM nova com chaves Secure Boot padrão)
  • Ou você use um ambiente QEMU/OVMF com inscrição personalizada de chaves Secure Boot

O QEMU UEFI Research Environment fornece uma configuração automatizada para isso.

Comparação com CVEs Baseados em Shell

O CVE-2022-34302 é mais simples de explorar do que o CVE-2022-34301 e o CVE-2022-34303:

AspectoCVE-2022-34302 (Carregador Personalizado)CVE-2022-34301/34303 (Shell)
TécnicaSubstituir shdmgr.ef_ pelo payloadCorromper gSecurity2 via comando mm
InteraçãoNenhuma (totalmente automática)Comandos manuais de shell ou startup.nsh
VisibilidadeSilenciosa ("Booting in insecure mode")Prompt do UEFI Shell visível
Dependência de firmwareNenhuma (o payload é autocontido)O endereço de gSecurity2 muda a cada build de firmware
ComplexidadeBaixa (substituição de arquivo)Média (varredura e patch de memória)
FurtividadeAlta (sem saída visual em headless)Baixa (shell visível na tela)



Referências

Diretamente Relacionadas

  • Awesome Bring Your Own Vulnerable UEFI Application - Coleção curada de aplicações UEFI assinadas vulneráveis conhecidas

Pesquisa da Eclypsium

  • One Bootloader to Load Them All - Pesquisa original da Eclypsium divulgando CVE-2022-34301, CVE-2022-34302, CVE-2022-34303
  • DEF CON 30 - One Bootloader to Load Them All - Apresentação de Mickey Shkatov e Jesse Michael

Fornecedor

  • New Horizon Datasys (Horizon DataSys) - Fornecedor do Reboot Restore Rx e RollBack Rx
  • Reboot Restore Rx Pro v12 Release Notes - Documenta o bootloader EFI pré-OS redesenhado e o novo certificado de assinatura de código

Especificações UEFI

  • UEFI Specification - LoadImage() - Serviço de boot do firmware que impõe a verificação do Secure Boot
  • UEFI PI Specification - Security Architectural Protocols - Definição oficial do Security2 Architectural Protocol contornado pelo carregador personalizado

Avisos

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

Catálogo de Bootloaders

  • Bootloaders.io - shdloader.efi - Regras YARA, detecções Sigma e hashes de amostras para o bootloader revogado da New Horizon Datasys

Técnicas Relacionadas

  • CVE-2022-34301 - Bypass do UEFI Shell assinado pela Eurosoft (esdiags.efi)
  • CVE-2022-34303 - Bypass do UEFI Shell assinado pelo CryptoPro Secure Disk (Shell_Full.efi)
  • CVE-2024-7344 - Bootloader assinado do Howyar SysReturn com carregador PE personalizado (técnica semelhante ao CVE-2022-34302)