Le WordPress d'aujourd'hui, décodé pour les développeurs

Sécurité

Dette de sécurité : ce qu’un audit trouve après cinq ans sans revue de code dédiée

Un site qui vit cinq ans sans revue de sécurité dédiée accumule des failles par couches. Voici les catégories qui reviennent, presque à chaque fois.

Par WordPress Développement • 11 janvier 2024 • 4 min de lecture • Aucun commentaire
Dette de sécurité : ce qu'un audit trouve après cinq ans sans revue de code dédiée

Qu’est-ce qui reste d’un site WordPress après cinq années de mises à jour ponctuelles, de changements d’extensions et de passages de prestataires successifs, sans qu’aucune revue de sécurité dédiée n’ait jamais été menée ? La réponse tient rarement en une seule faille spectaculaire. Elle ressemble plutôt à un empilement de petites négligences, chacune anodine prise isolément, mais qui forment ensemble une surface d’attaque bien plus large que ce que le propriétaire du site imagine.

Reprendre un projet dans cet état, à l’occasion d’un audit ou d’une reprise de maintenance, révèle des motifs récurrents. Les classer permet de prioriser une remise à niveau au lieu de traiter chaque symptôme séparément.

Les extensions désactivées mais jamais supprimées

Une extension désactivée depuis wp-admin reste sur le serveur, dans le dossier wp-content/plugins, avec l’intégralité de son code PHP accessible via une requête directe si son fichier principal n’inclut pas de vérification defined('ABSPATH'). Pire : certaines extensions enregistrent des routes REST ou des points d’entrée AJAX qui restent actifs tant que le fichier PHP existe, même si l’extension n’apparaît plus comme active dans l’interface.

Un audit type commence systématiquement par un inventaire du dossier plugins comparé à la liste des extensions actives renvoyée par get_option('active_plugins'). L’écart entre les deux listes est presque toujours non nul sur un site de cinq ans.

Les comptes créés pour un besoin ponctuel

Un compte administrateur créé pour un audit externe, un stagiaire, un prestataire en mission de trois semaines : ces comptes survivent largement à leur raison d’être. La commande wp user list --role=administrator via WP-CLI suffit à faire apparaître, sur un site ancien, des comptes dont plus personne dans l’équipe ne se souvient de la fonction.

L'essentiel à retenir : La dette de sécurité s'accumule par couches successives, pas par un seul événement ; Les extensions désinstallées laissent des tables et des routes actives ; Les comptes créés pour un besoin ponctuel survivent bien au-delà de leur utilité

Les identifiants d’API jamais renouvelés

Une clé d’API générée en 2020 pour une intégration devenue obsolète reste souvent stockée en clair dans une option WordPress ou dans un fichier de configuration versionné par erreur. Sans rotation planifiée, ces identifiants ne sont jamais invalidés : ils continuent de fonctionner tant que le service tiers ne les révoque pas de son côté.

Ce que révèle une recherche ciblée

Une recherche du terme api_key ou secret dans la base de données via WP-CLI (wp db search 'api_key') fait souvent remonter des dizaines de résultats répartis entre options de plugins, métadonnées de configuration et parfois des exports de sauvegarde oubliés dans les téléversements.

Les fichiers de sauvegarde exposés publiquement

Un export SQL ou une archive complète du site, généré manuellement avant une migration et jamais supprimé, finit régulièrement dans wp-content/uploads ou à la racine du site, accessible par une simple URL directe si aucune règle serveur ne bloque l’accès aux extensions .sql, .zip ou .tar.gz.

  • Fichiers .sql laissés par un export manuel via phpMyAdmin
  • Archives complètes générées par une extension de sauvegarde puis jamais nettoyées
  • Copies de wp-config.php renommées en .bak lors d’une modification rapide

Les correctifs de sécurité contournés plutôt que corrigés

Face à une alerte de sécurité sur une extension, la réaction la plus rapide consiste souvent à désactiver la fonctionnalité concernée plutôt qu’à mettre à jour ou remplacer l’extension. Cinq ans plus tard, ce contournement temporaire est devenu une configuration permanente que plus personne ne remet en question, et l’extension vulnérable est toujours installée, simplement inactive dans un coin.

Un audit qui ne trouve rien à signaler après cinq ans sans revue dédiée n’a probablement pas assez creusé : la dette de sécurité ne disparaît jamais d’elle-même, elle s’accumule silencieusement.

Notre verdict

Ces quatre catégories — extensions fantômes, comptes orphelins, identifiants jamais tournés, sauvegardes exposées — reviennent avec une régularité frappante sur les projets anciens. Aucune ne relève d’une vulnérabilité sophistiquée : ce sont des oublis cumulés, qui deviennent dangereux uniquement parce que personne n’a eu l’occasion de les regarder d’ensemble. La bonne nouvelle, c’est qu’un inventaire méthodique via WP-CLI et une recherche ciblée dans la base de données suffisent à en révéler l’essentiel en quelques heures, avant même d’entrer dans une analyse de code plus fine.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Partager :

À propos de l'auteur

WordPress Développement

Développeur WordPress, passionné par Elementor, le FSE et l’automatisation par IA.

Voir tous ses articles

Dans la même veine

À lire aussi