Les fichiers de WordPress

N’aidez pas les pirates et arrêtez de créer des index.php !

Blog Les fichiers de WordPress N’aidez pas les pirates et arrêtez de créer des index.php !
8 commentaires

Dans la lignée de N’aidez pas les pirates et arrêtez de tout inclure !, voici un deuxième opus qui reprends la même réflexion mais avec les fichiers index.php.

Quel index ?

Je parle des fichiers index.php contenant la plupart du temps, soit du vide, soit un Silence is golden, voire même je parle du plugin du même nom Silence is Golden Guard. Plugin que je ne recommande pas, vous comprendrez pourquoi à la lecture.

Ce fichier sert à empêcher le listing du contenu des dossiers, si par exemple sur une installation tout fraîche je tape l’adresse /wp-content/plugins/ sur mon site, je vais voir ce genre de chose :

parent-directory

Et montrer la liste des plugins installés (actifs ou non) n’est jamais une bonne chose, il suffit qu’un plugin soit connu pour contenir une faille pour qu’un hacker tente de l’exploiter.

Mieux vaut donc éviter de laisser ce listing traîner, et par la même occasion ne pas utiliser des plugins comme My Plugins.

Le danger ?

Le danger vient du fait que parfois l’exploitation d’une faille permets d’écrire dans un fichier mais pas de créer ce fichier.

Si le fichier index.php se trouve dans un plugin, c’est moins grave dans le sens où, si le hacker connait le chemin vers le dossier du plugin, c’est qu’il a détecté ce plugin chez vous,et donc il a déjà d’autres fichiers php dans lesquels il peut écrire son code malicieux.

Le danger est surtout présent pour le dossier /uploads/ qui n’est pas censé contenir de fichiers php du tout.

Imaginez alors qu’un hacker parvienne à créer un fichier .php dans ce dossier, ça ferait assez mal, c’était ce que faisait la faille MailPoet justement.

Mais maintenant, imaginez que les droits de création de fichiers via fwrite() ou file_put_contents() soient refusés, et seuls les move_uploaded_files() soient autorisés. Ce cas est plus sécurisé car il ne permet la création de fichiers que via l’upload de WordPress et non via un script php maison ou malicieux.

Bien ! Mais … et si un plugin ou une personne avait cru bien faire et m’avait ajouté des index.php vide dans tous mes sous-dossiers ? Et bien le hacker n’aurait alors plus besoin que de modifier, mettre à jour un fichier et non pas le créer, ce qui ne requiert pas les même droits !

En voulant protéger le listing des dossiers, vous avez permis à un hacker d’ajouter du code php malicieux dans votre installation.

Comment vraiment se protéger ?

La vrai protection est d’empêcher ce listing un cran plus haut, c’est à dire directement dans la config apache ou ngnix ou encore IIS, comme ceci :

Options -Indexes
Apache
location / {
    autoindex on;
}
Ngnix

Pour IIS, il suffit de se rendre dans la configuration du dossier racine puis modifier désactiver l’option Exploration de répertoire.

Dernier point, ce que je dis pour index.php fonctionne avec n’importe quel autre fichier PHP inutile, comme hello.php !

A vous de ne pas aider les hackers à vous pirater, retirer leur des outils !

8 commentaires

Et si on place des fichiers index.htm ? Plus d’exécution php et plus de listing 😉
Ça peut être une solution rapide.

@jack-number C’est mieux mais ça permet alors l’insertion de code HTML servant de phishing ou hébergements de liens en bad SEO. Bref, de la bidouille. Une configuration adequat est recommandée plutôt que de perdre du temps à devoir mettre des fichiers dans chaque dossier, j’y vois un risque et une perte de temps et non « une solution rapide ». Comment ça peut être rapide et maintenable ? Non merci !

Merci Julio pour cette précision ! Peux tu préciser comment configurer les droits de création de fichiers comme tu l’indique stp ?

@nicolas Il s’agit de chmod, tu mets « droit en lecture » et pas en écriture, donc la création de fichier sera interdite, mais un upload ou une MAJ de fichier devrait passer, à retester. Pour le « comment changer le mode avec chmod » je t’invite à googler.

@julio-potier Je sais comment changer le chmod mais je voulais juste savoir ce que tu conseille comme code spécifiquement pour le dossier uploads.

Bonsoir Julio,

Une chose m’interpelle dans ton article :

« Si le fichier index.php se trouve dans un plugin, c’est moins grave dans le sens où, si le hacker connait le chemin vers le dossier du plugin, c’est qu’il a détecté ce plugin chez vous,et donc il a déjà d’autres fichiers php dans lesquels il peut écrire son code malicieux »

En gros il suffit d’utiliser un plugin connu pour être potentiellement hacké ?! Dur !

Renommer les dossiers de chaque plugin ?!

Bonsoir,

Pour ne pas faire remonté le nom des plugins installés sur un site WP il était conseillé de créer un fichier index.php dans chaque répertoire d’un plugin. Cela est fonctionnel pour certain plugin .

Pour rappel ce genre de site détecte les plugin et thème utilisé : http://whatwpthemeisthat.com/

Existe-il une façon de ne plus faire apparaitre de nom des plugins sur ce genre de site?

Malgré un Options All -Indexes dans mon fichier .htaccess cela ne cache pas la liste des plugins via les sites de détection des plugins

Cordialement,
Sylvain Brunerie

Bonjour, un peu tard mais…
je viens de « tomber » sur cet article et j’ai donc testé ce fameux « whatwpthemeisthat », et en fait avec un thème-enfant « customisé » (comme c’est le cas sur mon site, cela semble bloquer la possibilité de lister les plugins installer.
Bon ou c’est tout à fait autre chose, je ne suis pas une pointure, mais je me suis dit que si mon hypothèse était bonne cela valait peut-être le coup de la partager.
Voili, voilou!
J’attends l’avis de l’expert.
Bonne journée.

Laisser un commentaire