# Scanner de sécurité WordPress en lecture seule pour serveurs HestiaCP Détecte les indicateurs de compromission wp2shell (CVE-2026-63030 / CVE-2026-60137) sur tous les sites hébergés — rapports par e-mail par utilisateur, comparaison des fichiers du noyau avec un WordPress propre, analyse PHP/JS/htaccess/images, et évaluation IA facultative via l'API Claude.
Scanner de sécurité WordPress en lecture seule pour les serveurs HestiaCP.
Détecte les indicateurs de compromission wp2shell sur tous les sites hébergés — avec rapports email par client, diff des fichiers du noyau, détection de webshells par SHA256, score de risque et évaluation IA optionnelle.
⚠️ Versions sûres : WordPress 6.8.6 / 6.9.5 / 7.0.2 ou plus récent.
Ces scripts ne modifient jamais rien — lecture seule de bout en bout.
wp2shell est une chaîne d'exécution de code à distance (RCE) sans authentification dans le noyau WordPress, divulguée le 17 juillet 2026. Une seule requête HTTP anonyme contre une installation par défaut suffit pour créer un administrateur malveillant et exécuter du code arbitraire sur le serveur.
La chaîne combine :
author__not_in de WP_Query/wp-json/batch/v1Les sites compromis présentent un administrateur malveillant avec le préfixe de connexion wp2_ et l'email @wp2shell.invalid.
Plus d'informations : https://wp2shell.com
| Fichier | Objectif |
|---|---|
wp2shell-scan.sh | Scanner IoC rapide à l'échelle du serveur — sortie terminal colorée, score de risque par site, rapport auto-enregistré dans /root/ |
wp2shell-report-per-user.sh | Scanner complet — rapports email par utilisateur HestiaCP, diff des fichiers du noyau, détection de webshells par SHA256, évaluation IA, score de risque |
known_shells.sha256 | Base de données de hachages SHA256 de webshells connus — récupérée automatiquement à l'exécution |
| Vérification | Sévérité |
|---|---|
| Version WordPress vs. versions sûres | HIGH / OK |
Comptes avec préfixe wp2_ ou email @wp2shell.invalid | CRITICAL |
| Administrateurs créés après la divulgation (15/07/2026) | MEDIUM |
| Lacunes dans la séquence des ID utilisateurs (traces d'admin malveillant supprimé) | MEDIUM |
Lignes wp_usermeta orphelines | MEDIUM |
Lignes oembed_cache / customize_changeset empoisonnées | CRITICAL |
Options WP falsifiées (upload_path, auto_prepend_file, siteurl) | CRITICAL / HIGH |
| Vérification | Sévérité |
|---|---|
wp core verify-checksums vs. wp.org | HIGH |
diff -U5 ligne par ligne contre le noyau propre téléchargé | CRITICAL / HIGH / OK |
| Fichiers supplémentaires absents du noyau propre (contenu + métadonnées affichés) | CRITICAL / HIGH |
| Vérification | Sévérité |
|---|---|
PHP dans uploads/ | CRITICAL |
Extensions PHP supplémentaires (.php7 .phtml .phar .php5) | HIGH |
| Correspondance SHA256 avec la base de données de webshells connus (WSO, FilesMan, b374k, p0wny…) | CRITICAL |
PHP modifié après SINCE_DATE ET correspondant à des motifs suspects — avec la ligne correspondante affichée en ligne | CRITICAL / HIGH |
| PHP avec motifs suspects mais PAS modifié récemment | LOW |
JS/HTML modifié après SINCE_DATE ET correspondant à des motifs d'obfuscation | MEDIUM |
| URLs externes C2/exfiltration (pastebin, ngrok, webhooks Discord, bit.ly…) | CRITICAL |
Directives dangereuses .htaccess (AddType, auto_prepend_file, RewriteRule externe) | HIGH |
.htaccess modifié après SINCE_DATE | MEDIUM |
Images polyglottes avec payload PHP (<?php dans .jpg/.png…) | CRITICAL |
Fichiers de sauvegarde/config exposés (wp-config.php.bak, *.sql…) | MEDIUM |
| Vérification | Sévérité |
|---|---|
Entrées crontab utilisateur avec curl/wget/php/base64 | HIGH |
| Fichiers cron système référençant le chemin du site | MEDIUM |
Chaque site reçoit un score de risque de 0 à 100 avec une ventilation de chaque résultat contributif :
+------------------------------------------+
| RISK SCORE: 96/100 COMPROMISED |
+------------------------------------------+
+40 wp2shell fingerprint account
+30 PHP file(s) inside uploads/
+20 Vulnerable WordPress version
+6 Core checksum failure
| Score | Libellé |
|---|---|
| 0–20 | Probablement propre |
| 21–40 | Risque faible |
| 41–60 | Risque moyen |
| 61–80 | Risque élevé |
| 81+ | COMPROMIS |
wprootsendmail (pour les rapports email)python3 (pour la gestion JSON de l'évaluation IA)curl, sha256sum, file, strings, unzipcurl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
chmod +x wp-cli.phar && sudo mv wp-cli.phar /usr/local/bin/wp
curl -fsSL https://raw.githubusercontent.com/BytesPulse-OE/wp2shell-Hestia-Scanner/main/wp2shell-scan.sh | sudo bash
curl -fsSL https://raw.githubusercontent.com/BytesPulse-OE/wp2shell-Hestia-Scanner/main/wp2shell-report-per-user.sh \
-o wp2shell-report-per-user.sh && sudo bash wp2shell-report-per-user.sh
Remarque : Le scanner complet pose des questions interactives au démarrage (évaluation IA, enregistrement du rapport, seuil de date). Télécharger d'abord puis exécuter garantit que les invites fonctionnent correctement.
sudo bash wp2shell-scan.sh
Trouve toutes les installations WordPress sous /home/*/web/*/public_html/, exécute toutes les vérifications, affiche une sortie colorée dans le terminal et enregistre un rapport complet dans /root/wp2shell-report-YYYYMMDD-HHMMSS.txt.
Au démarrage, il demande un seuil de date personnalisé facultatif (par défaut : 2026-07-15).
sudo bash wp2shell-report-per-user.sh
Au démarrage, trois questions :
[AI EVALUATION] Utiliser l'évaluation IA pour les fichiers ambigus ? [y/N]
[SAVE REPORT] Enregistrer un rapport complet pour examen ultérieur ? [y/N]
[DATE THRESHOLD] Utiliser une date différente ? Laisser vide pour conserver la valeur par défaut [YYYY-MM-DD] :
Commencez toujours avec DRY_RUN=1 (la valeur par défaut) — les emails sont prévisualisés à l'écran, rien n'est envoyé. Passez à DRY_RUN=0 uniquement après avoir confirmé que la sortie semble correcte.
| Variable | Défaut | Description |
|---|---|---|
WEB_ROOT | /home | Racine web HestiaCP |
SINCE_DATE | 2026-07-15 | Seuil « modifié récemment » |
WP | wp | Chemin vers WP-CLI |