Rails ActiveSupport Эксплойт (CVE-2019-5420) POC (считайте это для цепочки с CVE-2019-5418!)
Отлично сочетается с CVE-2019-5418!
Скриншот POC
🚨 Предупреждение
Этот репозиторий содержит эксплойт доказательства концепции (PoC), демонстрирующий удаленное выполнение кода (RCE) в приложениях Ruby on Rails через злоупотребление ActiveSupport::MessageVerifier. Используйте ответственно!
📌 Обзор
Этот скрипт эксплуатирует уязвимости десериализации ActiveSupport, используя специально созданный объект ERB, обернутый в DeprecatedInstanceVariableProxy. Когда подписанная полезная нагрузка десериализуется уязвимым приложением Rails, происходит выполнение произвольного Ruby-кода.
⚠️ Отказ от ответственности
Этот проект предназначен только для образовательных и исследовательских целей. Несанкционированное использование против систем, которые вам не принадлежат, является незаконным и может привести к серьезным юридическим последствиям.
🛠️ Как это работает
1️⃣ Сгенерировать секретный ключ
Скрипт извлекает `` из известного имени приложения Rails с помощью хеширования MD5.
2️⃣ Создать секрет ActiveStorage
Использует ActiveSupport::KeyGenerator для генерации ключа подписи.
3️⃣ Создать вредоносный объект ERB
Создает неинициализированный объект `` с кодом, контролируемым злоумышленником.
4️⃣ Обернуть в DeprecatedInstanceVariableProxy
Прячет вредоносный объект внутри безобидной обертки.
5️⃣ Подписать и сгенерировать токен эксплойта
Использует ActiveSupport::MessageVerifier для подписи полезной нагрузки, делая ее легитимной.
6️⃣ Достичь удаленного выполнения кода (RCE)
При десериализации Rails выполняет полезную нагрузку злоумышленника, позволяя выполнять произвольные команды.
🚀 Использование
root@kitploit:~
ruby POC.rb
Скрипт сгенерирует подписанный токен эксплойта, который можно использовать против уязвимого приложения Rails.
🛡️ Меры защиты
Обеспечьте ротацию и безопасность ``, чтобы предотвратить генерацию подписанных полезных нагрузок злоумышленниками.
Обновите Rails до последней версии (Rails 7+ имеет более строгие механизмы сериализации).
Используйте JSON-сериализацию вместо сериализации Marshal, чтобы избежать загрузки произвольных объектов.
Аудируйте десериализацию приложения, чтобы убедиться, что непроверенный пользовательский ввод не десериализуется.
📜 Юридический отказ
Этот проект предназначен только для образовательных целей. Автор не несет ответственности за любое неправомерное использование или ущерб, вызванный этим кодом.