Cas d’une attaque javascript via les commentaires

Vous l'avez peut-être lu récemment, WordPress est vulnérable depuis 4 ans car une faille se trouve dans le parsing des tags HTML des commentaires.

Les pirates ont bien sûr déjà mis au point des attaques sur les sites qui ont les commentaires activés et le core non mis à jour.

La preuve que se tenir à jour est important, et vous allez comprendre encore mieux après lecture de ce cas.

Énoncé

Mise en situation, vous avez un blog ou un site acceptant les commentaires sous WordPress 3.9.2, dernière version de la branche 3.9 à être diffusée sans faille connue. Et là, découverte d'une faille qui touche les versions 3.x, toutes les 3.x.

Vous êtes donc touchés, mais ne pouvez pas vous tenir à jour pour des raisons qui vous regardent. Oui, parfois on ne peut pas mettre à jour le site car nous n'en sommes pas directement responsables, ou le client est sous contrat etc etc Bref.

La faille touche donc les commentaires, et les pirates mettent au point des phrases malicieuses capables de les exploiter.

Problème

Le commentaire en question s'active dès votre passage de la souris sur un de ses liens. Une fois survolé, le script s'exécute, point.

Oui mais que peut me faire un script JavaScript lancé en front-end lorsque je visite mon site !? Me faire une belle popup "GOT U LOL" ? Oui, il peut, mais là, ce que j'ai découvert (merci à Laurent Olivares pour l'envoi du code) est bien pire.

Le script en question est capable de :

  • Ajouter une iframe invisible dans la page,
  • Charger l'éditeur de fichiers sur le plugin hello.php (ce plugin qui est installé par défaut),
  • Modifier le contenu de la textarea,
  • Remplacer le code par une backdoor
  • cliquer "Envoyer", ce code va :
    • Supprimer son propre commentaire en base de données afin d'effacer les traces,
    • Remplacer le fichier wp-comments-post.php par du vide pour éviter que d'autres hackers ne le hack de nouveau,
    • Ajouter une ligne de code dans wp-config.php et hello.php permettant l'exécution de n'importe quel autre code PHP quand bon lui semble,

Ce n'est "que" du JavaScript après tout !

Touché, coulé ?

Il y a bien sûr des prérequis qui doivent tous être présents afin que le hack se passe bien pour le pirate, ils sont :

  • Être sous WordPress 3.x,
  • Être connecté en administrateur sur le site au moment de votre visite du commentaire en front-end,
  • Ne pas avoir ajouté la constante DISALLOW_FILE_EDIT ou DISALLOW_FILE_MODS,
  • Avoir le JavaScript activé sur votre navigateur,
  • Avoir le plugin Hello Dolly, hello.php présent (même non actif, ce qui rejoint la fin de mon article sur "Arrêtez de créer des index.php"),
  • Avoir les droits d'écriture ou de modification des droits sur hello.php et wp-config.php*,
  • Avoir la ligne $table_prefix dans wp-config.php.

Attention pour le dernier point, si le fichier de configuration n'a pas été modifié, Hello Dolly l'a peut-être été lui !

Solution(s)

Pour éviter de se faire hacker par cette faille, vous pouvez adopter une ou plusieurs de ces solutions :

  • Être sous WordPress 4.x,
  • Ne pas être connecté en administrateur sur le site au moment de votre visite du commentaire en front-end,
  • Avoir ajouté la constante DISALLOW_FILE_EDIT ou DISALLOW_FILE_MODS,
  • Avoir le JavaScript désactivé sur votre navigateur,
  • Avoir supprimé le plugin Hello Dolly, hello.php,
  • Interdire l'écriture ou la modification des droits sur hello.php et wp-config.php,

Et vous, êtes-vous en 4.x ?