La vulnérabilité Timthumb.php
Timthumb.php est un script php qui permet de redimensionner des images. Il est utilisé par de nombreux thèmes et plugins sur WordPress (comme par exemple Nivo Slider).
Le 3 Août 2011, une vulnérabilité Zero Day permettant de faire un “remote exploit” a été découvert. La mise à jour du script a suivi une journée plus tard. Malheureusement toutes les thèmes et plugins utilisant ce script n’ont pas suivi le même chemin. Il existe encore aujourd’hui beaucoup de plugins utilisant l’ancienne version de timthumb.php.
Cette version permet d’insérer des images à partir d’une liste de site web d’autorisée. Si vous n’en avez pas l’utilité, il est fortement recommandé de vider la liste :
$allowedSites = array (
'flickr.com',
'picasa.com',
'blogger.com',
'wordpress.com',
'img.youtube.com',
'upload.wikimedia.org',
);
Le bout de code vulnérable se situe à la ligne 641 de Timthumb.php:
$isAllowedSite = false;
foreach ($allowedSites as $site) {
if (strpos (strtolower ($url_info['host']), $site) !== false) {
$isAllowedSite = true;
}
}
La fonction strpos() va retourner une valeur positive si il trouve n’importe ou dans la chaîne de caractère $site un site autorisé. En l’occurence la valeur ‘flickr.com.kaizeronion.com’ sera acceptée.
Exploitation de la vulnérabilité
À la place d’uploader une image sur le serveur, l’attaquant pourra mettre en place un fichier .php contenant du code malicieux.
La miniaturisation du va échouer, mais le fichier sera copié dans le repertoire ./cache/ utilisant le même nom d’envoi. À partir de ce moment la personne malveillante peut accéder au fichier distant et le serveur va exécuter le code malveillant.
Cette vulnérabilité est vraiment dangereuse et encore d’actualité depuis 4 mois maintenant. Vérifiez vos WordPress.
À bon entendeur, Salut !
Voici la version corrigée du script Timthumb.php