| Nom du plugin | Jannah |
|---|---|
| Type de vulnérabilité | Inclusion de fichiers locaux |
| Numéro CVE | CVE-2026-25464 |
| Urgence | Élevé |
| Date de publication CVE | 2026-03-18 |
| URL source | CVE-2026-25464 |
Inclusion de fichiers locaux dans le thème Jannah (<= 7.6.3) — Ce que les propriétaires de sites WordPress doivent faire dès maintenant
En tant que praticien de la sécurité basé à Hong Kong avec une expérience dans la réponse aux incidents WordPress pour les petites entreprises et les entreprises locales, je fournis un manuel pratique et concis pour l'inclusion de fichiers locaux (LFI) affectant les versions du thème Jannah jusqu'à 7.6.3 (CVE-2026-25464). Cette vulnérabilité est de haute gravité (CVSS 8.1) et permet aux attaquants non authentifiés de lire des fichiers locaux sur le serveur web — y compris wp-config.php — ce qui peut entraîner une exposition des identifiants et une prise de contrôle complète du site.
Contenu
- Qu'est-ce qu'un LFI et pourquoi est-ce dangereux pour les sites WordPress
- Résumé du problème LFI de Jannah (<= 7.6.3, CVE-2026-25464)
- Comment les attaquants exploitent le LFI (modèles et charges utiles courants)
- Actions immédiates (0–24 heures)
- Atténuations à court terme (24–72 heures)
- Renforcement et corrections à long terme
- Détection et chasse : indicateurs de compromission et modèles de journaux
- Manuel de réponse aux incidents si votre site est compromis
- Comment la sécurité en couches s'intègre dans votre réponse
- Guide pour les développeurs et FAQ
- Liste de contrôle : éléments immédiats et de suivi
Qu'est-ce qu'un LFI et pourquoi est-ce dangereux pour les sites WordPress
L'inclusion de fichiers locaux (LFI) se produit lorsqu'une application inclut des fichiers en utilisant des entrées contrôlées par l'utilisateur sans validation suffisante. Dans les systèmes basés sur PHP, l'utilisation non sécurisée de include/require avec des variables non assainies (par exemple : require_once($_GET[‘page’])) permet à un attaquant de manipuler le chemin et de faire en sorte que le serveur retourne ou exécute des fichiers locaux.
Pourquoi cela importe :
- Des fichiers sensibles résident souvent sur le serveur (wp-config.php, .env, sauvegardes, journaux).
- La lecture de wp-config.php révèle généralement les identifiants de la base de données et les sels, permettant une escalade rapide.
- Le LFI nécessite souvent aucune authentification et peut être scanné et exploité à grande échelle.
Résumé du problème LFI de Jannah (<= 7.6.3, CVE-2026-25464)
- Logiciel affecté : thème WordPress Jannah, versions jusqu'à et y compris 7.6.3.
- Vulnérabilité : Inclusion de fichiers locaux (LFI) via une entrée non authentifiée qui entraîne une inclusion de fichiers côté serveur.
- CVE : CVE-2026-25464
- Sévérité : Élevée (CVSS 8.1)
- Impact : Un attaquant distant peut inclure et afficher des fichiers locaux du serveur web ; potentiel de fuite des identifiants de la base de données et d'autres secrets.
- Privilège requis : Aucun (non authentifié).
- Correctif officiel : Vérifiez les canaux de l'auteur du thème pour des mises à jour ; certains sites peuvent rester non corrigés pendant des jours ou des semaines.
- Risque d'exploitation de masse : Élevé — LFI est attrayant pour les scanners automatisés et les botnets.
Comment les attaquants exploitent le LFI (modèles et charges utiles courants)
Les attaquants sondent les points de terminaison en utilisant des charges utiles de traversée de répertoire et des noms de fichiers connus. Les modèles typiques incluent :
- /?page=../../../../wp-config.php
- /?page=../../../../wp-config.php%00 (null byte tricks on older PHP)
- /?page=../../../../wp-content/debug.log (inclusion de journal)
- /?page=../../../../backups/site-backup.sql
Les scanners automatisés itèrent des milliers de permutations. Une fois qu'un point de terminaison LFI est trouvé, les attaquants tenteront d'extraire wp-config.php, de lire .env, ou de chaîner le LFI pour exécuter du code (par exemple en incluant un fichier PHP téléchargé ou un journal empoisonné).
Actions immédiates (0–24 heures)
Si votre site utilise les versions Jannah affectées, agissez immédiatement. Priorisez la containment et la préservation des preuves.
- Mettez le site en mode maintenance ou mettez-le hors ligne temporairement pour limiter l'exposition.
- Restreignez l'accès public aux fichiers du thème — limitez l'accès à
wp-content/themes/jannah/par liste blanche d'IP au niveau de l'hôte ou du serveur web si possible. - Remplacez ou supprimez le thème vulnérable si vous ne pouvez pas corriger immédiatement — passez à un thème WordPress par défaut (tel que Twenty Twenty-Three) jusqu'à ce qu'une mise à jour sécurisée soit disponible.
- Bloquez les vecteurs d'exploitation évidents à la périphérie — refusez les demandes contenant des séquences de traversée (
../ou%2e%2e%2f) et des noms de fichiers suspects (wp-config.php, .env). - S'il y a des preuves de compromission, faites tourner les identifiants immédiatement : comptes administrateurs WordPress, mot de passe de la base de données et toutes les clés API stockées sur le serveur.
- Prenez une sauvegarde complète (fichiers + base de données) et un instantané du système actuel pour les analyses judiciaires avant d'apporter des modifications destructrices.
- Scannez à la recherche d'indicateurs de compromission : recherchez des webshells, des fichiers récemment modifiés dans
wp-content/uploads/, et des fichiers PHP inattendus.
Atténuations à court terme (24–72 heures)
Après confinement, appliquez des atténuations en couches pour réduire la surface d'attaque en attendant les correctifs du fournisseur ou la remédiation finale.
- Appliquez des règles strictes .htaccess / nginx pour bloquer l'accès aux fichiers et les tentatives de traversée.
- Renforcez la configuration PHP : désactivez
autoriser_inclusion_url, limitezopen_basedir, et envisagez de désactiver des fonctions dangereuses (exec,shell_exec, etc.). - Corrigez les permissions et la propriété des fichiers : fichiers généralement 644, répertoires 755, et définissez
wp-config.phpà 600 ou 640 lorsque cela est pris en charge. - Auditez le code du thème et retirez temporairement ou renforcez toute déclaration include/require qui prend des entrées utilisateur.
- Bloquez les agents utilisateurs et les IP suspects au niveau de l'hôte ; identifiez et refusez les tentatives d'exploitation répétées.
- Appliquez un patch virtuel via WAF ou des règles d'hôte pour bloquer les modèles et points de terminaison LFI si un patch immédiat n'est pas possible.
Apache (.htaccess) — Protégez wp-config.php et bloquez la traversée
# Deny access to wp-config.php
<Files wp-config.php>
Order allow,deny
Deny from all
</Files>
# Block directory traversal attempts
RewriteEngine On
RewriteCond %{QUERY_STRING} \.\./ [NC,OR]
RewriteCond %{QUERY_STRING} \%2e\%2e [NC]
RewriteRule .* - [F]
Nginx — refusez wp-config.php et bloquez la traversée
location = /wp-config.php {
deny all;
}
# Block common traversal patterns
if ($args ~* "\.\./|\%2e\%2e") {
return 403;
}
Renforcement et corrections à long terme
- Mettez à jour le thème immédiatement lorsqu'un correctif officiel est publié et vérifiez la mise à jour sur l'environnement de staging avant le déploiement en production.
- Effectuez des revues de code régulières des thèmes et plugins tiers ; recherchez des inclusions dynamiques et des opérations de fichiers non validées.
- Maintenez un inventaire des composants installés, suivez les versions et abonnez-vous à des flux de vulnérabilité crédibles.
- Désactivez l'édition de fichiers dans le tableau de bord
wp-config.php:define('DISALLOW_FILE_EDIT', true); - Appliquez le principe du moindre privilège pour les utilisateurs de la base de données ; évitez les privilèges larges au-delà de ce que WordPress nécessite.
- Gardez la mise en scène et la production séparées ; ne stockez pas les sauvegardes dans des répertoires accessibles par le web.
- Faites tourner les secrets et les clés API régulièrement, et immédiatement après toute exposition suspecte.
- Déployez la détection en temps réel : surveillance de l'intégrité des fichiers (FIM), agrégation des journaux et alertes en temps réel pour les changements de fichiers suspects.
Détection et chasse : indicateurs de compromission et modèles de journaux
Examinez les journaux d'accès et d'erreurs pour des attaques de traversée et des tentatives de lecture de fichiers sensibles :
- Requests containing “../”, “..%2f”, “%2e%2e%2f”.
- Requêtes essayant de récupérer wp-config.php, .env, .bash_history, backup.sql, ou logs/debug.log.
- Paramètres longs ou encodés, charges utiles base64, ou POST tentant des téléchargements de fichiers dans des répertoires de thèmes.
Exemples de journaux suspects :
- Réponses 200/403 aux requêtes contenant ../../../wp-config.php dans la chaîne de requête.
- Erreurs 500 après des tentatives d'inclusion/requête (avertissements concernant les chemins d'inclusion).
- Accès inhabituels aux fichiers de thème tels que
/wp-content/themes/jannah/include.php?page=....
Fichiers et zones à inspecter sur le disque :
wp-config.php— vérifiez l'heure de modification et le contenu des fichiers.- Tout répertoire inattendu
.phpfichiers danswp-content/uploads/ou temporaire. - Entrées cron du serveur et de WordPress pour les tâches nouvellement ajoutées.
- Nouveaux comptes administrateurs ou comptes modifiés.
Commandes de chasse utiles (exemple) :
grep -E "(\.\./|\%2e\%2e)" /var/log/apache2/access.log
find /var/www/site -type f -mtime -7 -ls
Manuel de réponse aux incidents si votre site est compromis
- Isoler : placer le site en mode maintenance ou le mettre hors ligne pour éviter d'autres dommages.
- Instantané : collecter des images disque et des instantanés de base de données pour une analyse judiciaire.
- Changer les identifiants : faire tourner les mots de passe de la base de données, les mots de passe administratifs WordPress et les clés API.
- Supprimer les portes dérobées : rechercher et supprimer les webshells et les fichiers PHP suspects dans les répertoires uploads, thème et plugin.
- Restaurer à partir d'une sauvegarde propre si possible ; s'assurer que la sauvegarde précède la compromission.
- Réinstaller les fichiers de base/thème/plugin à partir de sources fiables et vérifier les sommes de contrôle lorsque cela est possible.
- Améliorer la surveillance : activer les vérifications d'intégrité et augmenter les niveaux d'alerte.
- Réévaluer les contrôles d'accès et les autorisations ; supprimer les comptes administratifs inutilisés.
- Documenter l'incident et signaler à votre fournisseur d'hébergement si pertinent.
- Faire appel à une aide professionnelle en réponse aux incidents si l'incident est complexe ou si vous manquez de capacité interne.
Comment la sécurité en couches s'intègre dans votre réponse
S'appuyer sur un seul contrôle est insuffisant. Une approche pratique et en couches utilisée par les équipes de sécurité de Hong Kong comprend :
- Patching virtuel à la périphérie (WAF ou règles d'hôte) pour bloquer les modèles d'exploitation pendant que le patch est en attente.
- Surveillance de l'intégrité des fichiers et analyse de logiciels malveillants programmée pour détecter rapidement les changements anormaux.
- Contrôles d'accès au niveau du réseau et de l'hôte pour restreindre l'accès administratif aux IP de confiance.
- Journalisation centralisée et alertes en temps réel pour accélérer la détection et réduire le temps de présence.
- Sauvegardes régulières et procédures de restauration testées pour récupérer de manière fiable après un incident.
Règles WAF pratiques et exemples Nginx/Apache que vous pouvez appliquer immédiatement.
Ci-dessous se trouvent des règles d'exemple pour bloquer les modèles LFI courants. Testez d'abord en staging pour éviter de casser des fonctionnalités légitimes.
# deny attempts to access wp-config.php directly via query string
if ($request_uri ~* "wp-config\.php") {
return 403;
}
# block traversal
if ($query_string ~* "\.\./|\%2e\%2e") {
return 403;
}
# ModSecurity conceptual rule
SecRule ARGS|ARGS_NAMES|REQUEST_URI|REQUEST_HEADERS "(?:\.\./|\%2e\%2e%2f|/etc/passwd|wp-config\.php|\.env)" \
"id:1000001,phase:2,deny,log,msg:'LFI/traversal attempt blocked',severity:2"
Remarque : Le blocage générique peut générer des faux positifs. Utilisez des listes blanches et des tests par étapes pour éviter les interruptions de service.
Guide pour les développeurs — comment corriger le code pour prévenir le LFI
Les développeurs doivent suivre ces pratiques pour éviter le LFI :
- Ne jamais utiliser les entrées utilisateur directement dans les instructions include/require.
- Préférez les listes blanches : associez des noms de pages sûrs à des chemins de fichiers au lieu d'accepter des chemins arbitraires des utilisateurs.
$pages = [
- Validez et normalisez les chemins avec
basename(),realpath(), et des vérifications qui garantissent que le chemin résolu se trouve dans un répertoire autorisé. - Évitez les inclusions dynamiques qui concatènent des entrées non fiables dans des chemins de fichiers.
- Utilisez les API WordPress lorsque cela est approprié (par exemple
get_template_part()etlocate_template()) et assurez-vous que les entrées de ces API sont validées.
Questions fréquemment posées (FAQ)
Q : Un attaquant peut-il exécuter du code arbitraire via LFI ?
R : Le LFI lit principalement des fichiers locaux, mais il peut conduire à une exécution de code à distance dans des attaques en chaîne—par exemple, en incluant un fichier PHP téléchargé contrôlé par l'attaquant ou un journal empoisonné. Une fois l'exécution de code arbitraire réalisée, un compromis complet du site suit généralement.
Q : Si je change le mot de passe de la base de données, mon site va-t-il cesser de fonctionner ?
R : Après avoir changé le mot de passe de la base de données, mettez à jour wp-config.php avec les nouvelles informations d'identification. Si l'attaquant a déjà utilisé les anciennes informations d'identification ailleurs, faites tourner les informations d'identification et les clés dépendantes si nécessaire.
Q : Que faire si je ne peux pas mettre à jour le thème parce qu'il est personnalisé ?
R : Utilisez le patching virtuel et les contrôles de bord pour réduire l'exposition, puis planifiez une mise à jour contrôlée. Pour les thèmes personnalisés, fusionnez les corrections du fournisseur dans votre code personnalisé ou refactorisez les parties vulnérables pour supprimer les inclusions non sécurisées.
Q : Combien de temps devrais-je garder le site hors ligne s'il a été compromis ?
R : Gardez le site hors ligne jusqu'à ce que vous puissiez retirer en toute confiance les portes dérobées, valider une sauvegarde propre, faire tourner les identifiants et confirmer qu'aucune persistance ne reste. Cela peut prendre des heures ou des jours selon la complexité.
Liste de contrôle : éléments immédiats et de suivi
Immédiat (dans les heures)
- Mettez le site en mode maintenance ou déconnectez-le
- Remplacez ou supprimez le thème Jannah si vous ne pouvez pas confirmer qu'il est corrigé.
- Bloquez les modèles de traversée au niveau du serveur web/WAF.
- Prenez des sauvegardes et des instantanés pour les analyses judiciaires.
- Scannez à la recherche de webshells et de fichiers suspects.
Suivi (24 à 72 heures).
- Renforcez PHP (open_basedir, désactivez les fonctions risquées).
- Renforcez les permissions de fichiers et désactivez l'édition de fichiers.
- Changez les identifiants de la base de données et de l'administrateur si une compromission est suspectée.
- Appliquez des règles de patching virtuel (WAF) pour bloquer les tentatives d'exploitation.
Long terme (en cours)
- Gardez les thèmes et les plugins à jour.
- Mettez en œuvre FIM et un scan continu des malwares.
- Passez en revue périodiquement et renforcez le code du thème personnalisé.
- Maintenez un inventaire des composants installés et suivez les vulnérabilités.
Réflexions finales
Les vulnérabilités d'inclusion de fichiers locaux sont attrayantes pour les attaquants car elles peuvent être automatisées et nécessitent peu ou pas d'authentification. Lorsqu'un thème largement utilisé est affecté, une réponse rapide et coordonnée est essentielle. Adoptez une posture prête à l'incident : sauvegardes à jour, journalisation centralisée, plans d'isolement et contrôles en couches (blocage en périphérie, renforcement de PHP, permissions de fichiers et détection en temps réel).
Si vous manquez de capacité interne pour enquêter ou récupérer, engagez un fournisseur de réponse aux incidents professionnel expérimenté avec WordPress. Dans l'environnement en évolution rapide de Hong Kong, un confinement rapide et un changement d'identifiants sont souvent les étapes les plus importantes pour prévenir la perte de données et la compromission en aval.
— Expert en sécurité de Hong Kong