| Nom du plugin | Support SVG facile |
|---|---|
| Type de vulnérabilité | Script intersite (XSS) |
| Numéro CVE | CVE-2025-12451 |
| Urgence | Faible |
| Date de publication CVE | 2026-02-18 |
| URL source | CVE-2025-12451 |
Avis de sécurité urgent : XSS stocké authentifié (Auteur) via téléchargement SVG dans Easy SVG Support (≤ 4.0)
Auteur : Expert en sécurité de Hong Kong
Date : 18 févr. 2026
Plugin affecté : Support SVG facile (WordPress)
Versions vulnérables : ≤ 4.0
Corrigé dans : 4.1
CVE : CVE-2025-12451
Gravité (impact sur le site) : Faible (CVSS ~5.9) — le contexte est important
Résumé exécutif
Easy SVG Support jusqu'à la version 4.0 ne valide pas et ne nettoie pas adéquatement les fichiers SVG téléchargés. Un utilisateur authentifié avec des privilèges d'Auteur (ou supérieurs) peut télécharger des SVG conçus contenant des scripts intégrés, des gestionnaires d'événements ou des URI javascript:. Lorsque ces SVG sont stockés et ensuite rendus dans des contextes permettant l'exécution de scripts, une condition de Cross-Site Scripting (XSS) stockée peut se produire. Mettez à jour vers Easy SVG Support 4.1 ou une version ultérieure comme solution définitive. Si une mise à jour immédiate n'est pas possible, appliquez les atténuations dans cet avis.
Que s'est-il passé ?
Le plugin a accepté et stocké des fichiers SVG sans une sanitation suffisante côté serveur. Un utilisateur authentifié ayant la capacité de télécharger des médias peut intégrer des constructions exécutables dans un SVG. Lorsque qu'un administrateur ou un autre utilisateur privilégié consulte la page ou l'élément multimédia où le SVG est rendu en ligne, le script intégré peut s'exécuter dans le navigateur de cet utilisateur, effectuant potentiellement des actions dans le contexte de sa session.
- Vecteur d'attaque : Téléchargement authentifié d'un fichier SVG conçu.
- Privilège requis : Auteur (les auteurs peuvent télécharger des médias par défaut sur de nombreux sites WordPress).
- Type d'exploitation : XSS stocké dans le contenu du site livré à d'autres utilisateurs (y compris les administrateurs).
- Corrigé dans : Support SVG facile 4.1.
- Indicateurs de détection : Pièces jointes SVG contenant des éléments , des attributs commençant par “on” (onload, onclick), ou des URI javascript:.
Pourquoi SVG est dangereux s'il n'est pas nettoyé
SVG est basé sur XML et prend en charge le scripting, les attributs d'événements, les références externes et le HTML intégré via foreignObject. Si une application stocke et sert des SVG sans supprimer les constructions non sécurisées, les navigateurs peuvent exécuter des scripts à l'intérieur du SVG en fonction de la manière dont il est intégré. Les erreurs d'implémentation courantes incluent le fait de se fier uniquement aux vérifications d'extension ou côté client, de ne pas supprimer les éléments de script ou les attributs d'événements, et de servir des SVG en ligne sans atténuation (CSP, sanitation ou rasterisation).
Actions immédiates pour les administrateurs de site (étape par étape)
Suivez ces étapes par ordre de priorité :
- Mettez à jour le plugin. Mettez à niveau le support SVG facile à 4.1 ou une version ultérieure dès que possible. C'est le remède définitif.
- Si vous ne pouvez pas mettre à jour immédiatement — appliquez des atténuations :
- Désactivez temporairement les téléchargements SVG.
- Restreignez la capacité de téléchargement aux administrateurs uniquement.
- Appliquez des règles côté serveur pour bloquer les téléchargements SVG contenant , des attributs d'événement ou des URI javascript: (patch virtuel via WAF ou filtres serveur).
- Scannez les SVG malveillants existants :
- Recherchez dans la bibliothèque multimédia des fichiers .svg et inspectez le contenu.
- Utilisez WP‑CLI ou des requêtes SQL directes pour localiser les pièces jointes et les publications contenant du contenu SVG ou des balises script.
- Supprimez, mettez en quarantaine ou assainissez les SVG suspects.
- Faites tourner les identifiants à privilèges élevés si un compromis est suspecté :
- Changez les mots de passe administrateurs et révoquez les sessions obsolètes.
Manuel rapide — désactivez les téléchargements SVG
Si vous devez bloquer immédiatement les téléchargements SVG, ajoutez un plugin spécifique au site ou un mu-plugin avec l'un de ces exemples. Modifier le fichier functions.php du thème sur un site en direct peut être risqué ; préférez un plugin isolé.
<?php
Pour retirer la capacité de téléchargement du rôle Auteur (évaluer l'impact sur les flux de travail) :
<?php
Avertissement : retirer la capacité de téléchargement affecte les flux de travail de contenu légitimes. Communiquez et planifiez les changements avec les équipes de contenu.
Comment rechercher des SVG suspects et des XSS stockés
Utilisez ces étapes de détection ; travaillez toujours sur une copie de sauvegarde ou de staging lors de l'exécution de requêtes DB.
WP‑CLI
wp db query "SELECT ID, post_title, guid FROM wp_posts WHERE post_type = 'attachment' AND guid LIKE '%.svg%';"
SQL
SELECT ID, post_title FROM wp_posts;
Inspection manuelle
Pour chaque SVG trouvé, ouvrez-le dans un éditeur de texte et recherchez :
- balises
- attributs d'événements on* (onload, onclick)
- URIs javascript :
- blocs foreignObject qui incluent du HTML
Validation et assainissement des téléchargements côté serveur (pour les développeurs)
La validation côté serveur est obligatoire. Ne vous fiez pas uniquement à l'extension de fichier ou aux vérifications côté client.
Validez le type MIME en utilisant finfo :
$finfo = new finfo(FILEINFO_MIME_TYPE);
Assainissez le SVG en analysant le XML et en supprimant les constructions non sécurisées : supprimez , retirez les attributs qui commencent par “on”, supprimez les URIs javascript : et retirez les références de script externes. Préférez les bibliothèques d'assainissement bien entretenues plutôt que du code ad-hoc.
function sanitize_svg_string( $svg_string ) {
// Use DOMDocument or an XML parser to parse and remove dangerous elements/attributes
$dom = new DOMDocument();
libxml_use_internal_errors(true);
$dom->loadXML( $svg_string, LIBXML_NOENT | LIBXML_DTDLOAD | LIBXML_NOERROR | LIBXML_NOWARNING );
// Remove all <script> elements
while ( $script = $dom->getElementsByTagName('script')->item(0) ) {
$script->parentNode->removeChild( $script );
}
// Remove any attributes that start with "on" (onload, onclick, etc.)
$xpath = new DOMXPath($dom);
foreach ( $xpath->query('//@*') as $attr ) {
if ( preg_match('/^on/i', $attr->nodeName) ) {
$attr->ownerElement->removeAttributeNode( $attr );
}
// Remove javascript: URIs
if ( stripos( $attr->nodeValue, 'javascript:' ) !== false ) {
$attr->ownerElement->removeAttributeNode( $attr );
}
}
return $dom->saveXML();
}
Avertissement : construire votre propre assainisseur comporte des risques (expansion d'entités XML, XXE). Utilisez une bibliothèque vérifiée lorsque cela est possible.
Règles de filtrage serveur / WAF (conceptuel)
Les règles côté serveur peuvent fournir un patch virtuel pendant que vous mettez à jour et nettoyez les sites. Concepts de détection d'exemple :
- Bloquez les téléchargements avec Content-Type image/svg+xml si le fichier contient <script ou des attributs on[a-z]+= .
- Détectez les motifs <svg … : /<svg[\s\S]*?/i
- Détectez les attributs de gestionnaire d'événements : /(?i)\bon[a-z]+\s*=/
- Détectez les URIs javascript : /(?i)javascript\s*:/
Appliquez une approche en couches : bloquez les correspondances à haute confiance et enregistrez les frappes à faible confiance pour un examen manuel. Évitez les blocages trop larges qui perturbent l'utilisation légitime des vecteurs.
Recommandations de durcissement (court, moyen, long terme)
Court terme (jours)
- Mettez à jour le plugin vers 4.1 immédiatement si possible.
- Désactivez temporairement les téléchargements SVG ou limitez-les aux administrateurs.
- Appliquez des règles de filtrage serveur pour bloquer les SVG contenant des scripts/événements.
- Scannez la Bibliothèque Médias et mettez en quarantaine les fichiers suspects.
Moyen terme (semaines)
- Appliquez une désinfection côté serveur pour les SVG acceptés.
- Supprimez les permissions d'exécution dans les répertoires de téléchargement et interdisez l'exécution des fichiers téléchargés.
- Déployez des en-têtes Content-Security-Policy pour réduire le risque d'exécution de scripts en ligne (testez soigneusement).
Long terme (mois)
- Mettez en œuvre un flux de travail d'approbation pour les graphiques vectoriels provenant de contributeurs non fiables.
- Envisagez de rasteriser les SVG en PNG/JPEG lorsque le vectoriel n'est pas nécessaire.
- Limitez les privilèges de téléchargement par rôle et appliquez le principe du moindre privilège.
Réponse à l'incident — si vous trouvez des téléchargements malveillants ou soupçonnez une compromission
- Contention immédiate :
- Supprimez ou remplacez les fichiers malveillants de la Bibliothèque Médias.
- Mettez à jour ou désactivez le plugin vulnérable.
- Révoquez les sessions administratives et faites tourner les identifiants si un détournement de session est suspecté.
- Envisagez de mettre le site en mode maintenance pour triage si nécessaire.
- Analyse judiciaire :
- Exportez les journaux du serveur couvrant la fenêtre de temps de téléchargement (POSTs vers /wp-admin/async-upload.php).
- Identifiez le nom d'utilisateur de l'uploader, l'IP et les horodatages.
- Recherchez des actions administratives inattendues autour du moment du téléchargement.
- Recherchez des webshells supplémentaires ou des fichiers modifiés.
- Remédiation :
- Supprimez les SVG malveillants et assainissez le contenu affecté.
- Mettez à jour le plugin vers la version corrigée.
- Changez les mots de passe des comptes affectés et faites tourner les clés API.
- Nettoyez les portes dérobées et supprimez les comptes administratifs inconnus.
- Renforcement post-incident :
- Mettez en œuvre un scan et une surveillance des téléchargements.
- Appliquez l'assainissement côté serveur et améliorez les flux de travail pour les téléchargements.
Règles de détection et idées de surveillance
Vérifications automatisées suggérées :
- Tâche planifiée scannant les nouveaux téléchargements pour les balises , les attributs commençant par “on”, et les URI javascript : .
- Alertez lorsqu'un rôle non-administrateur effectue un téléchargement SVG.
- Surveillez le tableau de bord administrateur pour des XHR inhabituels ou des POST inattendus.
- Enregistrez et examinez les téléchargements avec des noms de fichiers ou du contenu suspects.
// Exemple de scan périodique (pseudo-code)
Directives pour les auteurs et mainteneurs de plugins
- Évitez d'activer les téléchargements SVG à moins de pouvoir les assainir correctement. Si les fonctionnalités vectorielles ne sont pas nécessaires, convertissez en images raster lors du téléchargement.
- Effectuez une détection MIME stricte et un scan de contenu côté serveur (finfo ou similaire).
- Utilisez une bibliothèque d'assainissement SVG maintenue. Testez avec des charges utiles malveillantes et des cas limites.
- Restreignez les privilèges de téléchargement aux rôles de confiance et documentez votre approche de sécurité.
- Utilisez des en-têtes CSP pour réduire le risque de script en ligne lorsque cela est possible.
Évaluation des risques — à quel point cela est-il grave sur votre site ?
L'impact pratique du XSS stocké dépend des rôles des utilisateurs et des modèles de visualisation. Si seuls des visiteurs non privilégiés consultent des SVG compromis, l'effet peut être une défiguration ou des attaques côté client. Si des administrateurs consultent le contenu, un attaquant pourrait effectuer des actions dans la session admin, augmentant ainsi la gravité. Traitez ce problème de manière urgente si les droits de téléchargement sont largement accordés ou si les administrateurs examinent régulièrement les médias soumis par les utilisateurs.
Exemples de prévention dans le monde réel
- Remplacez les SVG téléchargés par des versions assainies et mettez les originaux en quarantaine jusqu'à approbation.
- Rasterisez les SVG au moment du téléchargement et servez des images raster publiquement ; conservez les SVG uniquement lorsqu'ils sont de confiance.
- Appliquez un flux de travail de téléchargement : téléchargement → scan/assainissement automatique → approbation de l'administrateur pour l'intégration.
Liste de contrôle finale — que faire maintenant
- Mettez à jour Easy SVG Support vers 4.1 immédiatement.
- Si vous ne pouvez pas mettre à jour immédiatement :
- Désactivez les téléchargements SVG ou limitez-les aux administrateurs.
- Appliquez des règles de filtrage/WAF sur le serveur pour détecter et bloquer les SVG avec des scripts ou des attributs d'événements.
- Scannez votre bibliothèque multimédia et vos publications à la recherche de fragments dans les SVG, sur… attributs, et javascript: URIs.
- Si vous trouvez du contenu suspect : supprimez/mettez en quarantaine les fichiers malveillants, faites tourner les identifiants, révoquez les sessions et scannez d'autres indicateurs de compromission.
- Mettez en œuvre des protections à long terme : assainissement côté serveur, CSP, renforcement des rôles et flux de travail d'approbation des téléchargements.
Remarques de clôture
Le XSS stocké via le téléchargement de fichiers se reproduit car des formats comme SVG mélangent données et constructions exécutables. Traitez tout plugin qui permet les téléchargements SVG avec prudence : assainissez sur le serveur, limitez qui peut télécharger et surveillez le contenu téléchargé. Des correctifs sont publiés, mais les attaquants agissent rapidement lorsque des divulgations apparaissent — le patching virtuel et le scan achètent du temps pendant que vous mettez à jour et nettoyez les sites affectés.
Si vous avez besoin d'une assistance spécialisée, engagez un consultant en sécurité qualifié ou une équipe de réponse aux incidents pour vous aider avec le triage et la remédiation.
Restez vigilant,
Expert en sécurité de Hong Kong