Faille de sécurité via TimThumb sur WordPress

TimThumb est un script qui permet de redimensionner des images 'à la volée'. Cette forme de script de 'redimensionnement d’image' est très populaire et TimThumb est particulièrement en vogue dans le monde de WordPress. De très nombreux thèmes WordPress utilisent de ce fait ce logiciel pour redimensionner des images.

Hélas, nous constatons qu’il y a encore énormément de sites WordPress dont le thème utilise une ancienne version de TimThumb, qui contient une faille de sécurité.

Faille de sécurité

La faille avait déjà été signalée en 2011 et l’auteur du script avait rédigé un billet fort complet à ce sujet sur son blog.

Par souci de clarté il est important de rappeler que cette faille n’a aucun lien avec la sécurité et la stabilité de WordPress même. TimThumb ne fait pas partie du cœur de WordPress. Il s’agit d’un script indépendant, qui est souvent utilisé dans des thèmes WordPress qui sont développés par des tiers.

La faille permet de facilement inclure et télécharger des fichiers vers le serveur et de les exécuter. Les hackers ont donc la possibilité de télécharger des scripts pouvant compromettre la sécurité de votre compte d’hébergement et susceptibles de causer d’importants dégâts.

La cause

La cause de cette vulnérabilité réside dans le fait que le script prend en charge des inclusions de fichiers externes. En d’autres termes, on peut non seulement traiter des images locales, mais aussi des images externes.

L’URL ci-dessous est un exemple de la manière dont TimThumb est normalement appelé :

http://www.nomdedomaine.be/wp-content/themes/votre-theme/lib/scripts/timthumb.php?src=http://farm9.staticflickr.com/8204/8211249708_14b486b010.jpg

Le contrôle des données entrantes est assez superficiel et n’est effectué que sur quelques parties de l’URL et non sur l’entièreté de l’URL. Le script vérifie si le nom de domaine de l’image externe se trouve dans la liste des noms sur liste blanche. Cette liste comprend entre autres les noms de domaines suivants :

  • Flickr.com
  • Picasa.com
  • Img.youtube.com
  • Blogger.com
  • WordPress.com

Le problème est qu’il est très facile de passer le contrôle en créant une URL qui contient un de ces noms de domaines. L’URL suivante est un exemple hypothétique d’une URL prétendument sûre :

http://flickr.com.evilsite.com/hack.php

Abus

Le contenu du fichier externe (dans le cas présent « hack.php ») n’est pas immédiatement exécuté, mais il est placé dans le répertoire cache associé. Lorsque le fichier téléchargé est une image, celle-ci est directement affichée depuis le cache. Lorsque le fichier n’est pas une image, on obtient un message d’erreur indiquant l’emplacement du fichier. Ce message d’erreur peut ressembler à ceci :

Unable to open image : /var/www/wp-content/themes/votre-theme/lib/scripts/cache/07ae62439acc0e284d9d706b55fabb36.php

Le fait que le script affiche publiquement l’emplacement du fichier permet de très facilement exécuter le script hack.php. Il suffit en effet d’exécuter l’URL ci-dessous pour pouvoir pirater le compte.

http://www.nomdedomaine.be/wp-content/themes/votre-theme/lib/scripts/cache/07ae62439acc0e284d9d706b55fabb36.php

Conséquences

Les conséquences de cette faille peuvent être considérables. En téléchargeant des scripts PHP, les hackers peuvent aisément prendre le contrôle et lire et modifier vos fichiers. La sécurité de la base de données sous-jacente est elle aussi compromise, puisque les données de la base de données peuvent très facilement être lues grâce au fichier de configuration.

Que font généralement les hackers ?

  • Ils peuvent modifier le contenu de votre site ou blog dans le but de diffuser leurs propres messages politiques.
  • Souvent, ils utilisent les sites piratés pour y stocker des fichiers malveillants et les diffuser.
  • Les sites piratés peuvent aussi parfaitement être utilisés pour envoyer du spam.
  • Ils injectent furtivement du code dans votre site qui est exécuté à chaque fois qu’un visiteur s’y rend.
  • Ils attaquent d’autres sites ou serveurs à partir de votre compte.

Détection et solution du problème

Les installations WordPress ne sont pas toutes vulnérables. Seules les installations avec des thèmes qui utilisent une ancienne version de TimThumb le sont.

Toutes les versions de TimThumb antérieures à la version 2.8.2 sont vulnérables et doivent être mises à niveau sans plus attendre. Sur http://code.google.com/p/timthumb/, vous retrouverez toutes les explications nécessaires. Pour la toute dernière version du script TimThumb, rendez-vous sur http://timthumb.googlecode.com/svn/trunk/timthumb.php.

Un pratique plugin WordPress est disponible qui examine votre installation afin d’y détecter toute faille. Ce plugin recherche non seulement les anciennes versions de TimThumb, mais aussi les fichiers que les hackers pourraient avoir placé dans le répertoire cache.

Une autre solution possible consiste à vider la liste des sites externes considérés comme étant sûrs. Cette liste se présente ainsi :

$allowedSites = array (
'flickr.com',
'picasa.com',
'img.youtube.com',
);

Il suffit simplement de remplacer ce petit bout de code par le suivant :

$allowedSites = array ();

Bien que le fait de vider la liste des sites considérés comme étant sûrs puisse être une solution fort simple, la mise à niveau vers la toute dernière version de TimThumb est d’une importance cruciale. Ceux qui avaient créé des thèmes WordPress en utilisant TimThumb auront sans aucun doute prévu une mise à jour prenant en charge la toute dernière version du script. Une mise à jour de vos thèmes est donc également conseillée.

Conclusion

Bien que tout cela ne soit en fait pas nouveau, nous sommes forcés de constater que de nombreux sites utilisent toujours des thèmes utilisant une ancienne version de TimThumb. Et bien que cette faille ne soit pas liée à WordPress même, ce sont principalement les installations WordPress qui en font les frais. Nous vous conseillons donc de mettre à jour vos thèmes sans plus attendre et de vérifier s’ils utilisent une ancienne version de TimThumb. Veillez à ce que votre version ne soit pas antérieure à la version 2.8.2.