目标达成 感谢每一位支持者 — 我们达成了 100% 目标!

目标: 1000 元 · 已筹: 1000

100.0%

CVE-2025-59489 PoC — Unity Runtime 参数注入漏洞

来源
关联漏洞
标题:Unity Runtime 参数注入漏洞 (CVE-2025-59489)
Description:Unity Runtime是美国Unity公司的一款负责执行逻辑、渲染、物理与交互的底层系统。 Unity Runtime 2025-10-02之前版本存在参数注入漏洞,该漏洞源于参数注入,可能导致从意外位置加载库代码,从而执行任意代码和泄露机密信息。
Description
CVE-2025-59489 Unity Vulnerability Checker
介绍
# Unity CVE-2025-59489 漏洞检测工具

Android 游戏平台专用的 Unity Runtime 注入漏洞自动化检测工具。

## 漏洞概述

- **CVE ID**: CVE-2025-59489
- **CVSS 评分**: 8.4 (High)
- **影响范围**: Unity 2017.1 及以后版本构建的 Android 应用
- **官方公告**: <https://unity.com/security/sept-2025-01>

## 漏洞危害详解

### 危害上限(最坏情况)

**一句话总结**:攻击者可以完全控制受影响的 Unity 游戏/应用,拿到该应用的所有权限。

### Android 平台危害场景

1. 用户手机上装了一个**恶意应用 A**
2. 用户手机上还有一个**受影响的 Unity 游戏 B**
3. 恶意应用 A 可以:
   - **冒充游戏 B 执行任意代码**
   - **窃取游戏 B 能访问的所有数据**(存档、账号信息、照片、通讯录等)
   - **使用游戏 B 的所有权限**(摄像头、麦克风、位置、联网等)

**关键点**:在 Android 上,恶意应用可以劫持 Unity 应用已获得的权限

### Windows 平台危害场景

1. 用户点击一个**恶意网页链接**
2. 如果电脑上装了**受影响的 Unity 游戏**
3. 攻击者可以:
   - **远程触发游戏加载恶意代码**
   - **以游戏的权限执行任意操作**
   - **窃取游戏能访问的文件和数据**

**关键点**:在 Windows 上,如果游戏注册了 custom URI handler,点击特制链接即可触发漏洞

### 具体危害示例

| 如果游戏有这个权限 | 攻击者就能        |
| ------------------ | ----------------- |
| 📸 摄像头           | 偷拍你            |
| 🎤 麦克风           | 偷听你            |
| 📍 位置             | 追踪你            |
| 📱 联系人           | 窃取你的通讯录    |
| 💾 存储             | 读取/删除你的文件 |
| 💰 支付             | 盗刷游戏内支付    |
| 🔐 账号             | 窃取游戏账号      |

### 重要限制

**好消息**:攻击者**无法突破**应用本身的权限边界

- ❌ **不能获取 root 权限**
- ❌ **不能访问其他应用的数据**(Android 沙箱保护)
- ❌ **只能以被攻击应用的身份行动**

**坏消息**:很多游戏要求大量权限(摄像头、麦克风、存储、位置等),攻击者可以完全利用这些权限

### 对游戏平台的影响

作为安卓游戏平台运营方,最糟糕的后果:

1. **用户隐私泄露** → 平台声誉受损
2. **大规模账号被盗** → 用户流失
3. **法律责任** → 未尽到安全审查义务
4. **经济损失** → 用户索赔、监管处罚

_\[来源:Unity 官方安全公告、GMO Flatt Security 技术分析\]_

## 快速开始

### 环境要求

```bash
# 仅需 Python 3.7+ 标准库,无需额外依赖
python3 --version  # 确认 Python 版本
```

### 5 分钟上手

```bash
# 步骤 1: 运行测试
python test_demo.py

# 步骤 2: 检测单个 APK
python unity_vulnerability_checker.py your_game.apk

# 步骤 3: 批量检测
python unity_vulnerability_checker.py --batch /path/to/apks

# 步骤 4: 查看使用示例
python usage_examples.py
```

### 最简单的使用方式

```python
from unity_vulnerability_checker import check_unity_vulnerability

# 检测单个 APK 文件
result = check_unity_vulnerability("your_game.apk")

# 方式 1: 使用便捷属性
if result.is_vulnerable:
    print(f"⚠️  应用受影响!({result.version})")
    print(f"建议:{result.recommendation}")
elif result.is_safe:
    print(f"✅ 应用安全")
    print(f"原因:{result.message}")
else:
    print(f"❓ 需要人工复核")
    print(f"原因:{result.message}")

# 方式 2: 使用 status 字段
if result.status == "positive":
    print(f"受影响:{result.version}")
```

### 批量检测目录下的所有 APK

```python
from unity_vulnerability_checker import batch_check

# 批量扫描一个目录
results = batch_check("/path/to/apk/folder")

# 筛选受影响的应用
vulnerable_apps = [
    (name, result) 
    for name, result in results.items() 
    if result.is_vulnerable
]
print(f"发现 {len(vulnerable_apps)} 个受影响的应用")
for name, result in vulnerable_apps:
    print(f"  - {name}: {result.version}")
```

### 集成到现有系统

```python
from unity_vulnerability_checker import UnityVulnerabilityChecker

class MyPlatform:
    """你的游戏平台系统"""

    def __init__(self):
        self.checker = UnityVulnerabilityChecker()

    def check_new_upload(self, apk_path: str) -> bool:
        """检查新上传的 APK,返回是否可以上架"""
        result = self.checker.check_apk(apk_path)

        if result.is_vulnerable:
            # 受影响 - 拒绝上架
            self.notify_developer(
                f"您的应用受 Unity 漏洞影响\n"
                f"版本:{result.version}\n"
                f"建议:{result.recommendation}"
            )
            return False
        elif result.is_safe:
            # 安全 - 批准上架
            return True
        else:
            # 无法确定 - 人工复核
            self.queue_manual_review(apk_path, result.message)
            return False

    def notify_developer(self, message: str):
        """通知开发者(实现你的通知逻辑)"""
        pass

    def queue_manual_review(self, apk_path: str):
        """加入人工复核队列(实现你的逻辑)"""
        pass
```

### 检测结果说明

工具返回三种结果类型:

- **positive** - 确认受影响(需要更新)
- **negative** - 安全(非 Unity 或已修复)
- **inconclusive** - 无法确定(需人工复核)

**输出示例**(单行简洁格式):

```bash
# 受影响的应用
⚠️  该应用受 CVE-2025-59489 影响 (Unity 2019.2.6f1)

# 安全的应用(3 种情况)
✅ 该应用安全 - 非 Unity 应用
✅ 该应用安全 - 已使用 Unity patcher 工具修复
✅ 该应用安全 - 已修复版本 (2019.4.41f1)

# 无法确定
❓ 无法确定 - Unity 应用但无法提取版本,可能被加壳或混淆,建议人工复核
⚠️  文件过大无法处理 (1500.0MB,限制 1024MB) - 修改代码第 15 行 MAX_APK_SIZE_MB 为更大值
```

## 项目文件清单

```text
.
├── unity_vulnerability_checker.py  # 核心模块
│   ├─ UnityVulnerabilityChecker 类 - 漏洞检测核心引擎
│   ├─ check_unity_vulnerability() - 简化的检测函数
│   ├─ batch_check() - 批量检测功能
│   └─ 完整的版本解析和判定逻辑
│
├── usage_examples.py               # 使用示例
│   ├─ 基础使用示例
│   ├─ 批量检测示例
│   ├─ 平台集成示例
│   ├─ 自动化响应示例
│   └─ Flask API 集成示例
│
├── test_demo.py                    # 测试演示
│   ├─ 版本号解析测试
│   ├─ 版本提取测试
│   ├─ 修复判断测试
│   ├─ APK 扫描场景模拟
│   └─ 性能基准测试
│
├── test_version_detection.py       # 单元测试(33 个测试用例)
│
├── README.md                       # 完整文档(包含快速开始指南)
│
└── CLAUDE.md                       # 开发规范
```

## 核心功能

### APK 检测

- 自动识别 Unity 应用
- 提取 Unity 版本号
- 判断是否受 CVE-2025-59489 影响
- 返回三种检测结果:positive(受影响)、negative(安全)、inconclusive(需人工复核)

### 批量处理

- 支持目录批量扫描
- 生成统计报告
- 适合大规模应用审核

### 易于集成

- 简洁的 API 接口
- 命令行工具
- 可嵌入现有系统

## 使用指南

### 命令行使用

```bash
# 单文件检测
python unity_vulnerability_checker.py game.apk

# 详细日志模式
python unity_vulnerability_checker.py game.apk -v

# 批量检测目录
python unity_vulnerability_checker.py --batch /path/to/apk/folder

# 批量检测(详细模式)
python unity_vulnerability_checker.py --batch /path/to/apk/folder -v
```

### 批量扫描并生成报告

```python
from unity_vulnerability_checker import batch_check

results = batch_check("/path/to/apk/directory", verbose=True)

# 筛选受影响的应用
vulnerable = {name: result for name, result in results.items()
              if result.is_vulnerable}

print(f"发现 {len(vulnerable)} 个受影响的应用")
```

### 集成到审核系统

```python
from unity_vulnerability_checker import UnityVulnerabilityChecker

class AppReviewSystem:
    def __init__(self):
        self.checker = UnityVulnerabilityChecker(verbose=False)

    def review_upload(self, apk_path: str) -> str:
        result = self.checker.check_apk(apk_path)

        if result.is_vulnerable:
            return "REJECT"  # 拒绝上架
        elif result.is_safe:
            return "APPROVE"  # 批准
        else:
            return "MANUAL_REVIEW"  # 人工复核

reviewer = AppReviewSystem()
decision = reviewer.review_upload("new_game.apk")
```

### Flask API 集成

```python
from flask import Flask, request, jsonify
from unity_vulnerability_checker import check_unity_vulnerability

app = Flask(__name__)

@app.route('/api/scan', methods=['POST'])
def scan_apk():
    file = request.files['file']
    temp_path = f"/tmp/{file.filename}"
    file.save(temp_path)

    result = check_unity_vulnerability(temp_path)

    # 使用 to_dict() 方法直接转换为 JSON
    response = result.to_dict()
    response["filename"] = file.filename
    response["vulnerable"] = result.is_vulnerable
    
    return jsonify(response)
```

## 检测原理

### 检测逻辑流程图

```text
          ┌─────────────────┐
          │   读取 APK 文件   │
          └────────┬─────────┘
                   │
                   ▼
          ┌─────────────────┐
          │ 是否为 Unity 应用? │──NO──> negative
          └────────┬─────────┘
                   │ YES
                   ▼
          ┌─────────────────────┐
          │ 检测到 patcher 补丁? │──YES──> negative
          └────────┬─────────────┘
                   │ NO
                   ▼
          ┌─────────────────┐
          │ 提取 Unity 版本  │──失败──> inconclusive
          └────────┬─────────┘
                   │ 成功
                   ▼
          ┌─────────────────┐
          │ 版本 < 2017.1 ?  │──YES──> negative
          └────────┬─────────┘
                   │ NO
                   ▼
          ┌─────────────────┐
          │  版本已修复?     │──YES──> negative
          └────────┬─────────┘
                   │ NO
                   ▼
               positive
```

### 1. Unity 应用识别

检测 APK 中是否存在以下特征:

- `lib/*/libunity.so` - Unity 运行时库
- `assets/bin/Data/*` - Unity 资源文件

### 2. 版本提取

从以下位置提取 Unity 版本号:

- **libunity.so** - 二进制库中的版本字符串
- **globalgamemanagers** - Unity 数据文件
- **data.unity3d** - 打包的资源文件

支持的版本号格式:

- 标准格式:`2019.4.40f1`, `2022.3.15f1`
- 新格式:`6000.0.23f1`, `6000.2.6f2`
- 无后缀:`2019.4.40`, `6000.0.23`

### 3. 漏洞判定

基于 Unity 官方安全公告的规则:

1. Unity 2017.1 之前 → **安全**
2. 已修复版本 → **安全**
3. Unity 2017.1–2018.4 → **无法确定**(Unity 官方未提供补丁)
4. Unity 2019.1+ 未修复 → **受影响**(有补丁可用)

### 修复版本对照表

| Unity 版本 | 最低修复版本 | 状态                       |
| ---------- | ------------ | -------------------------- |
| 6000.3     | 6000.3.0b4   | ✅ 有补丁                   |
| 6000.2     | 6000.2.6f2   | ✅ 有补丁                   |
| 6000.0 LTS | 6000.0.58f2  | ✅ 有补丁                   |
| 2022.3     | 2022.3.62f2  | ✅ 有补丁                   |
| 2021.3     | 2021.3.45f2  | ✅ 有补丁                   |
| 2020.x     | 2020.1.18f1+ | ✅ 有补丁                   |
| 2019.x     | 2019.1.15f1+ | ✅ 有补丁                   |
| 2017-2018  | N/A          | ⚠️ 无官方补丁,建议升级版本 |

## 实际应用场景

### 场景 1: 应用商店审核

在应用上架前自动扫描,拒绝受影响的应用上架

```python
from unity_vulnerability_checker import check_unity_vulnerability

def pre_publish_check(apk_path):
    result = check_unity_vulnerability(apk_path)
    if result.is_vulnerable:
        return {
            "approved": False, 
            "reason": f"CVE-2025-59489 vulnerability detected ({result.version})",
            "recommendation": result.recommendation
        }
    return {"approved": True, "message": result.message}
```

### 场景 2: 存量应用扫描

批量扫描现有应用库,识别需要更新的应用

```bash
python unity_vulnerability_checker.py --batch /data/published_apps > scan_report.txt
```

### 场景 3: 自动化监控

每日定时扫描新上传应用,自动通知开发者

```python
import schedule
from unity_vulnerability_checker import batch_check

def daily_scan():
    results = batch_check("/data/new_uploads")
    vulnerable = [(name, result) for name, result in results.items() if result.is_vulnerable]
    if vulnerable:
        # 发送通知,包含详细信息
        for name, result in vulnerable:
            send_notification(name, result.version, result.message)

schedule.every().day.at("02:00").do(daily_scan)
```

### 场景 4: 安全报告生成

生成平台安全报告,统计漏洞分布情况

```python
from unity_vulnerability_checker import batch_check
import json

results = batch_check("/data/all_apps")
report = {
    "total": len(results),
    "vulnerable": sum(1 for r in results.values() if r.is_vulnerable),
    "safe": sum(1 for r in results.values() if r.is_safe),
    "unclear": sum(1 for r in results.values() if r.is_uncertain),
    # 详细列表
    "vulnerable_apps": [
        {"name": name, "version": r.version, "message": r.message}
        for name, r in results.items() if r.is_vulnerable
    ]
}

with open("security_report.json", "w") as f:
    json.dump(report, f, indent=2)
```

### 场景 5: CI/CD 集成

集成到持续集成流程,自动化安全检查

```bash
#!/bin/bash
# 在 CI pipeline 中使用

python unity_vulnerability_checker.py build/output.apk
result=$(python unity_vulnerability_checker.py build/output.apk | grep "检测结果")

if echo "$result" | grep -q "positive"; then
    echo "Security check failed: CVE-2025-59489 detected"
    exit 1
fi

echo "Security check passed"
```

## 性能指标

- **单文件检测**: 0.5 - 2 秒(取决于 APK 大小)
- **版本解析**: < 0.01 毫秒(内存操作)
- **批量扫描**: 支持并行处理(可配置进程数)
- **内存占用**: < 100 MB(单次检测)

## 注意事项

### 假阳性/假阴性

**可能误判为安全的情况**:

- APK 经过混淆或加壳处理
- 版本信息被修改或移除
- 使用非标准构建流程

**可能误判为受影响的情况**:

- 版本号格式异常但实际已修复
- 提取到错误的版本字符串

### 使用建议

1. **人工复核**:对于 `inconclusive` 结果,建议人工复核
2. **组合检测**:结合其他安全扫描工具使用
3. **持续更新**:关注 Unity 官方更新的修复版本列表
4. **不能替代人工安全审计**:本工具仅作为自动化初筛手段

## 常见问题

### 为什么会返回 "inconclusive"?

可能原因:

- APK 经过加壳或混淆
- 版本信息被移除
- 文件损坏
- Unity 2017.1-2018.4 版本(无官方补丁)

建议:对这类应用进行人工复核

### Unity 2017/2018 版本为什么返回 "inconclusive"?

Unity 官方未为 2017.1-2018.4 版本提供安全补丁。这些版本确实存在漏洞,但由于:

- Unity 已停止支持这些版本
- 没有官方修复版本可供升级
- 开发者无法通过简单更新解决

因此返回 "inconclusive" 而非 "positive",建议:

1. 与开发者沟通升级到 Unity 2019.1+ 并重新构建
2. 使用 Unity 官方提供的缓解工具作为临时方案
3. 评估风险后决定是否下架或给予宽限期

### 检测准确率如何?

基于 Unity 官方公告的规则,对标准构建的 APK 准确率 > 95%。混淆或加壳的 APK 可能需要额外处理。

### 性能如何?

单个 APK 检测通常在 0.5-2 秒内完成,支持并行批量处理以提高效率。详细性能指标见本文档"性能指标"章节。

### 可以检测 iOS 应用吗?

当前版本专注于 Android APK。iOS .ipa 文件检测需要额外适配。

### 如何更新修复版本列表?

修改 `unity_vulnerability_checker.py` 中的 `PATCHED_VERSIONS` 字典,关注 Unity 官方公告获取最新信息。

## 安全建议

### 平台方

1. **立即行动**

   - 下架受影响应用或限制下载
   - 通知开发者尽快更新

2. **持续监控**

   - 建立每日自动扫描机制
   - 监控新上传的应用

3. **用户通知**
   - 向已安装用户推送更新提示
   - 提供漏洞说明和修复指引

### 开发者

1. **升级 Unity 版本**

   - 更新到最新的修复版本
   - 重新编译并发布应用

2. **临时方案**(无法升级时)

   - 使用 Unity Application Patcher
   - 替换受影响的运行时库

3. **验证修复**
   - 使用本工具验证新版本
   - 确认不再报告为 `positive`

## 相关链接

- **Unity 官方公告**: <https://unity.com/security/sept-2025-01>
- **修复工具下载**: <https://unity.com/security/sept-2025-01/remediation>
- **CVE 详情**: <https://nvd.nist.gov/vuln/detail/CVE-2025-59489>
- **技术分析** (GMO Flatt Security): <https://flatt.tech/research/posts/arbitrary-code-execution-in-unity-runtime/>

## 技术支持

遇到问题?

1. 查看本文档的详细说明
2. 运行 `test_demo.py` 验证工具正常工作
3. 查看 `usage_examples.py` 寻找类似场景
4. 联系 Unity 官方获取最新信息

## 开发指南

### 环境配置

项目已配置完整的代码质量检查工具:

```bash
# 安装依赖
pip install ruff pre-commit

# 安装 pre-commit hooks
pre-commit install

# 手动运行所有检查
pre-commit run --all-files
```

### 代码质量标准

所有提交前会自动运行以下检查:

1. **Ruff Linter** - Python 代码静态分析
   - 检查代码风格(PEP 8)
   - 检测潜在错误
   - 自动修复常见问题

2. **Ruff Formatter** - Python 代码格式化
   - 统一代码格式
   - 88 字符行长度限制

3. **通用文件检查**
   - 清除行尾空格
   - 文件末尾换行
   - YAML/TOML 格式验证
   - 检测大文件(>1MB)
   - 检测合并冲突标记

4. **Markdown 格式检查**
   - 自动修复格式问题
   - 检查代码块语言标识

### 配置文件

- `ruff.toml` - Ruff 配置
- `.pre-commit-config.yaml` - Pre-commit hooks 配置

### 提交前检查

所有代码在提交前**必须通过** ruff 检查。如果检查失败,提交会被阻止。

```bash
# 如果 pre-commit 失败,会自动修复部分问题
# 修复后需要重新 git add 并提交
git add .
git commit -m "your message"
```

### 手动运行检查

```bash
# 只检查 Python 文件
ruff check *.py

# 自动修复问题
ruff check --fix *.py

# 格式化代码
ruff format *.py
```

## 更新日志

### v1.2.0 (2025-10-13)

- 新增 Unity Patcher 补丁检测功能
- 输出信息优化

### v1.1.0 (2025-10-11)

- 修复版本判定逻辑错误(`major >= 2019 or major >= 6000`)
- 支持 beta/alpha 版本号解析和比较
- 更严格的 Unity 应用识别规则
- 添加文件大小验证(500MB 限制)
- 实现并行批量处理
- 改用标准 logging 模块
- 改用 argparse 解析命令行参数
- 提取魔法数字为常量
- 配置 pre-commit hooks 和 ruff linter
- 所有代码通过 ruff 质量检查

### v1.0.0 (2025-10-11)

- 初始版本发布
- 支持 Unity 2017.1 - 6000.x 版本检测
- 支持批量扫描功能
- 命令行界面
- 基于 Unity CVE-2025-59489 官方公告

## 许可证

本工具仅供安全审计和合规检查使用。
文件快照

[4.0K] /data/pocs/293b3e0b1491a113e25c23938e0a631b5d333433 ├── [1.7K] CLAUDE.md ├── [4.7K] PRE_COMMIT_SETUP.md ├── [ 20K] README.md ├── [ 965] ruff.toml ├── [7.6K] test_demo.py ├── [ 27K] test_version_detection.py ├── [ 31K] unity_vulnerability_checker.py └── [ 11K] usage_examples.py 1 directory, 8 files
神龙机器人已为您缓存
备注
    1. 建议优先通过来源进行访问。
    2. 如果因为来源失效或无法访问,请发送邮件到 f.jinxu#gmail.com 索取本地快照(把 # 换成 @)。
    3. 神龙已为您对 POC 代码进行快照,为了长期维护,请考虑为本地 POC 付费/捐赠,感谢您的支持。