
Scansiona WordPress Forminator alla ricerca della CVE-2026-15748 (RCE non autenticata). Rileva siti vulnerabili, esplora i moduli, estrae i nonce ed esegue test di upload sicuri.
Realizzato da Yora
Solo per test didattici e autorizzati
CVE-2026-15748 è una vulnerabilità relativa al plugin Forminator su WordPress.
Questo tool è stato creato per supportare ricerca sulla sicurezza e test autorizzati su installazioni WordPress che utilizzano Forminator.
Lo scanner esegue diverse fasi di verifica, dalla rilevazione di WordPress, alla ricerca di Forminator, all'identificazione della versione, al crawling delle pagine, fino al controllo della configurazione di form specifici.
⚠️ Usa questo tool solo su siti web, server, lab o sistemi che possiedi o per cui hai già ottenuto l'autorizzazione a testarli.
| Funzionalità | Descrizione |
|---|---|
| 🔎 Rilevamento WordPress | Rileva se il target utilizza WordPress |
| 🔌 Rilevamento Forminator | Rileva l'installazione del plugin Forminator |
| 🏷️ Rilevamento versione | Recupera la versione di Forminator dalle fonti disponibili |
| 📊 Controllo versione | Confronta la versione con il limite 1.56.1 |
| 🕷️ Crawling del sito | Cerca pagine rilevanti sul target |
| 🗺️ Rilevamento sitemap | Controlla diverse sitemap di WordPress |
| 📝 Rilevamento form | Rileva determinati form di Forminator |
| 🔐 Rilevamento nonce | Tenta di trovare il nonce di Forminator |
| ⚡ Multi-threading | Supporta più target contemporaneamente |
| 🔁 Retry | Le richieste fallite vengono ritentate |
| ⏱️ Ritardo richieste | Utilizza un ritardo casuale tra le richieste |
| 📄 Risultati dettagliati | Salva i risultati dell'analisi su file |
Il tool richiede:
requestspackagingurllib3Installa le dipendenze:
pip install requests packaging urllib3
Oppure:
python -m pip install requests packaging urllib3
Clona il repository:
git clone https://github.com/yora1928/cve-2026-15748.git
Entra nella directory:
cd cve-2026-15748
Installa le dipendenze:
pip install requests packaging urllib3
Controlla Python:
python --version
La configurazione principale si trova nella sezione CONFIG dello script:
TIMEOUT = 15
THREADS = 8
VULN_MAX = "1.56.1"
MAX_RETRIES = 3
DELAY_MIN = 1.0
DELAY_MAX = 2.5
CRAWL_DEPTH = 2
Questa configurazione è presente direttamente nel codice sorgente.
Il tool supporta due metodi di input per il target:
python cve-2026-15748.py -u https://target.com
Parametri:
-u
--url
Utilizzati per inserire un singolo target.
Crea un file:
targets.txt
Esempio:
https://target1.com
https://target2.com
https://target3.com
Quindi esegui:
python cve-2026-15748.py -f targets.txt
Parametri:
-f
--file
Il codice sorgente legge ogni riga come un target e rimuove le righe vuote.
Predefinito:
8 threads
Per cambiarlo:
python cve-2026-15748.py -f targets.txt -t 10
Altro esempio:
python cve-2026-15748.py -f targets.txt -t 5
Parametri:
-t
Lo script ha anche l'opzione:
--upload
Esempio:
python cve-2026-15748.py -u https://target.com --upload
oppure:
python cve-2026-15748.py -f targets.txt --upload
⚠️ Questa modalità effettua richieste POST/upload verso l'endpoint di Forminator. Usala solo su sistemi che consentono esplicitamente questo tipo di test.
L'implementazione di --upload chiama la funzione upload_test() quando vengono soddisfatte determinate condizioni di verifica.
python cve-2026-15748.py -u https://target.com
python cve-2026-15748.py -f targets.txt
python cve-2026-15748.py -f targets.txt -t 10
python cve-2026-15748.py -u https://lab.example.com --upload
python cve-2026-15748.py -f authorized-targets.txt -t 5 --upload
In generale, lo scanner funziona secondo questo flusso:
Target
│
▼
Normalize URL
│
▼
WordPress Detection
│
├── Tidak ditemukan
│ └── NOT WORDPRESS
│
▼
Crawl Pages
│
▼
Forminator Detection
│
▼
Version Detection
│
▼
Version Comparison
│
▼
Form Detection
│
▼
Result
Lo scanner controlla diversi endpoint:
/wp-login.php
/wp-json
/xmlrpc.php
/wp-content
Oltre a determinati stati HTTP, lo scanner cerca anche indicatori come:
wp-content
wp-includes
nella risposta della pagina.
Se non viene trovato alcun indicatore di WordPress:
[NOT WORDPRESS]
Lo scanner crea un elenco di pagine da diverse fonti.
Alcuni percorsi controllati includono:
/contact
/kontak
/hubungi-kami
/form
/forms
/formulir
/upload
/unggah
/submit
/kirim
/gallery
/kontribusi
/daftar
/pendaftaran
/registration
/register
/file-upload
/submit-document
/unggah-berkas
/upload-file
Il codice sorgente controlla anche:
/sitemap.xml
/sitemap_index.xml
/wp-sitemap.xml
e recupera i link interni dalla pagina principale.
Lo scanner cerca identificatori di Forminator come:
forminator-form-<ID>
oltre ad altri pattern HTML.
Per i form trovati, lo scanner verifica la presenza di:
type="file"
e:
<select>
Lo scanner tenta anche di ottenere:
form_id
nonce
dall'HTML del form.
La versione di Forminator può essere recuperata da asset HTML come:
/wp-content/plugins/forminator/...
con il parametro:
?ver=X.X.X
Lo scanner ha anche un fallback per cercare:
Stable tag:
sia nell'HTML che in readme.txt.
Il metodo mostrato nell'output può essere:
html-source
oppure:
readme.txt
Il limite di versione nel codice sorgente:
1.56.1
Il controllo viene effettuato confrontando la versione trovata con VULN_MAX.
Il risultato interno può essere:
VULNERABLE
oppure:
PATCHED
Se la versione non è nota ma vengono soddisfatte determinate condizioni, il codice sorgente utilizza lo stato:
INSTALLED (unknown version)
Il formato di output principale del tool segue questa struttura:
[STATUS] URL VERSION (METHOD) [PAGES] [FORM STATUS] [VULNERABILITY STATUS] [UPLOAD STATUS]
Esempio:
[FOUND] https://target.com v1.56.0 (html-source) [25 pages] [HAS UPLOAD FORM] [VULNERABLE]
Se viene rilevato un form di upload:
[FOUND] https://target.com v1.56.0 (html-source) [25 pages] [HAS UPLOAD FORM] [VULNERABLE]
Se non ci sono form:
[FOUND] https://target.com v1.56.0 (html-source) [25 pages] [VULNERABLE]
FOUNDForminator è stato trovato e le informazioni importanti sono state ottenute con successo.
NOT FOUNDForminator non è stato trovato.
Esempio:
[NOT FOUND] https://target.com [17 pages]
NOT WORDPRESSIl target non è stato rilevato come WordPress.
Esempio:
[NOT WORDPRESS] https://target.com
INSTALLED (unknown version)Forminator risulta installato, ma non è stato possibile determinare la versione.
VULNERABLELa versione trovata è uguale o inferiore a:
1.56.1
PATCHEDLa versione trovata è superiore al limite:
1.56.1
Dopo che tutti i target sono stati elaborati, il tool mostra un riepilogo.
Esempio:
========== SUMMARY ==========
VULNERABLE : 10
PATCHED : 5
UNKNOWN VERSION : 3
NOT FOUND : 20
NOT WORDPRESS : 2
TOTAL SCANNED : 40
[+] HAVE UPLOAD FORM: 2
Il riepilogo viene calcolato dai risultati di ogni target raccolti dallo scanner.
Il tool crea automaticamente:
scan_results_detailed.txt
Il file viene creato al termine del processo di scansione.
La sua struttura:
=== VULNERABLE (with upload form) ===
=== VULNERABLE (no upload form) ===
=== UNKNOWN VERSION (assume vulnerable) ===
Esempio:
=== VULNERABLE (with upload form) ===
https://target.example - v1.56.0 (html-source) - form_data: ...
=== VULNERABLE (no upload form) ===
https://target.example - v1.55.0 (html-source)
=== UNKNOWN VERSION (assume vulnerable) ===
https://target.example
Il file dei risultati della scansione non dovrebbe essere committato nel repository se contiene target o informazioni sensibili.
cve-2026-15748/
│
├── cve-2026-15748.py
├── README.md
├── targets.txt
└── scan_results_detailed.txt
cve-2026-15748.pyScanner principale.
README.mdDocumentazione del progetto.
targets.txtElenco dei target da elaborare.
scan_results_detailed.txtFile dei risultati della scansione generato automaticamente.
Il codice sorgente è composto da diverse sezioni principali:
cve-2026-15748.py
│
├── CONFIG
│ ├── TIMEOUT
│ ├── THREADS
│ ├── VULN_MAX
│ ├── MAX_RETRIES
│ ├── DELAY_MIN
│ ├── DELAY_MAX
│ └── CRAWL_DEPTH
│
├── HTTP / REQUEST
│ ├── get_headers()
│ └── safe_get()
│
├── URL
│ └── normalize()
│
├── VERSION
│ ├── is_vulnerable()
│ └── extract_version_from_html()
│
├── WORDPRESS
│ └── check_wordpress()
│
├── CRAWLING
│ └── get_all_pages()
│
├── FORM DETECTION
│ └── extract_form_data_advanced()
│
├── FORMINATOR
│ └── check_forminator_full()
│
├── TESTING
│ └── upload_test()
│
├── SCANNING
│ └── scan_target()
│
└── MAIN
└── main()
Queste funzioni corrispondono alla struttura effettiva del codice sorgente.
Lo scanner utilizza:
Gli User-Agent utilizzati includono diversi browser comuni.
Le richieste GET utilizzano la configurazione di retry e ritardo:
TIMEOUT = 15 seconds
MAX_RETRIES = 3
DELAY = 1.0–2.5 seconds
Lo scanner presenta alcune limitazioni:
UNKNOWN richiedono una verifica manuale.Si consiglia agli amministratori WordPress di:
Prima di eseguire lo scanner su un sistema:
✓ Pastikan sistem berada dalam scope
✓ Pastikan kamu memiliki izin
✓ Gunakan environment testing jika memungkinkan
✓ Hindari data pengguna nyata
✓ Jangan melakukan pengujian di luar scope
✓ Simpan hasil assessment dengan aman
Solo per test didattici e autorizzati.
Questo tool è stato creato per i seguenti scopi:
Non utilizzare questo tool su sistemi che non possiedi o che non autorizzano i test.
L'utente è pienamente responsabile dell'uso di questo tool.
L'autore non è responsabile di danni, perdita di dati, interruzioni del servizio o conseguenze legali derivanti dall'abuso del tool.
Yora
GitHub:
Repository:
https://github.com/yora1928/cve-2026-15748
Se questo progetto è utile per l'apprendimento o per una ricerca sulla sicurezza legittima, puoi lasciare una ⭐ sul repository.
MIT License
Realizzato con ❤️ da Yora
Nota importante: ho volutamente evitato di inventare funzionalità che non esistono nel codice sorgente. Ad esempio, il codice reale recupera la versione solo da HTML/readme.txt, non con cinque metodi come nel tuo README originale. :contentReference[oaicite:20]{index=20} :contentReference[oaicite:21]{index=21}
#CVE-2026-15748 · #Forminator RCE · #WordPress Exploit · #Unauthenticated RCE · #File Upload Vulnerability · #Penetration Testing
| Variabile | Default | Funzione |
|---|
TIMEOUT | 15 | Timeout delle richieste HTTP |
THREADS | 8 | Numero di worker/thread |
VULN_MAX | 1.56.1 | Limite di versione considerato vulnerabile |
MAX_RETRIES | 3 | Numero di tentativi di richiesta |
DELAY_MIN | 1.0 | Ritardo minimo |
DELAY_MAX | 2.5 | Ritardo massimo |
CRAWL_DEPTH | 2 | Profondità di crawling |