Désérialisation Ruby avec gadget documenté

Exploiting Ruby deserialization using a documented gadget chain

Contexte du laboratoire

Ce laboratoire utilise un mécanisme de session basé sur la sérialisation et repose sur le framework Ruby on Rails. Il existe des chaînes de gadgets publiquement documentées permettant d’obtenir une exécution de code à distance (RCE) via Marshal.

Objectif : Créer un objet sérialisé malveillant, l’injecter dans le cookie de session et supprimer le fichier :

Identifiants fournis :

wiener : peter

Analyse de la session

Après authentification, le serveur fournit un cookie de session sérialisé en Base64 :

Cela indique clairement l’utilisation de Marshal.dump côté serveur.

Une chaîne de gadgets documentée basée sur les classes Ruby suivantes est utilisée :

  • Gem::SpecFetcher

  • Gem::Installer

  • Gem::Requirement

  • Gem::RequestSet

  • Net::WriteAdapter

  • Gem::Package::TarReader

Cette chaîne permet de déclencher un appel à Kernel.system.

Construction du payload Ruby

Le code suivant permet de créer un objet sérialisé exécutant la commande ciblée :

Encodage en Base64

Pour pouvoir injecter le payload dans le cookie de session, il est encodé en Base64 :

Chaîne finale obtenue :

Mis à jour