Une vulnérabilité 0-day dans un plugin jQuery permettrait de télécharger et d'exécuter du code malveillant sur des serveurs PHP
Et ce, depuis 2010

Le , par Bill Fassinou, Chroniqueur Actualités
Larry Cashdollar, chercheur en sécurité informatique pour le SIRT (Security Intelligence Response Team) d'Akamai, a découvert une vulnérabilité dans un plugin qui gère les téléchargements de fichiers sur les serveurs PHP. Cette faille, selon le chercheur, peut être utilisée par des pirates pour télécharger et exécuter des fichiers malveillants sur des serveurs, tels que des backdoors et les shells Web. Le plugin « jQuery File Upload » en question est connu sous le nom de Blueimp et écrit par le développeur allemand Sebastian Tschan. Cette faille est d'autant plus critique car Blueimp est le deuxième projet Linux le plus étoilé sur GitHub (forké plus de 7.800 fois), après le framework jQuery lui-même. Il est très populaire et a été intégré dans plusieurs projets tels que des CMS, des CRM, des solutions Intranet, des plugins WordPress, des add-ons Drupal, des composants Joomla, etc.


Voici comment le chercheur a pu identifier la faille : « J'ai fouillé le code source du plugin et je me suis retrouvé à scruter deux fichiers PHP dans le répertoire server / php. Les fichiers sont nommés upload.php et UploadHandler.php. Le fichier upload.php appelle le fichier principal UploadHandler.php où réside tout le code de téléchargement de fichier. J'ai également vu que tous les fichiers étaient chargés dans le répertoire files / à la racine du serveur Web. J'ai écrit un test rapide en ligne de commande avec curl et un simple fichier shell PHP a confirmé que je pouvais télécharger un shell Web et exécuter des commandes sur le serveur », a-t-il déclaré dans un billet de blog.

Selon le chercheur, cette vulnérabilité a été exploitée. Il a trouvé sur YouTube, plusieurs vidéos contenant des tutoriels sur la façon dont on pourrait exploiter la vulnérabilité du plugin jQuery File Upload pour prendre le contrôle des serveurs. L'une des vidéos trouvées par le chercheur date de 2015 et donc, il serait bien possible que cette faille soit bien connue et exploitée par les pirates depuis 2015. Cette faille a été identifiée sous le nom CVE-2018-9206 en début de ce mois et toutes les versions de jQuery File Upload antérieures à la version 9.22.1 en sont vulnérables.

Le chercheur en sécurité n'a pas manqué de signaler sa découverte à Blueimp qui a rapidement examiné le rapport pour mener sa petite enquête sur l'origine de la faille. Il s'est avéré que le problème n'était pas dans le code source du plugin mais plutôt dans un changement apporté au projet Apache Web Server depuis 2010. Ce changement a indirectement affecté le comportement attendu du plugin Blueimp sur les serveurs Apache. En effet, peu de temps avant que le plugin Blueimp ne soit lancé, la Fondation Apache a publié la version 2.3.9 du serveur HTTPD Apache.

Et cette version HTTPD d'apache dispose d'une option permettant aux administrateurs d'ignorer les paramètres de sécurité personnalisés effectués dans les dossiers individuels via le fichier .htaccess. Or, le plugin jQuery File Upload a été codé pour s'appuyer sur le fichier .htaccess personnalisé destiné à imposer des restrictions de sécurité à son dossier de téléchargement, oubliant que quelques jours avant, HTTPD d'Apache avait reçu un changement qui va à l'encontre du fonctionnement de sécurité de base de son plugin.

Cashdollar n'a-t-il pas raison quand il déclare qu' « Internet s'appuie sur de nombreux contrôles de sécurité tous les jours pour assurer la sécurité de nos systèmes, de nos données et de nos transactions. Si l'un de ces contrôles n'existe plus, cela peut mettre la sécurité en danger sans le savoir pour les utilisateurs et les développeurs de logiciels qui s'y fient ». Des mesures sont en train d'être prises pour corriger la faille. Le développeur du plugin a apporté à son code des modifications qui autorisent uniquement le téléchargement de fichiers de type image.

Cashdollar quand à lui, a enquêté sur la portée de cette vulnérabilité. Il a testé tous les forks GitHub qui sont dérivés du plugin original. De son test, il conclut que tous, ils sont vulnérables à cette vulnérabilité. Par conséquent, bien que le développeur du plugin ait apporté un changement à son code source, il faudra assez de temps pour que tous les projets qui utilisent ce plugin soient sécurisés.

Le code utilisé par Cashdollar pour ces tests est disponible sur GitHub

Source : Billet de blog

Et vous ?

Avez-vous utilisé ce plugin dans l'un de vos projets ? Quelles mesures avez-vous pris, ou pensez-vous prendre, pour sécuriser votre projet ?

Voir aussi

Une vulnérabilité zero-day critique dans Flash est activement exploitée par des hackers, Adobe prévoit un patch cette semaine

Une vulnérabilité 0Day dans Windows a été rendue publique parce que Microsoft n'a pas pu respecter le délai canonique de 120 jours

Patch Tuesday : Microsoft corrige la faille zero-day affectant ALPC dans l'édition de septembre au total 17 vulnérabilités critiques sont colmatées

Windows : Une nouvelle faille zero-day a été divulguée via Twitter, dont aucune solution n'est encore connue, selon un rapport


Vous avez aimé cette actualité ? Alors partagez-la avec vos amis en cliquant sur les boutons ci-dessous :


 Poster une réponse Signaler un problème

Avatar de Nb Nb - Membre actif https://www.developpez.com
le 21/10/2018 à 22:59
Cette faille est d'autant plus critique car Blueimp est le deuxième projet Linux le plus étoilé sur GitHub
Quel est le rapport entre un plugin jQuery et Linux ?
Avatar de mm_71 mm_71 - Membre expérimenté https://www.developpez.com
le 22/10/2018 à 0:01
Citation Envoyé par Nb Voir le message
Quel est le rapport entre un plugin jQuery et Linux ?
Parce-que le plugin fait partie du projet jQuery File Upload aussi nommé blueimp qui est un projet Linux.
Avatar de Nb Nb - Membre actif https://www.developpez.com
le 22/10/2018 à 11:23
Ca a beau être ecrit et reprit sur des sites de news, je ne voit toujours pas le rapport.
Quoi qu'il en soit ca à le mérite de pointer du doigt, notamment, les dangers du fork à tout va et de la gestion de la securité par un empilement de couches successives gérées par des entités indépendantes.
Avatar de vanquish vanquish - Membre éprouvé https://www.developpez.com
le 22/10/2018 à 16:14
Citation Envoyé par Nb Voir le message
Quel est le rapport entre un plugin jQuery et Linux ?
Effectivement la description synthétique du soucis est impropre.
De toute évidence le système est composé d'une partie cliente (plug in jQuery), mais aussi serveur (en PHP si j'ai bien compris)

Et vous avez raison de dire que le soucis ne vient en aucun cas de la partie jQuery, car si un plug-in javascript mal écrit permettait un piratage, alors un pirate (plug-in ou pas) pourrait reproduire le même type de requête.

Si la partie serveur est en PHP, il faut bien reconnaitre que la majorité des serveurs PHP sont sous Linux et que c'est eux qu'on visera en premier pour ce type d'attaque (même si Linux n'est pas lui même en cause).

Visiblement s'il y a une faille d'un plug-in, c'est qu'il y a d'abord une faille de l'administrateur web.
C'est le B.A. BA de vérifier tout ce qui est soumis à notre serveur.

Car dans tous les cas, que l'on soit en PHP ou .Net, sous Linux ou sous Windows (et aujourd'hui toutes les combinaisons sont possibles), il faut bien comprendre que permettre l'upload de fichier n'est pas quelque chose d'anodin et qu'il faut être hyper vigilent sur ce genre de chose.

A mon sens, il ne ne faut jamais sauvegarder les fichiers uploadés dans l'arborescence du site web, mais ailleurs sur le serveur.
Ainsi, les fichiers n'ont pas d'URL directe et ne peuvent, en aucun cas, être exécuté depuis un navigateur. Cela prévient pas mal de problème.
(on peut toujours créé un lien de téléchargement, mais ce dernier se fera à travers notre code qui lira et transmettra rien d'autre qu'un flux d'octets)
Avatar de tomybprod tomybprod - Futur Membre du Club https://www.developpez.com
le 26/10/2018 à 12:21
Je ne comprends pas pourquoi baser la sécurité sur un .htaccess ! Comme si tous les serveurs tournaient sous apache... D'ailleurs même avec apache on peut (et à mon avis on devrait) ignorer les .htaccess. La sécurité de ce genre de plugin devrait être géré via php directement
Avatar de gadj0dil0 gadj0dil0 - Membre régulier https://www.developpez.com
le 26/10/2018 à 16:19
Bonjour,

J'aide un ami qui a créé un site de eCommerce avec le CMS Prestashop lorsque son site ou back-office déconne. Effectivement il ne faut pas prendre à la légère l'upload, et mettre les fichiers hors de portée d'une url est une solution, mais dans le cas d'une image à afficher...
Du fileupload il y en a :

Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
(uiserver)u87534064@infong-eu9:~/clickandbuilds/PrestaShop/MyeCommerce$ 
#3 - 15:11:23
grep -nriI blueimp ./*
./epkncr0hnlkk6mme/themes/default/js/jquery.fileupload-image.js:3: * https://github.com/blueimp/jQuery-File-Upload
./epkncr0hnlkk6mme/themes/default/js/jquery.fileupload-image.js:6: * https://blueimp.net
./epkncr0hnlkk6mme/themes/default/js/jquery.fileupload-image.js:39:    $.blueimp.fileupload.prototype.options.processQueue.unshift(
./epkncr0hnlkk6mme/themes/default/js/jquery.fileupload-image.js:101:    $.widget('blueimp.fileupload', $.blueimp.fileupload, {
./epkncr0hnlkk6mme/themes/default/js/jquery.fileupload-process.js:3: * https://github.com/blueimp/jQuery-File-Upload
./epkncr0hnlkk6mme/themes/default/js/jquery.fileupload-process.js:6: * https://blueimp.net
./epkncr0hnlkk6mme/themes/default/js/jquery.fileupload-process.js:32:    var originalAdd = $.blueimp.fileupload.prototype.options.add;
./epkncr0hnlkk6mme/themes/default/js/jquery.fileupload-process.js:36:    $.widget('blueimp.fileupload', $.blueimp.fileupload, {
./epkncr0hnlkk6mme/themes/default/js/jquery.fileupload-validate.js:3: * https://github.com/blueimp/jQuery-File-Upload
./epkncr0hnlkk6mme/themes/default/js/jquery.fileupload-validate.js:6: * https://blueimp.net
./epkncr0hnlkk6mme/themes/default/js/jquery.fileupload-validate.js:33:    $.blueimp.fileupload.prototype.options.processQueue.push(
./epkncr0hnlkk6mme/themes/default/js/jquery.fileupload-validate.js:50:    $.widget('blueimp.fileupload', $.blueimp.fileupload, {
./epkncr0hnlkk6mme/themes/default/js/jquery.fileupload.js:3: * https://github.com/blueimp/jQuery-File-Upload
./epkncr0hnlkk6mme/themes/default/js/jquery.fileupload.js:6: * https://blueimp.net
./epkncr0hnlkk6mme/themes/default/js/jquery.fileupload.js:60:    $.widget('blueimp.fileupload', {
./epkncr0hnlkk6mme/themes/default/js/jquery.iframe-transport.js:3: * https://github.com/blueimp/jQuery-File-Upload
./epkncr0hnlkk6mme/themes/default/js/jquery.iframe-transport.js:6: * https://blueimp.net
./epkncr0hnlkk6mme/themes/default/js/jquery.iframe-transport.js:184:    // https://github.com/blueimp/jQuery-File-Upload/wiki/Setup#content-type-negotiation


Code : Sélectionner tout
1
2
3
4
5
6
head *fileupload* | grep -i plugin
 * jQuery File Upload Image Preview & Resize Plugin 1.3.1
 * jQuery File Upload Processing Plugin 1.2.2
 * jQuery File Upload Validation Plugin 1.1.1
 * jQuery File Upload Plugin 5.34.0
Rassurez-moi, il faut bien une action de l'admin "d'ignorer les paramètres de sécurité personnalisés effectués dans les dossiers individuels via le fichier .htaccess". Ce qui ne semble pas être le cas sur le site de mon pote. Comment faire pour mettre à jour le fichier sans tout planter?

Cordialement

PS : le thème est "à jour" ...
Avatar de grunk grunk - Modérateur https://www.developpez.com
le 07/11/2018 à 11:29
Ce qui semble étonnant pour un plugin d'upload c'est que la sécurité de l'upload ne soit pas fait au niveau du serveur.
Si on veux autoriser que des images (par exemple) c'est au code php de faire le nécessaire pour n'accepter que des images, pas à un autre élément de la pile.
Contacter le responsable de la rubrique Accueil