Que manque t-il à WordPress au niveau sécurité : Quelques points tout de même

28. février 2012 Humeurs
Que manque t-il à  WordPress au niveau sécurité : Quelques points tout de même

Un manque de sécurité dans WordPress ? Serais-je en train de parler de faille ? Non !

Cette article fait parti de « La chaine WP », et j’ai évidemment décidé de l’orienter sur la sécurité. Non, je ne suis pas en train de dire qu’il y a des failles, ni l’inverse.

Je vais en quelques points vous parler de ce qui pourrait manquer à WordPress pour qu’il soit un peu plus sécure suite à son installation. Ceci n’est donc que mon avis et j’attends avec impatience les votres en commentaires, à quoi n’ai-je pas pensé !?

  1. Votre login et mot de passe
  2. Ecrire dans les fichiers
  3. HTACCESS
  4. Authenticité des fichiers du core
  5. Sécurité des plugins
  6. (Bonus) Proposition de plugins
  7. Et les autres CMS ?
  8. (Bonus 2) Les autres articles de la chaine WP

Votre login et mot de passe

Ce couple est le sésame administrateur qu’envient les pirates dans le but de … oula plein de choses ! Ajouter des publicités dans vos articles, modifications de je ne sais quoi pour permettre le spam dans vos commentaires, ou carrément modifier votre page d’accueil pour diffuser des messages politico-integristo-pabo … Ou encore même vos concurrents dans le but de vous ralentir et casser votre SEO.

Qu’est-ce que je reproche ?

1) Pour le login, le fait que le login « admin » soit autorisé est la meilleure idée pour laisser travailler les brutes-force. Pourquoi, et bien dans les anciennes versions de WordPress (avant la 3.0) le login par défaut d’une installation était « admin » et seul le mot de passe était à choisir. Un brute-force est un script qui va essayer de se connecter à votre administration. Si le login est déjà connu, alors seul le pass reste a brute-forcer, pour peu qu’il soit un peu trop simple, boum …

2) Pour le mot de passe, rien ne nous empêche de choisir « azerty » ou « 123456 » pour un compte administrateur, moi ça me choque.

3) Quand je souhaite modifier mon mot de passe, il me suffit de me rendre sur le page « Votre profil » et d’entrer 2 fois mon nouveau pass. Euh, on ne me demande pas l’ancien ? Aie :/

Ce que je conseille

1) Si vous êtes encore « admin » avec le rôle d’administrateur, je vous conseille de créer un second administrateur, ce compte sera votre nouveau compte admin. Créez le avec un bon mot de passe, modifiez le de temps en temps, 1 fois par mois serait idéal.

Ensuite dégrader le compte « admin » et le faire passer en simple membre. Vous pouvez aussi vous créer un compte « auteur » pour la rédaction des articles, après tout, il est là pour ça !

N’utilisez ce nouveau compte admin QUE pour administrer et non pas pour rédiger des articles, utilisez votre nouvel Auteur, ce qui implique que vous vous déconnectiez du compte administrateur lorsque vous n’en avez pas besoin.

Petit bonus (merci Greg de Screenfeed): Ce nouveau compte admin n’aura pas l’ID 1, au cas où un script malicieux exploit « le compte admin de base ». Bien vu !

2) Pour ce qui est du mot de passe, il serait bien de forcer au moins les comptes ayant des droits d’administration à avoir un mot de passe fort, c’est à dire assez long et/ou assez compliqué. Aujourd’hui nous sommes libre de choisir « 123456 » ou « azerty » qui sont légèrement connus hum…

Qu’un membre lambda souhaite utiliser « azerty » ne me dérange pas, mais qu’un administrateur utilise un mot de passe simple, aie !

3) Pour la modification du pass, vous pouvez décider qu’un administrateur doivent utiliser le mot de passe envoyé dans le mail lors de l’inscription ou d’un reset password en ajoutant un filtre dans votre functions.php :
[/php]add_filter( ‘show_password_fields’, ‘__return_false’ );[/php]
Attention ce filtre évite juste d’afficher les champs de mot de passe mais si on hack un peu, il est tout de même possible de modifier le pass.

Comment palier à ça ?

1) Je vous recommande de modifier le login de cet « admin », j’ai regardé si un plugin existait et à part un plugin vulnérable que je ne vous proposerais pas, le mieux est de modifier directement dans PhpMyAdmin pour ceux qui ont accès. Voici la requête (assumant que votre préfixe soit wp_) :
[/php]UPDATE wp_users SET user_login=’new_admin_name’ WHERE user_login=’admin’[/php]
Pour ceux qui n’ont pas accès, voici la même chose à coller dans votre functions.php, rechargez le tableau de bord une fois, supprimez le code (il se sert plus, ça évitera une requete pour rien) :
[/php]if( is_admin() ) {
function baw_update_admin()
{
global $wpdb;
$wpdb->update( $wpdb->users, array( ‘user_login’, ‘new_admin_name’ ), array( ‘user_login’, ‘admin’ ) );
}
}[/php]
2) Choisissez un mot de passe long même s’il ne contient pas de caractères spéciaux. « mon mot de passe est long mais je le connais » est meilleur que « &W1o2r3d;4;P5r6e7s8s@ » …

Pour ce qui est de forcer un mot de passe fort ou de forcer un renouvellement, ça ne me dit rien, c’est pour cela que je vais les développer dans la version pro de « More Secure Login »

Ecrire dans les fichiers

Il vous est possible de modifier directement depuis l’administration les fichiers de vos thèmes et de vos plugins. Cela peut être très utile, mais aussi apporter son lot d’ennuis.

Ce que je reproche

Ceci devrait être une directive de type DEFINE à insérer dans le wp-config.php pour autoriser l’écriture de ces fichiers, alors qu’aujourd’hui c’est l’inverse, il faut ajouter un DEFINE pour empêcher cette écriture. Ce qui signifie qu’une personne ayant accès à ces fichiers a unc accès à l’upload de code de n’importe quel script PHP dans votre fichier « functions.php ». Elle peut y insérer une backdoor, faire des requetes dans votre BDD, modifier les clefs des tokens, modifier les mots de passe, bref, pas très sympatique.

Ce que je conseille

Et bien simplement WordPress devrait supprimer l’ancienne directive DEFINE et en insérer une nouvelle qui servirait à autoriser l’écriture des fichiers.

Quelquechose comme ça serait le bienvenue :
[/php]define( ‘ALLOW_FILE_EDIT’, true );[/php]
Comment palier à cela ?

Pour le moment vous pouvez ajouter ceci dans votre wp-config.php :
[/php]define( ‘DISALLOW_FILE_EDIT’, true );[/php]

HTACCESS

WordPress crée un fichier .htaccess avec très peu d’options, surement pour des questions de configuration serveur, vous pouvez donc lister le contenu des dossiers comme /wp-content/plugins/

Ce que je repproche

De base, il est possible de faire un « Directory Listing », comme je viens de le dire cela permets de lister le contenu des dossiers, que ce soit /uploads/ dans lequel vous avez peut etre ajouté un dossier ‘perso’ ou ‘secret’, que ce soit /plugins/ ou /cache/, il est dangeureux de laisser un accès en lecture à ces dossiers qui peuvent être une mine d’informations pour un pirate.

Ce que je conseille

Il faudrait ajouter une directive « Options » par défaut dans le .htaccess lors de l’installation de WordPress afin de sécuriser ce listing en l’empêchant.

Comment palier à cela

Ajoutez dans votre « .htaccess » à la racine de votre installation cice en dernière ligne :
[/php]« Options -Indexes »[/php]
Ainsi, le listing renvoie des code 403 – Page interdite.

Authenticité des fichiers du core

A vos souhaits. Les fichiers du core sont identiques pour tout le monde. Il est plus que vivement déconseillé de les modifier afin de ne pas perdre les modifs dans les prochaines mises à jour par exemple.

Lors de « gros » piratages profonds certains pirates malins évitent de tout casser ou modifier l’index, à la place ils restent discrets au maximum et modifient juste quelques fichiers par-ci par-la. Aucun nouveau fichier louche n’est donc ajouté.

Ce que je reproche

Pas grand chose en fait, WordPress ne peut en somme rien faire contre ça.

Ce que je conseille

Il faudrait vérifier de temps en temps (pourquoi pas tous les jours pendant la nuit ?) que les fichiers du core n’aient pas été modifiés, j’irais même un peu plus loin en ajoutant « idem pour les plugins, thème et aussi qu’aucun fichier n’ai été créé ».

Comment palier à cela

Pour cela un plugin existe c’est « Exploit Scanner« , il vérifie le core pour son authenticité. Il fait aussi d’autres scans qui n’ont pas de rapport avec le sujet, je vous laisse découvrir.

Ce plugin a une lacune que vous pouvez corriger vous même : supprimez (pas seulement désactivé !) et réinstallez le plugin à chaque fois que vous scannez. Vous avez saisi pourquoi ? Non ? Je vous le répète alors : « certains pirates malins [..] restent discrets […] et modifient juste quelques fichiers », le pirate va donc modifier le fichier de vérification de cette authenticité pour berner le plugin et vous avec … oui c’est malin un pirate x)

Sécurité des plugins

Un plugin n’étant en somme que du code php qui sait se lier au core de WordPress, tout le monde peut créer des plugins, quelque soit votre niveau php, vous pouvez créer un plugin.

Ce que je reproche

Les plugins ne sont pas vérifiés lors de leur upload ou mise à jour sur le repository. Certes les membres de la communauté réagissent vite face à un plugin volontairement malveillant mais pas face à un plugin malencontreusement vulnérable à une faille web.

Je « reproche » gentiment car je sais qu’il est humainement impossible de les vérifier…

Ce que je propose

Malheureseument pas grand chose ici, comme je viens de le dire, personne, aucune équipe ne pourrait repasser les 18000 plugins en review sécurité ni même tenir la charge des nouveaux plugins + la mises à jour des anciens, je ne propose donc rien :/

Ce que je conseille

Et bien, vérifier que le plugin n’est pas connu pour des failles de sécurité en cherchant sur le forum du plugin, dans les commentaires chez l’auteur, sur d’autres forum wordpress via google, ou sur ce site si l’audit a été réalisé, il ne vous reste plus qu’a le faire auditer (ici aussi) si vous souhaitez vous assurer de ne pas installer un plugin vulnérable.

Proposition de plugins

Voici une liste de quelques plugins dit « de sécurité ». Je les ai audités avant de vous les présenter, ce n’est pas parce qu’un plugin se dit faire de la sécurité qu’il est lui même sécurisé (exemple avec le très connu WordPress Firewall 1 et WordPress Firewall 2), vous me suivez ? Bien.

  • Secure WordPress et WP Security Scan : interface claire et simple, quelques cases à cocher et vous voici avec un wordpress un peu plus sécurisé, il détecte lui aussi les url malicieuses. Lien vers l’extend & Lien vers l’extend
  • Exploit Scanner : très utile APRES un piratage, lui ne préviens pas il guéri, et encore, il indique où se trouvent les morceaux de codes louches. Le moindre fichier du core wordpress modifié est détecté et recherche dans vos articles si il y a eu injections de code louche comme des pubs etc. Lien vers l’extend
  • WordPress Plugin Security Checker : Ce plugin vous permet de savoir si l’extension que vous avez installé a été audité pour sa sécurité et si elle est sécurisée ou pas. Plugin de chez moi celui-ci. Lien vers l’extend
  • More Secure Login : Ce plugin ajoute un champ supplémentaire à renseigner lors de votre connection. Ce nouveau code demandé est contenu sur une « Carte de Sécurité » que vous aurez imprimé au préalable. Il s’agit d’une authentification forte. Lien vers l’extend
  • Chap Secure Login : pour ceux qui n’ont pas la possibilité d’activer le SSL pour leur site, vous pouvez installer ce plugin qui hash votre mot de passe avant de l’envoyer lorsque vous vous logguez sur le site. Lien vers l’extend
  • Login Lock : Ce plugin va vous permettre de bloquer les brute force de mots de passe, vous recevrez un mail si cela arrive, vous avez aussi la possibilité de forcer la déconnexion de tous les membres et de leur faire modifier leur mot de passe afin de les obliger à en choisir un fort. Lien vers l’extend
  • BackWPUp : le must du plugin de backup, très simple à utiliser complet. Attention tenez vous à jour car des failles ont été trouvées dans la 2.1.4 et 2.1.5, la 2.1.6 corrige tout ça. Lien vers l’extend Ici rien à voir avec la sécurité, mais sauvegardez vos données car une fois le piratage arrivé, il sera trop tard.
  • Audit Trail : Ce plugin permet de garder des logs de tout ce qui est fait dans l’administration, cela peut être très utile pour découvrir ce qui vient de se passer ou voir des comportements bizarres. Lien vers l’extend

Peut-être connaissez vous « Theme Authenticity Checker » ou « Antivirus » qui scannent vos themes ou plugins à la recherche de failles, l’idée est bonne mais en fait trop de lacunes, je vous invite à lire cet article: http://baw.li/tac

Et les autres CMS ?

Ha, ça sent le troll là , WordPress est-il plus sécure que les autres CMS ? C’est quoi un CMS secure ? Voici ma définition :

Un CMS secure est un CMS dont les équipes de développements sont réactives à la moindre suspicion de faille de sécurité et dont les membres de sa communauté divulguent les failles de façon responsable afin de ne pas créer de mouvement de piratage massif.

Cela ne se compte donc pas au nombre de failles découvertes dans le CMS mais à la rapidité de correction des équipes de dev. Et chez WordPress, les failles sont corrigées rapidement, et on ne connait la faille que quand un patch est dispo (c’est ça, la divulgation responsable ou Responsible Disclosure). Prenez un autre CMS avec moins de failles (en quantité) mais dont le patch ne vient que très tard et ou les failles sont divulguées sur la toile, je vous laisse imaginer la tête des sites l’utilisant …

Je ne dirais pas « WordPress est le plus secure des CMS », aucun ne l’est, des failles existent encore dans la version 3.3.1, mais où sont-elles … Même chose pour toute grosse application web en fait.

Les autres artiles de la chaine WordPress sur le sujet « Que manque t-il à WordPress ? » sont ici !

Article 1 chez Seomix : « [La chaine WP] Que manque t-il à WordPress ? »
Article 2 : Vous êtes ici.
Article 3 chez Wabeo : « [La chaine WP] Que manque t-il aux thèmes WordPress ? »
Article 4 chez WP Themes Pro : « [La chaine WP] Que manque t-il à WordPress niveau webdesign ? »
Article 5 chez Insidedaweb : « [La chaine WP] Que manque t-il au ECommerce WordPress ? » (prenez un RTT pour tout lire)
Article 6 chez WPChannel : « [La chaine WP] Que manque t-il à WordPress ? »
Article 7 chez The Loop : « [La chaine WP] Que manque t-il à WordPress niveau utilisateur ? »
Article 8 chez Screenfeed : « Quoi ? Il manquerait des choses à WordPress ? »
Article 10 chez Lumière de lune : « Ce qui manque à WordPress : pas tant que ça… »

Les commentaires ne sont pas juste les bienvenus, ils sont les garants d’une continuité du sujet de cette chaine et peuvent aussi mener à ouvrir d’autres sujets pour une prochaine chaine. Je ne peux donc que vous recommander chaudement de commenter tous les articles de cette chaine.
ps: Merci à Greg encore pour sa relecture et ses corrections sur cet article !

Vous aimez ? Partagez !


Réagir à cet article

220 caractères maximum