
Preuve de concept et analyse technique pour CVE-2026-12227, une LFI non authentifiée dans le plugin WordPress Visual Composer (<=45.16.0) permettant l'inclusion de fichiers et l'exécution de code à distance (RCE).
CVE-2026-12227 est une vulnérabilité critique (CVSS 9.8) d'inclusion de fichier local (LFI) non authentifiée dans le plugin Visual Composer Website Builder pour WordPress, affectant toutes les versions jusqu'à la 45.16.0 incluse. La faille se situe dans le paramètre vcv-template, qui permet à un attaquant d'inclure et d'exécuter des fichiers arbitraires sur le serveur. Cela peut entraîner une exposition de données sensibles, un contournement du contrôle d'accès, voire une exécution de code à distance (RCE) complète si l'environnement du serveur est mal configuré.
CVE-2026-12227
9.8/10
Plugin Visual Composer Website Builder (jusqu'à la version 45.16.0)
Cause racine : La vulnérabilité est classée CWE-98 : Contrôle inapproprié du nom de fichier pour une instruction include/require dans un programme PHP (souvent appelée inclusion de fichier distant PHP). Elle provient d'une faille logique dans le fichier PageTemplatesController.php, plus précisément dans la fonction viewPageTemplate(), qui se greffe au filtre template_include de WordPress à la priorité 11 sans aucune vérification d'authentification.
Le problème central est une faille de type « valider puis muter » :
Validation (sur l'entrée brute) : Le code appelle d'abord la fonction validate_file() de WordPress sur la valeur brute fournie par l'utilisateur pour le paramètre vcv-template. Cette fonction est conçue pour rejeter les chemins contenant des séquences littérales de traversée de répertoire comme ... À ce stade, l'entrée malveillante theme:.theme:./.theme:./.theme:./wp-links-opml.php ne contient aucun .. littéral, elle passe donc la validation.
Mutation (après validation) : Immédiatement après la validation, le code vérifie si le type de template est vc-custom-layout et si la valeur contient la chaîne theme:. Si c'est le cas, il exécute str_replace('theme:', '', $current['value']), ce qui supprime toutes les occurrences de theme: de la valeur.
Puits : La valeur mutée est ensuite passée à locate_template(), qui résout le chemin et inclut le fichier. Comme les chaînes theme: ont été supprimées, les séquences de traversée fragmentées sont fusionnées, créant un chemin valide comme ../../../../wp-links-opml.php qui n'a jamais été validé sous sa forme finale.
Surface d'attaque : Vecteur d'attaque : Réseau (AV:N) — la vulnérabilité est accessible directement via HTTP/HTTPS.
Authentification : Aucune requise (PR:N) — il s'agit d'une vulnérabilité non authentifiée. Tout attaquant distant peut la déclencher sans compte valide.
Interaction utilisateur : Aucune requise (UI:N).
Composant affecté : Le plugin Visual Composer Website Builder pour WordPress.
Paramètre vulnérable : Le paramètre vcv-template, utilisé conjointement avec le paramètre vcv-template-type.
Condition de déclenchement : Le plugin doit être installé et actif sur un site WordPress, et une page front-end doit être construite avec Visual Composer (c'est-à-dire qu'un permalien normal doit exister).
Notes d'exploitation : Impact : La faille permet à un attaquant non authentifié d'inclure et d'exécuter des fichiers locaux arbitraires sur le serveur. Comme les fichiers PHP inclus sont exécutés, cela peut mener à une exécution de code à distance (RCE), permettant une compromission totale de la confidentialité, de l'intégrité et de la disponibilité du serveur.
Technique d'exploitation : Les attaquants peuvent l'exploiter en forgeant une valeur vcv-template malveillante qui utilise le préfixe theme: pour contourner la validation, comme décrit dans la cause racine. Par exemple, une requête pourrait ressembler à : POST /?vcv-template-type=vc-custom-layout&vcv-template=theme:.theme:./.theme:./.theme:./wp-links-opml.php.
Escalade RCE : Bien que la LFI elle-même soit critique, l'obtention d'une RCE dépend souvent de l'environnement du serveur. Une méthode courante consiste à inclure un fichier déjà téléversé sur le serveur (par exemple, un fichier image apparemment inoffensif contenant du code PHP embarqué) ou à exploiter d'autres mauvaises configurations du serveur.
Disponibilité du PoC : Plusieurs exploits de preuve de concept sont publiquement disponibles, notamment un script Python et un template Nuclei, qui peuvent être utilisés pour la validation dans un environnement de laboratoire autorisé
[*] Code Python donné ci-dessus
Version corrigée : 45.16.1