arkanzasfeziii/Insecure-Deserialization-Scanner
GitHub: arkanzasfeziii/Insecure-Deserialization-Scanner
一款多语言不安全反序列化漏洞扫描器,整合静态代码分析、动态 HTTP 测试、序列化文件检查和网络流量分析于一体。
Stars: 0 | Forks: 0
# 不安全的反序列化扫描器
[](LICENSE)
[](https://www.python.org/)
[](https://github.com/arkanzasfeziii/Insecure-Deserialization-Scanner/actions/workflows/lint.yml)
[](https://owasp.org/www-community/vulnerabilities/Deserialization_of_untrusted_data)
[](https://cwe.mitre.org/data/definitions/502.html)
先进的高级自动化漏洞检测工具,能够识别 7 种以上编程语言和框架中存在的不安全反序列化漏洞。它将静态源代码分析、基于 payload 的动态 HTTP 测试、二进制文件检查以及网络流量分析整合到了单一的工作流程中。
## 功能
| 功能 | 详情 |
|---|---|
| 多语言静态分析 | Python, Java, PHP, .NET, Ruby, Node.js, XML |
| 动态 HTTP 测试 | 带有响应分析的 POST/GET payload 注入 |
| 序列化文件检查 | `.pkl`, `.ser`, `.yaml`, `.yml` 二进制分析 |
| 网络流量分析 | 对传输中的序列化数据进行 PCAP 检查 |
| Gadget 链检测 | Commons Collections, Fastjson, SnakeYAML 等 |
| 报告格式 | 控制台(彩色输出)、JSON、HTML |
| 交互模式 | 为新用户提供逐步引导提示 (`--easy`) |
## 可检测的漏洞
| 语言 | 危险模式 | 严重程度 |
|---|---|---|
| Python | `pickle.loads()`, `yaml.load()`, `marshal.loads()`, `dill.loads()`, `jsonpickle.decode()` | 严重 |
| Java | `ObjectInputStream.readObject()`, `XMLDecoder`, Fastjson AutoType, Jackson CLASS typing | 严重 |
| PHP | `unserialize()`, PHAR deserialization, `__wakeup`/`__destruct` 魔术方法 | 严重 |
| .NET | `BinaryFormatter`, `NetDataContractSerializer`, `TypeNameHandling.All` | 严重 |
| Ruby | `Marshal.load()`, `YAML.load()`, `Oj.object_load()` | 严重 |
| Node.js | 用于 JSON 的 `eval()`, `new Function()`, `node-serialize`, 原型链污染 | 高 |
| XML | 在未启用安全处理特性下通过 `DocumentBuilder`/`SAXParser` 导致的 XXE | 高 |
## 安装
```
git clone https://github.com/arkanzasfeziii/Insecure-Deserialization-Scanner.git
cd Insecure-Deserialization-Scanner
pip install -r requirements.txt
```
可选依赖(启用额外功能):
```
pip install scapy # PCAP / network traffic analysis
pip install termcolor # Colored console output
pip install pyyaml # YAML file analysis
```
## 用法
### 交互模式(推荐首次使用的用户)
```
python main.py --easy
```
### 静态源代码分析
```
# 扫描单个文件
python main.py --target app/utils.py --mode static
# 扫描整个项目目录
python main.py --target /path/to/project --mode static --verbose
# 限制为特定语言
python main.py --target src/ --type python --mode static
```
### 动态 HTTP 测试
```
# 将 payload 通过 POST 请求发送至 endpoint
python main.py --target https://example.com/api/deserialize --mode dynamic
# 使用 GET 方法
python main.py --target https://example.com/api --mode dynamic --method GET
# 调整 timeout
python main.py --target https://example.com/api --mode dynamic --timeout 30
```
### 序列化文件检查
```
python main.py --target suspicious.pkl --mode full
python main.py --target upload.ser --mode full
python main.py --target config.yaml --mode full
```
### 网络流量分析
```
python main.py --target capture.pcap --mode full
```
### 生成报告
```
# HTML 报告
python main.py --target /path/to/project --output-html report.html
# JSON 报告
python main.py --target /path/to/project --output-json report.json
# 两者同时进行
python main.py --target /path/to/project --output-html report.html --output-json report.json
```
## 示例输出
```
======================================================================
INSECURE DESERIALIZATION VULNERABILITIES DETECTED
======================================================================
Total Issues Found: 3
CRITICAL: 2
HIGH: 1
[1] CRITICAL - Unsafe pickle deserialization detected
File: app/utils.py
Line: 42
Language: PYTHON
Reference: CWE-502: Deserialization of Untrusted Data
Vulnerable Code:
data = pickle.loads(request.data)
Fix Recommendation:
Avoid pickle for untrusted data. Use JSON or implement whitelist validation.
[2] CRITICAL - Unsafe YAML deserialization (use safe_load)
File: config/loader.py
Line: 17
Language: PYTHON
Reference: CWE-502: Deserialization of Untrusted Data
Vulnerable Code:
config = yaml.load(user_input)
Fix Recommendation:
Use yaml.safe_load() instead of yaml.load()
[3] HIGH - Shelve uses pickle internally - unsafe for untrusted data
File: cache/manager.py
Line: 88
Language: PYTHON
Reference: CWE-502: Deserialization of Untrusted Data
Fix Recommendation:
Validate file source or use SQLite instead.
```
## CLI 参考
| 标志 | 简写 | 描述 |
|---|---|---|
| `--target TARGET` | `-t` | 要扫描的 URL、文件路径或目录 |
| `--mode {static,dynamic,full}` | `-m` | 扫描模式(默认:`full`) |
| `--type {python,java,php,...}` | `-y` | 强制指定的语言检测(默认:`auto`) |
| `--method {GET,POST,PUT}` | | 用于动态测试的 HTTP 方法(默认:`POST`) |
| `--easy` | `-e` | 交互式新手模式 |
| `--output-json FILE` | `-oj` | 保存 JSON 报告 |
| `--output-html FILE` | `-oh` | 保存 HTML 报告 |
| `--simple` | `-s` | 简化控制台输出 |
| `--verbose` | `-v` | 详细的进度输出 |
| `--log-file FILE` | `-l` | 将日志写入文件 |
| `--timeout SECONDS` | | HTTP 请求超时时间(默认:`30`) |
| `--version` | | 打印版本信息并退出 |
## 序列化格式检测
| 格式 | 文件扩展名 | Magic Bytes / 特征签名 |
|---|---|---|
| Python Pickle | `.pkl`, `.pickle` | `\x80\x02`, `\x80\x03`, `\x80\x04` |
| Java Serialized | `.ser`, `.serialized` | `\xac\xed\x00\x05` |
| PHP Serialized | `.php` | `O:`, `a:` |
| .NET BinaryFormatter | `.dat` | `AAEAAAD` (Base64) |
| YAML (不安全的标签) | `.yaml`, `.yml` | `!!python/object` |
## 参考
- [OWASP:不受信任数据的反序列化](https://owasp.org/www-community/vulnerabilities/Deserialization_of_untrusted_data)
- [CWE-502:不受信任数据的反序列化](https://cwe.mitre.org/data/definitions/502.html)
- [PortSwigger:不安全的反序列化](https://portswigger.net/web-security/deserialization)
- [PHP 对象注入](https://owasp.org/www-community/vulnerabilities/PHP_Object_Injection)
- [.NET BinaryFormatter 安全指南](https://learn.microsoft.com/en-us/dotnet/standard/serialization/binaryformatter-security-guide)
## 贡献
请查看 [CONTRIBUTING.md](CONTRIBUTING.md) 了解指南。
## 许可证
MIT 许可证。有关详情,请参阅 [LICENSE](LICENSE)。
标签:CISA项目, 不安全反序列化, 云安全监控, 加密, 动态测试, 恶意代码分类, 漏洞扫描器, 逆向工具, 静态分析