Rails ActiveSupport Exploit (cve-2019-5420) POC (considera questo per concatenare CVE-2019-5418!)
Si abbina perfettamente con CVE-2019-5418!
Screenshot del POC
🚨 Avviso
Questo repository contiene un proof-of-concept (PoC) di exploit che dimostra l'esecuzione di codice remoto (RCE) in applicazioni Ruby on Rails tramite abuso di ActiveSupport::MessageVerifier. Usalo responsabilmente!
📌 Panoramica
Questo script sfrutta le vulnerabilità di deserializzazione di ActiveSupport utilizzando un oggetto ERB manipolato avvolto in DeprecatedInstanceVariableProxy. Quando il payload firmato viene deserializzato da un'applicazione Rails vulnerabile, si verifica l'esecuzione di codice Ruby arbitrario.
⚠️ Disclaimer
Questo progetto è solo per scopi educativi e di ricerca. L'uso non autorizzato contro sistemi di cui non si è proprietari è illegale e può comportare gravi conseguenze legali.
🛠️ Come funziona
1️⃣ Genera una chiave segreta
Lo script deriva una `` dal nome noto dell'applicazione Rails usando l'hashing MD5.
2️⃣ Crea un segreto per ActiveStorage
Usa ActiveSupport::KeyGenerator per generare una chiave di firma.
3️⃣ Crea un oggetto ERB maligno
Costruisce un oggetto `` non inizializzato con codice controllato dall'attaccante.
4️⃣ Avvolgi in DeprecatedInstanceVariableProxy
Nasconde l'oggetto maligno all'interno di un wrapper dall'aspetto innocuo.
5️⃣ Firma e genera un token di exploit
Usa ActiveSupport::MessageVerifier per firmare il payload, facendolo apparire legittimo.
6️⃣ Ottieni esecuzione di codice remoto (RCE)
Quando deserializzato, Rails esegue il payload dell'attaccante, permettendo l'esecuzione arbitraria di comandi.
🚀 Utilizzo
root@kitploit:~
ruby POC.rb
Lo script genererà un token di exploit firmato, che può essere usato contro un'applicazione Rails vulnerabile.
🛡️ Mitigazioni
**Ruota e proteggi **`` per impedire agli attaccanti di generare payload firmati.
Aggiorna Rails all'ultima versione (Rails 7+ ha meccanismi di serializzazione più restrittivi).
Usa la serializzazione JSON invece della serializzazione Marshal per evitare il caricamento arbitrario di oggetti.
Controlla la deserializzazione dell'applicazione per assicurarti che l'input utente non fidato non venga deserializzato.
📜 Disclaimer legale
Questo progetto è inteso solo per scopi educativi. L'autore non è responsabile per qualsiasi uso improprio o danno causato da questo codice.