
WPForms Pro <= 1.10.1.1 - Scrittura Arbitraria di File non Autenticata tramite Ordine di Init/Finalize dell'Upload a Blocchi
WPForms Pro <= 1.10.1.1 - Scrittura Arbitraria di File Non Autenticata tramite l'Ordinamento Init/Finalize dell'Upload a Chunk
Exploit Proof-of-Concept
Ordinamento Init/Finalize dell'Upload a Chunk → Esposizione di Percorso Prevedibile → Esecuzione di Codice Remota
| Campo | Dettaglio |
|---|---|
| ID CVE | CVE-2026-10818 |
| Plugin Interessato | WPForms Pro (WordPress) |
| Versioni Interessate | Tutte le versioni fino alla 1.10.1.1 inclusa |
| Tipo | Scrittura Arbitraria di File Non Autenticata |
| CWE | CWE-434: Upload senza Restrizioni di File con Tipo Pericoloso |
| CVSS 3.1 | 8.1 HIGH — CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H |
| Autenticazione | Non richiesta |
Il plugin WPForms Pro per WordPress è vulnerabile all'Upload Arbitrario di File in tutte le versioni fino alla 1.10.1.1 inclusa tramite la funzione ajax_chunk_upload_finalize. Ciò è dovuto al fatto che la validazione del tipo di file avviene dopo che i metadati dei chunk e i contenuti dei file sono già stati scritti su disco, e al fatto che il file assemblato non viene eliminato in caso di fallimento della validazione. Ciò consente ad attaccanti non autenticati di caricare file potenzialmente eseguibili, rendendo possibile l'esecuzione di codice remota.
wpforms_upload_chunk_init → Metadata created BEFORE extension validation
wpforms_upload_chunk → Chunk bytes written regardless of init result
wpforms_file_chunks_uploaded → File assembled BEFORE type validation
→ File persists on disk even when validation fails
La catena di vulnerabilità sfrutta un difetto critico nell'ordinamento del ciclo di vita dell'upload a chunk:
SHA1(UUID)-0.chunk)wp_ajax_nopriv_*)readme.txt e il sorgente HTML per identificare le versioni vulnerabili di WPFormswpforms_upload_chunk_init sia raggiungibile esternamente prima di procedereSHA1(UUID)SHA1(UUID controllato dal client) per derivare l'URL esatto del chunk senza doverlo indovinare/wpforms/tmp/ prima e dopo gli upload exec per identificare i file appena scritti<32hex>.<ext>.chunk/x.php, /.php) per attivare l'esecuzione PHP su estensioni non PHPPython >= 3.8
pip install requests urllib3 beautifulsoup4
beautifulsoup4è opzionale ma consigliato per un'estrazione più affidabile dei campi dei form.
python CVE-2026-10818.py
Ti verrà chiesto di fornire:
| Prompt | Descrizione | Predefinito |
|---|---|---|
| File dei target | Percorso di un file di testo contenente un target per riga | list.txt |
| Thread | Numero di worker concorrenti (1–20) | 5 |
https://example.com
http://target.org
subdomain.example.net
192.168.1.100
https://example.com/wordpress
Un URL per riga. Supporta http://, https://, domini nudi, IP e installazioni in sottodirectory.
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ ┃
┃ ██▄ ██ ██ ██ ┃
┃ ████ ██ ████ ┃
┃ ██ ██ ██ ██ ┃
┃ ██ ████ ████ ┃
┃ ██ ███ ██ ██ ┃
┃ ┃
┃ Nxploited ━ Khaled Alenazi ━ T.m @Kxploit ┃
┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
┃ CVE-2026-10818 WPForms Pro ≤ 1.10.1.1 ┃
┃ Chunked Upload → Predictable Path → RCE ┃
┃ Results ━▸ Nx_hit/ ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
Durante la scansione, ogni target attraversa fasi etichettate:
02:14:52 ◆ target.com VER WPForms 1.9.3.1 vulnerable
02:14:53 ◆ target.com FORM 1 upload form(s) on /contact
02:14:53 ◆ target.com UPLOAD 6 safe + 5 exec payloads
02:14:55 ◆ target.com FIN poly_png → a8f3...1b22.png URL returned
02:14:57 ◆ target.com DIR listing enabled, 4 file(s) before exec upload
02:14:59 ◐ target.com EXEC shell_php → finalized on disk (hash unknown)
02:15:01 ◆ target.com DIR 1 NEW exec file(s) after upload!
● target.com SHELL dir-new:7c4f...e8a1.php https://target.com/wp-content/uploads/wpforms/tmp/7c4f...e8a1.php
Tutti i risultati vengono salvati in Nx_hit/:
| File | Contenuto |
|---|---|
Nx_shell.txt | RCE confermata — URL, etichetta e anteprima del corpo della risposta |
Nx_vuln.txt | Scrittura arbitraria di file confermata senza verifica dell'esecuzione |
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ COMPLETE 150 targets processed ┃
┃ ┃
┃ ● 3 shell ◐ 12 vuln ○ 85 skip ✗ 50 miss ┃
┃ ┃
┃ Results ━▸ Nx_hit/ ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
| Simbolo | Significato |
|---|---|
● shell | Esecuzione PHP confermata sul target remoto |
◐ vuln | File scritto su disco, esecuzione non confermata |
○ skip | Target irraggiungibile, aggiornato o nessun form di upload trovato |
✗ miss | Tentativi di upload falliti |
Target
│
├─ Reachability (HTTPS → HTTP fallback)
├─ WPForms Version Detection
├─ Form Discovery (100+ page paths + sitemap crawl)
├─ AJAX Route Validation
│
├─ Phase 1: Safe Uploads (png/jpg/pdf + finalize → URL)
│ └─ Shell verification on returned URLs
│
├─ Phase 2: Directory Snapshot (BEFORE)
│
├─ Phase 3: Exec Uploads (php/phtml/php5/phar/shtml + finalize)
│ ├─ Leaked filename extraction from response
│ └─ Hash pattern extraction from body + headers
│
├─ Phase 4: Directory Snapshot (AFTER) → Diff → New exec files
│ └─ Shell verification on each new file
│
├─ Phase 5: Hash Leak Verification
│ └─ Build URLs from leaked hashes → Shell check
│
├─ Phase 6: Chunk-Only Uploads (no finalize → predictable SHA1 path)
│ └─ Direct access + PATH_INFO bypass probing
│
└─ Result Classification (shell / vuln / skip / miss)
Questo strumento è fornito esclusivamente per test di sicurezza autorizzati e scopi di ricerca educativa. Utilizzalo solo su sistemi di tua proprietà o per i quali hai ricevuto un esplicito permesso scritto per il test.
L'accesso non autorizzato a sistemi informatici è illegale. L'autore declina ogni responsabilità per usi impropri, danni o qualsiasi conseguenza legale derivante dall'utilizzo di questo software.
Utilizzando questo strumento, accetti di essere l'unico responsabile delle tue azioni e di rispettare tutte le leggi e i regolamenti applicabili.
Di: Nxploited
Khaled Alenazi
T.m @Kxploit