
CVE-2022-38694 Усиленный эксплойт — автофлешер USB-хоста на базе RP2350 для устройств Unisoc
Использование уязвимости CVE-2022-38694 в BootROM Unisoc через Raspberry Pi RP2350 USB Host для автоматической отправки SPL Loader при загрузке и запуска произвольного u-boot.
Переносит цепочку эксплойта — изначально требовавшую ПК + spd_dump — на микроконтроллер RP2350. Подключи устройство — прошивка выполняется автоматически, поддерживается непрерывная прошивка.
CVE-2022-38694 — это одноразовый обход проверки подписи в BootROM Unisoc. Отправка exec-заглушки на определённый адрес памяти перезаписывает обратный адрес, обходя проверки подписи и позволяя BootROM принять и выполнить произвольный FDL1.
Ключевая идея: FDL1 и SPL Loader используют один и тот же адрес загрузки (0x28007000), поэтому вместо FDL1 можно отправить пропатченный SPL Loader, загрузив произвольный u-boot.
Для первоначальной настройки требуется ПК с spd_dump:
┌──────────────────────────────────────────────────────────────────────────┐
│ Stage 1: PC-side Initial Unlock │
├──────────────────────────────────────────────────────────────────────────┤
│ │
│ Step 1: Exploit CVE-2022-38694 to boot patched SPL │
│ ┌────────────┐ ┌────────────┐ ┌─────────────────┐ │
│ │ Exec Stub │───►│ spl-unlock │───►│ Device boots │ │
│ │ @0x3F28 │ │ @0x28007000│ │ into DL mode │ │
│ └────────────┘ └────────────┘ └────────┬────────┘ │
│ │ │
│ Step 2: Send patched FDL2 via spd_dump, flash u-boot without │
│ secure boot, erase splloader │
│ │ │
│ ┌─────────────────┐ ┌──────────────────────▼───────────┐ │
│ │ Send fdl2-dl │───►│ Write u-boot (secure boot removed│ │
│ │ (patched FDL2) │ │ + Erase splloader partition) │ │
│ └─────────────────┘ └──────────────────────────────────┘ │
│ │
│ ★ After erasing splloader, device enters BootROM DL mode on every boot │
└──────────────────────────────────────────────────────────────────────────┘
Шаги:
spl-unlock.bin и загрузки устройстваfdl2-dl.bin (FDL2 с отключённой проверкой защищённой загрузки)После стирания splloader устройство при каждом включении входит в режим загрузки BootROM. USB Host RP2350 автоматически выполняет цепочку эксплойта:
┌──────────────────────────────────────────────────────────────────────────┐
│ Stage 2: RP2350 Automated Boot │
├──────────────────────────────────────────────────────────────────────────┤
│ │
│ Power on → no splloader → BootROM download mode │
│ │
│ ┌─────────┐ ┌────────────┐ ┌─────────────┐ ┌──────────────┐ │
│ │ BootROM │───►│ Exec Stub │───►│ spl-unlock │───►│ U-Boot │ │
│ │ Handshk │ │ Bypass sig │ │ as FDL1 │ │ (no secboot) │ │
│ └─────────┘ └────────────┘ └─────────────┘ │ Boot OK ✓ │ │
│ └──────────────┘ │
│ │
│ ★ Fully automatic. Unplug → auto-reset → ready for next device. │
└──────────────────────────────────────────────────────────────────────────┘
Зачем стирать splloader?
┌─────────────┐ ┌──────────────────┐ ┌───────────────────┐ ┌──────────────┐
│ BootROM │ │ Exec Stub │ │ SPL Loader │ │ U-Boot │
│ Handshake │ ──► │ @0x3F28 (136B) │ ──► │ @0x28007000 │ ──► │ Boot OK │
│ CHECK_BAUD │ │ Bypass sig chk │ │ Replaces FDL1 │ │ │
└─────────────┘ └──────────────────┘ └───────────────────┘ └──────────────┘
CHECK_BAUD + CONNECT, установка BSL-связи0x3F28, использование CVE-2022-38694 для перезаписи обратного адреса и обхода проверки подписи0x28007000, подпись уже обойденаЭтот проект не содержит универсальной пропатченной прошивки. Вы должны самостоятельно пропатчить прошивку своего устройства.
Обратитесь к вики TomKing062:
| Прошивка | Патч | Результат | Назначение |
|---|---|---|---|
| FDL2 (u-boot/lk) | NOP проверок записи защищённых разделов | fdl2-dl.bin | Этап 1: отправляется через spd_dump для записи разделов |
| U-Boot | Патч do_cboot() для отключения защищённой загрузки | Модифицированный uboot | Этап 1: записывается на устройство, заменяет штатный uboot |
| SPL Loader | NOP signcheck() и проверок результата | spl-unlock.bin | Этапы 1 и 2: отправляется через CVE-2022-38694 |
xxd -i spl-unlock.bin > fdl1_data.h
Обновите имя массива и макросы в fdl1_data.h, чтобы они соответствовали ссылкам в коде.
В этом проекте в настоящее время используется exec-заглушка UDX710 (custom_exec_3f28.bin).
Для адаптации к другим чипам замените exec-заглушку и адрес загрузки в custom_exec_data.h:
| Платформа | Адрес exec | Ссылка |
|---|---|---|
| UDX710 | 0x3F28 | Этот проект (по умолчанию) |
| UMS312 / UMS512 | 0x3EE8 | exec_addr_v2 |
| UMS9230 | 0x65017F08 | exec_addr_v2 |
| SC9820E / SC9832E | 0x4F18 / 0x4EE8 | CVE-2022-38694 |