
Toolkit per il rilevamento, la verifica e la risposta agli incidenti per CVE-2026-85097: valutazione remota di Bricksforge, ricerca di IOC nei log, audit degli impianti nel filesystem, oltre a regole Sigma e WAF.
Caricamento arbitrario di file non autenticato → RCE nel plugin WordPress Bricksforge
Toolkit di rilevamento, verifica e risposta agli incidenti per CVE-2026-85097, un CVSS 10.0
caricamento arbitrario di file non autenticato nel plugin Bricksforge
per WordPress che è attivamente sfruttato in the wild.
Un unico script, tre modalità: valutare un target da remoto, cercare nei log storici attività di sfruttamento, e verificare una web root alla ricerca di implant depositati.
____ _ _ _ __ ___ _ _
| __ ) _ __(_) | _| | __/ _| ___ _ __ __ _ / _ \ ___| | _| | ___ _ __
| _ \| '__| | |/ / |/ / |_ / _ \| '__/ _` | | | / __| |/ / |/ _ \| '_ \
| |_) | | | | <| <| _| (_) | | | (_| | |_| \__ \ <| | (_) | | | |
|____/|_| |_|_|\_\_|\_\_| \___/|_| \__, |\___/|___/_|\_\_|\___/|_| |_|
|___/
CVE-2026-85097 | Unauthenticated Arbitrary File Upload -> RCE
CVSS 10.0 CRITICAL | Bricksforge <= 3.1.8.9 | Fixed 3.1.8.10
| Campo | Valore |
|---|---|
| CVE | CVE-2026-85097 |
| Prodotto | Bricksforge (plugin WordPress, addon per Bricks Builder) |
| Tipo | Caricamento arbitrario di file non autenticato → Esecuzione remota di codice |
| CWE | CWE-434: Caricamento senza restrizioni di file con tipo pericoloso |
| CVSS | 10.0 CRITICO: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H (vettore dedotto, vedi Limitazioni) |
| Autenticazione | Nessuna |
| Affette | <= 3.1.8.9 |
| Corretta | 3.1.8.10 (linea di rilascio del fornitore citata nella stampa: 4.0.1) |
| Sfruttamento | ATTIVO IN NATURA |
| Prima osservazione | 2026-10-07 21:47:17 UTC |
| Installazioni | ~6.000 |
| IP sorgente osservati | 63 univoci (i primi 6 ≈ 46% delle richieste) |
| Endpoint principale | POST /wp-json/bricksforge/v1/form_submit |
| Endpoint di fallback | POST /wp-admin/admin-ajax.php (action=bricksforge_form_submit) |
| Denominazione dell'impianto | login_admin_*.php |
[!CAUTION] Solo uso autorizzato. Questo strumento è destinato a valutazioni di sicurezza consentite, validazione difensiva e risposta agli incidenti. Eseguire qualsiasi test attivo contro un sistema di cui non si è proprietari o per cui non si dispone di autorizzazione scritta è illegale nella maggior parte delle giurisdizioni. Vedi SAFETY-AND-LEGAL.md.
Bricksforge estende Bricks Builder con form avanzati,
animazioni e dati dinamici. La sua funzionalità Pro Forms accetta il caricamento di file. Il plugin
valida correttamente il tipo MIME di un file al momento del primo caricamento, ma quando il
form viene successivamente inviato, si fida dei metadati del file inviati dal client e non valida mai
il campo url all'interno del parametro temporaryFileUploads.
Quel singolo controllo mancante trasforma un caricamento di immagine benigno in esecuzione remota
di codice non autenticata. Un attaccante non ha bisogno di alcun account, di alcun token CSRF che non possa generare
da solo, né di alcuna interazione dell'utente. Patchstack ha osservato lo sfruttamento a partire dal
2026-10-07 21:47:17 UTC da 63 IP sorgente univoci che spaziano tra infrastrutture datacenter, cloud, VPN e
residenziali.
file (il percorso lato server che è stato sottoposto a controllo MIME) e url (la destinazione in cui il plugin
scriverà) sono disaccoppiati. Il plugin rilegge l'url fornito dal client al
momento dell'invio e vi scrive i byte in staging.
{
"temporaryFileUploads": [
{
"field": "form-field-file",
"file": {
"file": "/var/www/example.com/wp-content/uploads/bricksforge/tmp/img_example.gif",
"url": "https://example.com/wp-content/uploads/bricksforge/tmp/img_example.php",
"type": "image/gif"
}
}
]
}
La firma è la discrepanza: il percorso lato server è un .gif, l'URL di destinazione
è un .php. Nel 95% delle richieste catturate il percorso lato server terminava in .gif o .png.
| File | Ruolo |
|---|---|
wp-content/plugins/bricksforge/includes/elements/pro-forms/actions/init.php | Punto di iniezione: i metadati forniti dal client (incluso url) vengono uniti nel contesto dell'azione del form senza validazione. |
wp-content/plugins/bricksforge/includes/elements/pro-forms/actions/base.php | Sink: i metadati considerati attendibili guidano la scrittura finale del file, quindi l'attaccante controlla il nome del file di destinazione su disco e l'estensione. |
| # | Passo | Osservabile |
|---|---|---|
| 1 | Ottenere un nonce non autenticato: POST /wp-admin/admin-ajax.php con action=bricksforge_regenerate_nonce. Nessuna autenticazione richiesta; restituisce un nonce valido. | Richiesta a admin-ajax.php con action=bricksforge_regenerate_nonce |
| 2 | Caricare un polyglot GIF/PHP: un'immagine valida che trasporta anche codice PHP. La validazione MIME viene eseguita qui, quindi passa e finisce in wp-content/uploads/bricksforge/tmp/. | Upload multipart che scrive in /wp-content/uploads/bricksforge/tmp/ |
| 3 | Inviare il form con metadati non corrispondenti: file punta al .gif validato, url termina in .php. | Richiesta form_submit contenente temporaryFileUploads |
| 4 | Il plugin scrive i contenuti nella posizione PHP → RCE. Richiedere quell'URL esegue il codice incorporato: web shell, modifica dei contenuti, furto di dati, persistenza. | GET HTTP verso un file .php appena creato sotto una directory uploads |
Gli attaccanti sondano attivamente modi per aggirare il filtraggio delle estensioni. Quattro famiglie: