WildWestCyberSecurity/cve-2019-5420-POC
GitHub: WildWestCyberSecurity/cve-2019-5420-POC
CVE-2019-5420 的 Ruby 概念验证脚本,通过伪造签名 payload 触发 Rails ActiveSupport 反序列化漏洞以实现远程代码执行。
Stars: 1 | Forks: 0
# Rails ActiveSupport 漏洞利用 (cve-2019-5420) POC(建议将其与 CVE-2019-5418 组合利用!)
与 CVE-2019-5418 完美搭配!
## POC 截图

## 🚨 警告
本仓库包含一个**概念验证 (PoC) 漏洞利用程序**,演示了通过滥用 `ActiveSupport::MessageVerifier` 在 Ruby on Rails 应用程序中实现**远程代码执行 (RCE)**。**请负责任地使用!**
## 📌 概述
该脚本利用 **ActiveSupport 反序列化漏洞**,方法是使用包装在 `DeprecatedInstanceVariableProxy` 中的**精心构造的 ERB 对象**。当签名的 payload 被易受攻击的 Rails 应用程序反序列化时,就会发生**任意 Ruby 代码执行**。
## ⚠️ 免责声明
本项目**仅供教育和研究用途**。在未经授权的情况下对您不拥有的系统进行使用是**违法的**,并可能导致严重的法律后果。
## 🛠️ 工作原理
### 1️⃣ 生成 Secret Key
- 脚本使用 MD5 散列从已知的 Rails 应用程序名称中派生出 ``。
### 2️⃣ 创建 ActiveStorage Secret
- 使用 `ActiveSupport::KeyGenerator` 生成签名 key。
### 3️⃣ 创建恶意 ERB 对象
- 构造一个带有攻击者控制代码的**未初始化的 **``** 对象**。
### 4️⃣ 包装在 `DeprecatedInstanceVariableProxy` 中
- 将恶意对象隐藏在一个**看起来无害的包装器**中。
### 5️⃣ 签名并生成漏洞利用 Token
- 使用 `ActiveSupport::MessageVerifier` 对 payload 进行**签名**,使其看起来合法。
### 6️⃣ 实现远程代码执行 (RCE)
- 反序列化时,Rails 会**执行**攻击者的 payload,从而允许执行任意命令。
## 🚀 用法
```
ruby POC.rb
```
该脚本将生成一个**已签名的漏洞利用 token**,可用于攻击易受攻击的 Rails 应用程序。
## 🛡️ 缓解措施
- **轮换并保护 **``,以防止攻击者生成签名的 payload。
- **将 Rails 升级**到最新版本(Rails 7+ 具有更严格的序列化机制)。
- **使用 JSON 序列化**而不是 Marshal 序列化,以避免加载任意对象。
- **审计应用程序的反序列化操作**,确保未对不受信任的用户输入进行反序列化。
## 📜 法律免责声明
本项目**仅**用于教育目的。作者对因滥用此代码造成的任何误用或损害**不承担**任何责任。
## 📚 参考资料
- [Rails 安全指南](https://guides.rubyonrails.org/security.html)
- [CWE-502: 不受信任数据的反序列化](https://cwe.mitre.org/data/definitions/502.html)
⚠️ **使用风险自负!**
标签:Go语言工具, POC, Rails, Ruby, 知识库, 编程工具, 远程代码执行