Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
spd_flasher — CVE-2022-38694 加固型漏洞利用 - 适用于 Unisoc 设备的 RP2350 USB 主机自动刷写器 | Kitploit
工具/GitHubGitHub/leochen-coremind/spd_flasher
嵌入式系统安全漏洞利用逆向工程硬件黑客移动安全学习与教育
GitHubleochen-coremind/spd_flasher

spd_flasher

CVE-2022-38694 加固型漏洞利用 - 适用于 Unisoc 设备的 RP2350 USB 主机自动刷写器

查看仓库
3171个月前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CVE-2022-38694 固化方法 — RP2350 USB Host 自动刷机器

English README

教学文档

  • UDX710 启动链逆向与 RP2350 固化开机教学

利用 CVE-2022-38694 Unisoc BootROM 漏洞,通过 Raspberry Pi RP2350 USB Host 实现一次性开机发送 SPL Loader,启动任意 u-boot。

将原本需要 PC + spd_dump 完成的漏洞利用流程固化到 RP2350 微控制器 — 插入设备即自动完成,支持循环刷机。

原理概述

CVE-2022-38694 是 Unisoc BootROM 的一次性签名验证绕过漏洞。通过向特定内存地址发送 exec stub,覆写返回地址后可绕过签名校验,使 BootROM 接受并执行任意 FDL1。

关键点:FDL1 和 SPL Loader 的加载地址相同(0x28007000),因此可以直接用修改过的 SPL Loader 替代 FDL1 发送,实现启动任意 u-boot。

固化流程(两阶段)

阶段一:首次解锁(PC + spd_dump)

首次需要在 PC 上使用 spd_dump 完成解锁和固化:

root@kitploit:~
┌──────────────────────────────────────────────────────────────────────────┐
│                        阶段一:PC 端首次解锁                            │
├──────────────────────────────────────────────────────────────────────────┤
│                                                                          │
│  Step 1: 利用漏洞启动修改过的 SPL                                       │
│  ┌────────────┐    ┌────────────┐    ┌─────────────────┐                │
│  │ Exec Stub  │───►│ spl-unlock │───►│ 设备启动成功    │                │
│  │ @0x3F28    │    │ @0x28007000│    │ 进入下载模式    │                │
│  └────────────┘    └────────────┘    └────────┬────────┘                │
│                                               │                          │
│  Step 2: 通过 spd_dump 发送 patched FDL2,刷入去除安全启动的 u-boot     │
│                                               │                          │
│  ┌─────────────────┐    ┌──────────────────────▼───────────┐            │
│  │ 发送 fdl2-dl    │───►│ 用 fdl2 写入去除安全启动的 uboot │            │
│  │ (patched FDL2)  │    │ + 擦除 splloader 分区            │            │
│  └─────────────────┘    └──────────────────────────────────┘            │
│                                                                          │
│  ★ 擦除 splloader 后,设备每次开机都会自动进入 BootROM 下载模式         │
└──────────────────────────────────────────────────────────────────────────┘

操作步骤:

  1. 利用 CVE-2022-38694 发送 spl-unlock.bin 启动设备
  2. 发送 patched fdl2-dl.bin(仅去除安全启动验证的 FDL2)
  3. 通过 FDL2 将去除安全启动的 u-boot 写入 uboot 分区
  4. 擦除 splloader 分区 → 设备失去正常启动能力,每次开机自动进入 BootROM 下载模式

阶段二:固化运行(RP2350 自动刷机)

splloader 被擦除后,设备每次上电都会进入 BootROM 下载模式。RP2350 USB Host 自动完成以下流程:

root@kitploit:~
┌──────────────────────────────────────────────────────────────────────────┐
│                     阶段二:RP2350 自动固化启动                         │
├──────────────────────────────────────────────────────────────────────────┤
│                                                                          │
│  设备上电 → splloader 不存在 → 自动进入 BootROM 下载模式               │
│                                                                          │
│  ┌─────────┐    ┌────────────┐    ┌─────────────┐    ┌──────────────┐  │
│  │ BootROM │───►│ Exec Stub  │───►│ spl-unlock  │───►│ 去除安全启动 │  │
│  │ 握手    │    │ 绕过签名   │    │ 替代 FDL1   │    │ 的 u-boot    │  │
│  └─────────┘    └────────────┘    └─────────────┘    │ 正常启动 ✓   │  │
│                                                       └──────────────┘  │
│                                                                          │
│  ★ 全程自动,无需人工干预。拔掉设备后自动重置,等待下一台。            │
└──────────────────────────────────────────────────────────────────────────┘

为什么需要擦除 splloader?

  • 正常启动链:BootROM → SPL Loader → u-boot → 系统
  • SPL Loader 会验证 u-boot 签名,拒绝启动修改过的 u-boot
  • 擦除 splloader 后,BootROM 找不到 SPL,自动进入下载模式
  • 通过 CVE-2022-38694 发送跳过签名校验的 spl-unlock → 成功启动去除安全启动的 u-boot

漏洞利用链(RP2350 执行)

root@kitploit:~
┌─────────────┐     ┌──────────────────┐     ┌───────────────────┐     ┌──────────────┐
│  BootROM    │     │  Exec Stub       │     │  SPL Loader       │     │  任意 U-Boot │
│  握手连接   │ ──► │  @0x3F28 (136B)  │ ──► │  @0x28007000      │ ──► │  启动成功    │
│  CHECK_BAUD │     │  绕过签名验证    │     │  替代 FDL1 发送   │     │              │
└─────────────┘     └──────────────────┘     └───────────────────┘     └──────────────┘
  1. BootROM 握手 — CHECK_BAUD + CONNECT,建立 BSL 通信
  2. 发送 Exec Stub — 加载 136 字节到 0x3F28,利用 CVE-2022-38694 覆写返回地址,绕过签名验证
  3. 发送 SPL Loader — FDL1 与 SPL Loader 加载地址同为 0x28007000,签名验证已绕过
  4. 启动 U-Boot — spl-unlock 跳过签名校验,直接引导去除安全启动的 u-boot

前置准备:Patch 固件

本项目不包含通用的 patch 固件,你需要根据自己设备的固件自行 patch。

Patch 教程

请参考 TomKing062 的 Wiki 教程:

  • 🇬🇧 patch_do_cboot — SPL (English)
  • 🇨🇳 patch_do_cboot — SPL (中文)

需要 Patch 的固件

转换 spl-unlock.bin 为头文件

root@kitploit:~
xxd -i spl-unlock.bin > fdl1_data.h

修改 fdl1_data.h 中的数组名和宏定义以匹配代码引用。

支持平台

本项目当前使用 UDX710 平台的 exec stub (custom_exec_3f28.bin)。

如需适配其他芯片,替换 custom_exec_data.h 中的 exec stub 及加载地址即可:

完整支持列表:SupportList

硬件需求

组件说明
RP2350 开发板如 Raspberry Pi Pico 2
USB Host 线OTG 或硬件改线,使 RP2350 作为 USB Host
目标 SPD 设备splloader 已擦除,上电自动进入 BootROM 下载模式

引脚定义

引脚功能
USB D+/D-连接目标 SPD 设备
GP4 (TX)UART 调试输出
GP5 (RX)UART 调试输入

USB 端口用于 Host 通信,调试日志通过 UART1 (GP4/GP5, 115200bps) 输出。

编译

前置条件

  • Pico SDK v2.2.0+
  • CMake 3.13+
  • ARM GCC 工具链

构建

root@kitploit:~
cd spd_flasher
mkdir build && cd build
cmake .. -DTARGET_CHIP=rp2350
make -j$(nproc)

产物:spd_flasher.uf2(BOOTSEL 拖拽烧录)/ spd_flasher.bin(编程器烧录)

使用方法

  1. 完成阶段一(首次解锁 + 擦除 splloader)
  2. 烧录 spd_flasher.uf2 到 RP2350
  3. USB Host 线连接 RP2350 与目标设备
  4. 设备上电 → 自动进入 BootROM 下载模式 → RP2350 自动完成利用链
  5. 刷机完成后自动重置,即插即刷下一台

为什么用 RP2350?

项目结构

root@kitploit:~
spd_flasher/
├── main.c               # 主程序,USB Host 初始化与设备管理
├── spd_protocol.c        # SPD BSL 协议(HDLC 帧、状态机)
├── spd_protocol.h        # 协议定义
├── tusb_config.h         # TinyUSB Host 配置
├── custom_exec_data.h    # Exec Stub 数据 (136B @0x3F28)
├── fdl1_data.h           # SPL Loader 数据 (spl-unlock.bin @0x28007000)
├── spl-unlock.bin        # SPL Loader 原始二进制
├── CMakeLists.txt        # CMake 构建配置
└── signing_key.pem / aes_key.bin / iv_salt.bin  # RP2350 安全启动密钥

致谢

  • CVE-2022-38694 Unlock Bootloader — TomKing062
  • NCC Group Research — 漏洞发现
  • Raspberry Pi Pico SDK
  • TinyUSB

免责声明

本项目仅供安全研究和学习用途。使用者应遵守当地法律法规,对使用本工具造成的任何后果自行承担全部责任。作者不对任何直接或间接损害承担责任。

License

本项目采用 GNU General Public License v3.0 许可证。

下载工具
固件Patch 内容产物用途
FDL2 (u-boot/lk)NOP 安全分区写入检查fdl2-dl.bin阶段一:通过 spd_dump 发送,用于写入分区
U-Bootpatch do_cboot() 去除安全启动验证修改后的 uboot阶段一:写入设备,替代原始 uboot
SPL LoaderNOP 掉 signcheck() 及其结果校验spl-unlock.bin阶段一 & 二:CVE-2022-38694 发送
平台Exec 地址参考
UDX7100x3F28本项目默认
UMS312 / UMS5120x3EE8exec_addr_v2
UMS92300x65017F08exec_addr_v2
SC9820E / SC9832E0x4F18 / 0x4EE8CVE-2022-38694
PC + spd_dumpRP2350 固化方案
体积需要电脑单个 MCU
操作手动运行命令上电即运行
循环刷机手动操作自动重置
部署不便适合批量/产线
成本—~¥20