Sécurité WordPress : éviter la copie sur le serveur de fichiers .txt potentiellement compromettants

Lorsque vous installez WordPress sur un serveur ou que vous modifiez un site WordPress existant pour lui ajouter un thème ou une extension, vous devez faire attention aux fichiers que vous copiez sur le serveur. En effet, certains fichiers, dont l'extension n'est pas protégée par le serveur (ex : .txt), pourraient comprendre de l'information intéressante pour les usagers malveillants comme par exemple le numéro de version de WordPress, d'un thème ou d'une extension. 

▼Publicité

Les usagers malveillants sont à la recherche de telles informations afin d'exploiter des failles de sécurité connues. Il est donc important de ne pas leur fournir d'armes à cette fin, surtout que les fichiers en cause ne sont pas nécessaires au bon fonctionnement du site WordPress.

Parmi les fichiers à ne pas copier sur le serveur, notons :

  • wordpress/readme.html (contient le numéro de version de WordPress)
  • wordpress/license.txt (peu d'information compromettante mais complètement inutile au fonctionnement du site)
  • wordpress/wp-content/themes/.../readme.txt (peut contenir le numéro de version et/ou la liste des changements apportés depuis la version précédente)
  • wordpress/wp-content/themes/.../changelog.txt (contient la liste des changements apportés depuis la version précédente)
  • wordpress/wp-content/themes/.../license.txt (peu d'information compromettante mais complètement inutile au fonctionnement du site)
  • wordpress/wp-content/plugins/.../readme.txt (peut contenir le numéro de version et/ou la liste des changements apportés depuis la version précédente)
  • wordpress/wp-content/plugins/.../changelog.txt (contient la liste des changements apportés depuis la version précédente)
  • wordpress/wp-content/plugins/.../license.txt (peu d'information compromettante mais complètement inutile au fonctionnement du site)
  • etc.

Démonstration de recherche d'information vulnérable

Mettez-vous à la place d'un usager malveillant à la recherche d'un site WordPress contenant par exemple la version 5.8 de l'extension nommée « un plugin vulnerable », qu'il sait vulnérable. La première chose à faire est de vérifier si un site est effectivement bâti avec WordPress :

  • Il affiche le site Web dans son navigateur.
  • Il affiche le code source de la page (clic droit / Afficher le code source de la page).
  • Il recherche une référence à un fichier .css dans un dossier au format wp-content/themes/... ou wp-content/plugins/.... S'il la trouve, il sait alors qu'il s'agit d'un site WordPress.

L'usager malveillant recherchera ensuite la présence de l'extension en question. Il connait le nom du dossier qui contient normalement l'extension (ex : un-plugin-vulnerable). Il sait également que ce dossier contient un fichier nommé, disons, unpluginvulnerable.php. 

  • Dans le navigateur, il entre l'URL du site suivi de /wp-content/plugins/nom-du-dossier/nomdufichierconnu.php (ex : http://mondomaine.com/wp-content/plugins/un-plugin-vulnerable/unpluginvulnerable.php). Si le navigateur n'affiche pas d'erreur 404, c'est que l'extension est bel et bien installée sur le serveur dans le dossier habituel.

L'usager malveillant recherchera finalement la présence d'indices sur la version utilisée. 

  • La façon la plus simple est de regarder dans le code source de la page. Certaines extensions affichent directement le numéro de version afin de gérer le cache lors d'un changement de version (ex : <link rel='stylesheet' href='http://mondomaine.com/wp-content/plugins/un-plugin-vulnerable/css/styles.css?ver=5.8' />). Cependant, c'est souvent la version de WordPress qui est affichée à cet endroit. Il n'a donc pas encore de certitude sur la version utilisée.
  • Le numéro de version pourrait être trouvé dans un fichier texte. Dans notre exemple, l'usager malveillant sait que le fichier readme.txt contient la liste des modifications apportées entre chaque version. Il entre donc l'URL du fichier dans son navigateur :  http://mondomaine.com/wp-content/plugins/un-plugin-vulnerable/readme.txt. Et bingo ! Le numéro de version apparaît dans la section == Changelog ==.

Il est maintenant prêt à exploiter la faille connue de cette version. Ouch !

Comment se prémunir ?

Tout d'abord, vous devez vous assurer que le numéro de version n'apparaisse pas dans le code source de la page. Consultez à cet effet l'article « Cacher le numéro de version de WordPress et régler le problème de cache de la feuille de style ».

Assurez-vous également que les thèmes ou extensions non utilisés ne soient pas copiés sur le serveur. Puisque tout fichier pourrait éventuellement être utilisé ma mauvais escient, mieux vaux ne pas conserver les fichiers inutilisés.

Ensuite, recherchez les fichiers potentiellement compromettant à la racine de WordPress, dans les dossiers de thèmes et dans les dossiers d'extension. Si vous trouvez un tel fichier sur le serveur, gardez-en une copie sur votre poste local (juste au cas où) puis supprimez-le du serveur. 

Testez ensuite votre site pour vous assurer que tout fonctionne encore normalement.

Autre alternative : configuration serveur

Il est également possible de configurer le serveur pour qu'il ne permette pas l'affichage dans les navigateurs des fichiers readme.txt et autres fichiers potentiellement compromettants. Ceci sera fait à l'aide du fichier .htaccess ou web.config, selon le serveur utilisé. Cette technique a l'avantage de faciliter les mises à jour puisqu'il ne sera pas nécessaire de vérifier le contenu des dossiers à chaque fois. 

Cependant, certains fichiers comme index.html demeureront visibles dans le navigateur, de par leur nature, et devront être supprimés manuellement.

Pour plus d'information

«< WordPress Security Tip: Delete ReadMe after Installation ». WordPress Optimized!. http://wordpress.2bearstudio.com/wordpress-security-tip-delete-readme-after-installation/

« WordPress security tips using htaccess ». Aleix Martí. http://www.interactius.com/security/wordpress-security-tips-using-htaccess/

Merci de partager ! Share on FacebookTweet about this on TwitterShare on Google+Share on LinkedInPin on PinterestShare on StumbleUponEmail this to someone
Catégories