Exploit ActiveSupport de Rails (CVE-2019-5420) POC (à considérer pour enchaîner avec CVE-2019-5418 !)
Se marie bien avec CVE-2019-5418 !
POC Screenshot
🚨 Avertissement
Ce dépôt contient un exploit de preuve de concept (PoC) démontrant l'exécution de code à distance (RCE) dans des applications Ruby on Rails via l'abus de ActiveSupport::MessageVerifier. Utilisez-le de manière responsable !
📌 Aperçu
Ce script exploite les vulnérabilités de désérialisation d'ActiveSupport en utilisant un objet ERB contrefait enveloppé dans DeprecatedInstanceVariableProxy. Lorsque la charge utile signée est désérialisée par une application Rails vulnérable, l'exécution de code Ruby arbitraire se produit.
⚠️ Clause de non-responsabilité
Ce projet est à des fins éducatives et de recherche uniquement. Toute utilisation non autorisée contre des systèmes que vous ne possédez pas est illégale et peut entraîner de graves conséquences juridiques.
🛠️ Fonctionnement
1️⃣ Générer une clé secrète
Le script dérive un `` à partir d'un nom d'application Rails connu en utilisant le hachage MD5.
2️⃣ Créer un secret ActiveStorage
Utilise ActiveSupport::KeyGenerator pour générer une clé de signature.
3️⃣ Créer un objet ERB malveillant
Construit un objet `` non initialisé avec du code contrôlé par l'attaquant.
4️⃣ Envelopper dans DeprecatedInstanceVariableProxy
Cache l'objet malveillant dans un wrapper anodin.
5️⃣ Signer et générer un jeton d'exploit
Utilise ActiveSupport::MessageVerifier pour signer la charge utile, la rendant légitime.
6️⃣ Atteindre l'exécution de code à distance (RCE)
Lors de la désérialisation, Rails exécute la charge utile de l'attaquant, permettant l'exécution de commandes arbitraires.
🚀 Utilisation
root@kitploit:~
ruby POC.rb
Le script générera un jeton d'exploit signé, qui peut être utilisé contre une application Rails vulnérable.
🛡️ Atténuations
**Faire pivoter et sécuriser `` pour empêcher les attaquants de générer des charges utiles signées.
Mettre à niveau Rails vers la dernière version (Rails 7+ a des mécanismes de sérialisation plus stricts).
Utiliser la sérialisation JSON au lieu de la sérialisation Marshal pour éviter le chargement arbitraire d'objets.
Auditer la désérialisation de l'application pour s'assurer que les entrées utilisateur non fiables ne sont pas désérialisées.
📜 Clause de non-responsabilité légale
Ce projet est destiné à des fins éducatives uniquement. L'auteur n'est pas responsable de toute utilisation abusive ou des dommages causés par ce code.