CVE-2026-14894 : téléversement de fichier arbitraire non authentifié et RCE dans l'extension WordPress super forms
SCORE DE MENACE HERMES & COMPROMISSION DU CMS D'ENTREPRISE
Cible :Extension WordPress Super Forms – Drag & Drop Form Builder Le CVSS v3.1 attribue à la CVE-2026-14894 le score critique maximal de 9.8 (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H) avec une décision CISA SSVC évaluant l'automatisation à 'yes' et l'impact technique à 'total'. Le score de menace Hermes s'aligne à 98 (CRITIQUE). Cet alignement reflète une primitive d'exploitation létale en deux requêtes HTTP permettant à tout attaquant non authentifié de générer un nonce valide et d'écrire immédiatement un fichier exécutable PHP directement sur le serveur web.
CVE-2026-14894: Super Forms WordPress Plugin Unauthenticated Arbitrary File Upload to Remote Code ExecutionVULNÉRABILITÉ
Software platform affected by security vulnerabilities and agentic attack patterns.
🔍 Pourquoi cette relation ? (Preuves & Provenance)
“Confirmed security vulnerability in Microsoft Office & 365 Apps documented in Hermes dossier.”
- [vulnerability_report]
- [government_confirmation]CISA verified active exploitation in the wild and mandated federal remediation deadline in KEV entry. — Source : Cybersecurity & Infrastructure Security Agency (CISA): CISA Adds CVE-2026-59822 to Known Exploited Vulnerabilities Catalog (Fiabilité : VERY_HIGH)
1. Contexte technique & matrice des versions affectées
Section intitulée « 1. Contexte technique & matrice des versions affectées »Super Forms est une extension de création de formulaires par glisser-déposer intégrant logique conditionnelle, publication frontend et génération automatique de documents PDF (devis, factures, attestations).
| Paramètre | Spécification Technique | Contexte Threat Intelligence |
|---|---|---|
| Identifiant CVE | CVE-2026-14894 | Enregistrement officiel MITRE, NVD & CNA Wordfence |
| Faiblesse CWE | CWE-434 (Unrestricted File Upload) | Décodage base64 non contrôlé & écriture directe sur disque |
| Décision CISA SSVC | Automatable: Yes | Technical Impact: Total | Exploitation automatisable massivement sans interaction |
| Vecteur réseau | HTTP/HTTPS (80/TCP, 443/TCP) | Requêtes AJAX non authentifiées directes |
| Composant vulnérable | SUPER_Ajax::submit_form() | includes/class-ajax.php (lignes 2745 à 2768) |
| Action d’obtention de nonce | SUPER_Ajax::create_nonce() | wp_ajax_nopriv_super_create_nonce |
| Versions affectées | Toutes les versions <= 6.3.313 | Intégralité de la branche 6.x |
| Versions corrigées | 6.3.314 (7 juillet 2026) | Correctif officiel avec forçage de l’extension .pdf et contrôle des octets magiques |
2. Analyse approfondie du mécanisme de vulnérabilité
Section intitulée « 2. Analyse approfondie du mécanisme de vulnérabilité »La vulnérabilité découle de la conjonction de deux défaillances logiques majeures dans includes/class-ajax.php :
Faille 1 : création triviale de nonce via super_create_nonce
Section intitulée « Faille 1 : création triviale de nonce via super_create_nonce »Les nonces WordPress visent à neutraliser les attaques CSRF et valider l’intention de l’utilisateur. Super Forms enregistre une action publique sans authentification :
// includes/class-ajax.php (Lignes 110-118)if ( $nopriv ) { add_action( 'wp_ajax_nopriv_super_' . $ajax_event, array( __CLASS__, $ajax_event ) );}// ...public static function create_nonce() { echo SUPER_Common::generate_nonce(); die();}Une requête GET /wp-admin/admin-ajax.php?action=super_create_nonce renvoie instantanément un nonce cryptographique valide.
Faille 2 : écriture arbitraire sur disque via datauristring
Section intitulée « Faille 2 : écriture arbitraire sur disque via datauristring »Dans le traitement de la soumission de formulaire, l’extension inspecte les fichiers transmis :
// CODE VULNÉRABLE (Super Forms <= 6.3.313 dans includes/class-ajax.php)foreach( $v['files'] as $key => $value ) { // Tentative de génération d'un fichier PDF if(isset($value['datauristring'])){ try { $imgData = str_replace( ' ', '+', $value['datauristring']); unset($value['datauristring']); $imgData = substr( $imgData, strpos( $imgData, "," )+1 ); $imgData = base64_decode( $imgData );
unset($GLOBALS['super_upload_dir']); add_filter( 'upload_dir', array( 'SUPER_Forms', 'filter_upload_dir' )); if(empty($GLOBALS['super_upload_dir'])){ $GLOBALS['super_upload_dir'] = wp_upload_dir(); } $d = $GLOBALS['super_upload_dir']; $value['value'] = SUPER_Common::email_tags( $value['value'], $data, $settings ); $value['label'] = SUPER_Common::email_tags( $value['label'], $data, $settings );
// FAILLE CRITIQUE : $value['value'] est directement contrôlé par l'attaquant ! // Aucune vérification d'extension, aucun contrôle MIME, aucun assainissement ! $basename = $value['value']; $filename = trailingslashit($d['path']) . $basename; $file = fopen($filename, 'w'); fwrite($file, $imgData); fclose($file);Causes profondes de la dangerosité :
Section intitulée « Causes profondes de la dangerosité : »- Absence de contrôle de configuration : le script ne vérifie pas si l’option de génération PDF est active sur le formulaire.
- Nom de fichier non filtré : la variable
$basenameest directement extraite de la requête HTTP (ex:shell.php). - Absence de liste blanche d’extensions : rien n’empêche l’écriture de fichiers d’extensions
.php,.phtmlou.phar. - Écriture directe :
fopen()dépose le fichier immédiatement dans le dossier accessible publiquementwp-content/uploads/super-forms/.
3. Scénario d’attaque & déploiement du web shell
Section intitulée « 3. Scénario d’attaque & déploiement du web shell »L’exploitation se déroule en deux requêtes HTTP sans identifiants préalables :
[Attaquant] │ │ 1. GET /wp-admin/admin-ajax.php?action=super_create_nonce ▼┌─────────────────────────────────────────────────────────────┐│ Le serveur WordPress répond avec le sf_nonce valide │└─────────────────────────────────────────────────────────────┘ │ │ 2. POST /wp-admin/admin-ajax.php (action=super_form_submit) ▼┌─────────────────────────────────────────────────────────────┐│ Données forgées dans data[0][files][0] : ││ - value : "agent_hermes.php" ││ - datauristring : "data:application/pdf;base64,PD9waH..." │└─────────────────────────────────────────────────────────────┘ │ ▼ Écriture sur disque┌─────────────────────────────────────────────────────────────┐│ Déposé dans : /wp-content/uploads/super-forms/agent_hermes.php ││ Résultat : Exécution de code à distance (RCE) immédiate │└─────────────────────────────────────────────────────────────┘4. Indicateurs de compromission (IOC) & forensique
Section intitulée « 4. Indicateurs de compromission (IOC) & forensique »Indicateurs réseau
Section intitulée « Indicateurs réseau »| Méthode | URI / Paramètre | Caractéristique Détectée |
|---|---|---|
GET | /wp-admin/admin-ajax.php?action=super_create_nonce | Création répétée de nonces depuis des adresses IP suspectes |
POST | /wp-admin/admin-ajax.php | Corps HTTP contenant action=super_form_submit et datauristring= |
GET | /wp-content/uploads/super-forms/*.php | Appel direct d’un script PHP dans l’arborescence des uploads |
Artefacts système de fichiers
Section intitulée « Artefacts système de fichiers »- Répertoire d’upload cible :
/var/www/html/wp-content/uploads/super-forms/(ou sous-dossiers annuels/mensuels). - Fichiers exécutables anormaux : présence de fichiers
.php,.phtml,.phar,.incdans le dossier des uploads. - Base de données : entrées dans
wp_postsavecpost_type='attachment'dont le nom de fichier se termine par une extension exécutable.
5. Règles de détection & détection forensique
Section intitulée « 5. Règles de détection & détection forensique »Règle réseau Suricata
Section intitulée « Règle réseau Suricata »alert http any any -> $HTTP_SERVERS any ( msg:"HERMES EXPLOIT - Téléversement de fichier arbitraire Super Forms (CVE-2026-14894)"; flow:to_server,established; http.method; content:"POST"; http.uri; content:"admin-ajax.php"; http.request_body; content:"action=super_form_submit"; nocase; http.request_body; content:"datauristring="; nocase; pcre:"/data\[[0-9]+\]\[files\]\[[0-9]+\]\[value\]=[^\&]+\.(php|phtml|phar|inc)/Ui"; classtype:web-application-attack; sid:202614894; rev:1;)Règle YARA pour la recherche sur disque
Section intitulée « Règle YARA pour la recherche sur disque »rule SuperForms_Uploaded_Webshell_CVE_2026_14894 { meta: description = "Détecte les web shells téléversés via la CVE-2026-14894 de Super Forms" author = "Hermes Codex Threat Intelligence" reference = "CVE-2026-14894" date = "2026-09-12" threat_level = "CRITICAL" strings: $php_open = "<?php" $super_forms_dir = "super-forms" $cmd_exec = /(passthru|shell_exec|system|popen|eval|assert)\s*\(/ condition: uint32(0) == 0x68703f3c and $cmd_exec and filepath contains "wp-content/uploads"}Requête de triage SIEM Splunk
Section intitulée « Requête de triage SIEM Splunk »index=web_proxy sourcetype=access_combineduri_path="*/wp-admin/admin-ajax.php*"| search _raw="*super_form_submit*" AND _raw="*datauristring*"| rex field=_raw "data\[\d+\]\[files\]\[\d+\]\[value\]=(?<uploaded_filename>[^&]+)"| eval is_executable=if(match(uploaded_filename, "(?i)\.(php|phtml|phar|inc|pl|cgi)"), 1, 0)| where is_executable=1| stats count earliest(_time) as premiere_tentative latest(_time) as derniere_tentative by src_ip, dest_ip, uploaded_filename6. Analyse du correctif éditeur (commit c5838f58)
Section intitulée « 6. Analyse du correctif éditeur (commit c5838f58) »La version 6.3.314 a corrigé la vulnérabilité en appliquant 4 niveaux de contrôle stricts :
// CORRECTIF OFFICIEL dans 6.3.314 (includes/class-ajax.php)// 1. Contrôle obligatoire de l'activation de la génération PDFif ( empty( $settings['_pdf']['generate'] ) || $settings['_pdf']['generate'] !== 'true' ) { unset( $data[ $k ]['files'][ $key ]['datauristring'] ); continue;}
// 2. Normalisation du nom et forçage absolu de l'extension .pdf$basename = sanitize_file_name( wp_basename( (string) $value['value'] ) );$stem = preg_replace( '/\.[^.]*$/', '', $basename );$stem = str_replace( '.', '_', (string) $stem );$stem = trim( $stem, '.-_' );if ( '' === $stem ) { $stem = 'super-forms-' . strtotime( date_i18n( 'Y-m-d H:i:s' ) );}$basename = $stem . '.pdf'; // EXTENSION .pdf IMPOSÉE !
// 3. Vérification cryptographique des octets magiques PDF (%PDF-)if ( '%PDF-' !== substr( (string) $imgData, 0, 5 ) ) { throw new Exception( esc_html__( 'Invalid file upload rejected.', 'super-forms' ) );}
// 4. Confinement strict par realpath dans le dossier d'uploads$baseDir = realpath( $d['path'] );$filename = trailingslashit( $baseDir ) . $basename;$parentReal = realpath( dirname( $filename ) );if ( false === $parentReal || 0 !== strpos( trailingslashit( $parentReal ), trailingslashit( $baseDir ) ) ) { throw new Exception( esc_html__( 'Invalid file upload rejected.', 'super-forms' ) );}7. Guide de remédiation & réponse à incident
Section intitulée « 7. Guide de remédiation & réponse à incident »-
Mise à jour immédiate de super forms : Mettre à niveau l’extension vers la version 6.3.314 ou supérieure via WP-CLI :
Fenêtre de terminal wp plugin update super-forms -
Audit et assainissement des répertoires d’upload : Rechercher tout fichier PHP suspect dans le répertoire des téléversements :
Fenêtre de terminal find /var/www/html/wp-content/uploads/ -type f -name "*.php" -ls -
Interdiction de l’exécution de scripts dans les uploads (durcissement Nginx/Apache) : Interdire l’exécution directe des scripts PHP dans les dossiers médias :
location ~* ^/wp-content/uploads/.*\.php$ {deny all;return 403;} -
Renouvellement des secrets WordPress : En cas de détection d’un web shell résiduel, considérer le serveur et la base de données comme totalement compromis : renouveler les sels d’authentification dans
wp-config.php, les mots de passe de base de données et auditer l’ensemble des comptes administrateurs.