ISPConfig failles CVE-2015-4118, CVE-2015-4119

juin 21, 2015

A moitié endormi et encore dans un demi coma, j’ai pour (mauvaise) habitude de lire mes emails à mon réveil. Ce matin je m’aperçois que le CERT aurait émis un bulletin d’alerte critique concernant la célébrè application ISPConfig. Des vulnérabilités ont été signalées dans l’application. Notamment une injection SQL  dans le script  monitor/ show_sys_state.php pouvant être exploité pour manipuler des requêtes SQL par injection de code SQL arbitraire, ainsi qu’une faille de type cross-site request forgery (CSRF)  dans le script admin/users_edit.php permettant de détourner l’authentification des administrateurs. Et (merde), mince, je n’ai plus qu’a sortir de ma couette et vérifier mes serveurs :/

Pour ceux qui ne le connaisse pas, ISPConfig est THE interface de gestion de serveur pour Linux. ISPConfig simplifie la gestion des services liés à l’hébergement web tels que la configuration du domaine, accès utilisateurs, courrier, FTP, Sql… Idéal lorsque vous administrez un (ou plusieurs) serveurs webs sur lesquels vous héberger des sites différents.

Ces vulnérabilités étant signalées dans les versions antérieures à 3.0.5.4p6 incluse.

Après plusieurs recherche sur le net, le labo High Tech Bridge, semble être à l’origine de la découverte. Un filtre insuffisant au niveau des paramètres HTTP GET au niveau du script /monitor/show_sys_state.php, permet à un attaquant de lire, insérer ou modifier les enregistrement dans la base de donnée, mais (oui il y a qd même un mais), celui ci doit disposer des droits accès monitor. (ouf) Enfin pas tant que ça, car c’est l’a qu’intervient la seconde faille, celle type CSRF que je détaillerais ensuite.

Tout d’abord il convient d’exécuter la requête suivante :

La commande UNION de SQL permet de mettre bout-à-bout les résultats de plusieurs requêtes utilisant elles-même la commande SELECT. Cela permet de concaténer les résultats de 2 requêtes ou plus. Pour l’utiliser il est nécessaire que chacune des requêtes à concaténer retournes le même nombre de colonnes, avec les mêmes types de données et dans le même ordre. Pour ceux qui souhaitent en apprendre d’avantage sur l’injection SQL avancé, je vous conseil l’article de bases-hacking qui est fort intéressant.

Ensuite, le résultat de la fonction Mysql ‘version()’ sera affichée dans le code html de le page :

Bingo !

La seconde faille découverte (CVE-2015-4119) fait référence cette fois à une faille de type Cross Site Request Forgery (CSRF) (également appelée XSRF)(ou « sea surf »). L’idée ici est de transmettre à un utilisateur authentifié ( l’admin) une requête HTTP falsifiée et cachée pointant sur une action interne au site, afin qu’il l’exécute sans en avoir conscience et en utilisant ses propres droits.

Ce simple exploit va créer et octroyer les droits admin au compte utilisateur : immuniweb / pass immuniweb

Le test est concluant sur un ispconfig 3.0.5.4p6, par ailleurs je n’ai pas réussi à le reproduire sur la version 3.0.5.4p5 (soit disant faillible):

ispconfig1

 

L’interface d’ISPConfig confirme la création du compte due fait que le script « /admin/users_edit.php » ne vérifie pas l’origine de la requête HTTP, je fais ici référence aux fameux « referers ». La vérification du referer n’est clairement pas une parade ultime, on peut en effet bloquer son envoi ou encore le modifier. Néanmoins, il permet de diminuer grandement nombre d’attaques par CSRF. Autre parade, par l’ajout de tokens permettant de spécifier une durée de vie au formulaire.

Par ailleurs, inutile de préciser qu’un attaquant pourra aisément préparer une page html bien plus élaborée contenant l’exploit CSRF et ainsi disposer des droits administrateur sans même que l’administrateur se rende compte de sa propre complicité. Ensuite c’est ‘open bar’, c’est le drame totale, l’accès à l’ensemble des services est intégrale.

 

ispconfig-2

 

Fort heureusement pour nous, l’équipe en charge du projet ISPConfig est particulièrement réactive. Les failles critiques ont été corrigé rapidement, mais le correctif n’est pas automatique, il existe cependant un script qui fait tout pour vous. :-)

ispconfig3

 

Choisissez ‘stable’.

ispconfig4

Je vous conseil de valider pour une petite backup, au cas ou :)

Si votre serveur est n’est pas en Esclave, c’est à dire qu’il ne s’agit pas d’une installation multi serveur, mais d’un serveur seul, choisissez ‘no’.

Par défaut sélectionnez YES.  Le NO n’est à sélectionner que lorsque vous avez modifié les services ispconfig « a la main » au préalable.

8080 est le port par défaut.

Sauf si votre certif a expirer il faudra sélectionnez YES. Sinon .. NO

Le script va maintenant mettre a jour les fichiers ISPConfig et redémarrer les services.

Notre ISPConfig est désormais patché :)