Skip to content
KitploitKITPLOIT
ИнструментыЭксплойтыБлог
Log in
Отправить
ИнструментыЭксплойтыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
zyxel-p870hn-hardware-hacking — От голой печатной платы до root: аппаратный взлом ZyXEL P-870HN (BCM6368) через UART — CVE-2025-0890 + CVE-2024-40891, на собственном оборудовании. | Kitploit
Инструменты/GitHubGitHub/danyw24/zyxel-p870hn-hardware-hacking
Безопасность встроенных системВзлом паролейБезопасность IoTАнализ уязвимостейЭксплуатацияОбратная инженерияАппаратный ХакингОбучение и ОбразованиеАнализ Прошивок

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться
GitHubdanyw24/zyxel-p870hn-hardware-hacking

zyxel-p870hn-hardware-hacking

От голой печатной платы до root: аппаратный взлом ZyXEL P-870HN (BCM6368) через UART — CVE-2025-0890 + CVE-2024-40891, на собственном оборудовании.

Репозиторий
281 месяц назадЕщё не проверено

От голой печатной платы до root: аппаратный взлом ZyXEL P-870HN через UART

Две фотографии немаркированной платы роутера с телефона → последовательная консоль → обход аутентификации → root-оболочка — воспроизведение реальной, до сих пор не пропатченной цепочки CVE-2025-0890 (скрытая учётная запись supervisor) + CVE-2024-40891 (инъекция команд в CLI) на оборудовании, которым я владею.

автор damik0 · 2026-08-13 · руководство по аппаратному взлому

  📷 PCB photos ─▶ 🔬 chip recon ─▶ 🏷️  model ID ─▶ 📍 find UART (J2)
       └─▶ 🔌 serial console ─▶ 🚪 hidden account ─▶ ⛓️  break out of CLI
              └─▶ 🐚 root shell ─▶ 🔓 dump + crack every credential

TL;DR

На моём столе валялась какая-то плата роутера. Без корпуса, без маркировки, и без понятия, что это. Не имея ничего, кроме двух её фотографий, я считал все чипы с PCB, точно определил модель, нашёл последовательный (UART) разъём, подключился к нему, вошёл через заводскую учётную запись-бэкдор, выбрался из запертого вендорского меню в root-оболочку Linux и вытащил с устройства все пароли — взломаны менее чем за секунду.

Ни одна из этих уязвимостей не моя. Это документированные проблемы ZyXEL, которые вендор заявил, что не будет патчить. Этот репозиторий о том, как это делается, от начала до конца, и о логике рассуждений на каждом шаге.


Сначала главное: это моё собственное оборудование

  • Цель — плата роутера, которой владею я.
  • Вход осуществлялся через физический последовательный порт на PCB — никакой удалённой атаки, сторонних сетей, ничего не выставлялось в интернет.
  • Всё это время она лежала на моём стенде, изолированная от сети.
  • Целью было прогнать полный цикл аппаратного взлома от начала до конца и задокументировать его так, чтобы его можно было воспроизвести.

Над чем я ковырялся

Я определил ID по номеру платы на шелкографии 45-402-000022 и штрихкоду, сверившись с TechInfoDepot, таблицей оборудования OpenWrt и FCC ID I88P870HN51B:

МодельZyXEL P-870HN-53b — VDSL2/ADSL2+ WiFi-шлюз, произведён MitraStar
Эпоха~2013 (коды дат указывают на 21-ю неделю 2013 года); устройство, распространявшееся провайдером
SoCBroadcom BCM6368UKPBG — двухъядерный MIPS (BMIPS4350), ~400 МГц
RAM2× Winbond W9425G6JH-5 — 256 Мбит DDR2 ×16 каждая = 64 МБ на 32-битной шине
FlashMacronix MX29LV640EBTI-70G — 8 МБ параллельная NOR, TSOP-48
WiFiBroadcom BCM43222 (802.11n; двухдиапазонный кристалл, подключён только к 2.4 ГГц)
DSL AFEBroadcom BCM6302
ПрошивкаLinux 2.6.30 + BusyBox v1.00, загрузчик Broadcom CFE (собран 2012-06-11)

Почему номер платы — это ключ, открывающий всё: такие ODM-шлюзы — это референсные разработки. Как только номер детали на шелкографии совпадает с документированной платой, вы получаете в наследство чужую домашнюю работу — точный чип флеш-памяти, расположение и распиновку UART, учётные записи по умолчанию. Идентификация — не формальность; это то, что превращает слепое зондирование в целевую атаку.


Как всё происходило

Шаг 0 — выгрузка фотографий с телефона

Сначала небольшой шаг для удобства: я набросал крошечный загрузчик фотографий по LAN (только стандартная библиотека Python, ноль зависимостей), чтобы можно было снимать плату на телефон, а снимки сразу попадали на мой компьютер. Половина успешной сессии — это устранение вот таких трений.

Шаг 1 — чтение платы

Я прошёлся по чипам на фотографиях высокого разрешения. Типы корпусов рассказывают историю ещё до того, как вы прочитаете маркировку: BGA в центре — это мозг, TSOP-48 — почти всегда параллельная флеш-память, маленькая банка с коаксиальным хвостиком — радиомодуль. SoC прятался под RF-экраном (он там для ЭМС и в качестве теплораспределителя), поэтому я снял крышку, чтобы прочитать маркировку под ней — Broadcom BCM6368.

Аннотированная карта платы

Плата с картой: (1) SoC BCM6368, (2) DDR2 RAM, (3) WiFi BCM43222, (4) линейный трансформатор DSL, (5) магнетики Ethernet, (6) внутренние USB-разъёмы, (7)(8) маркировка платы, (9) консольный разъём J2, (10) незапаянная посадочная площадка JTAG.

Шаг 2 — даём устройству имя

Шелкография 45-402-000022 точно совпала с документированной платой, и каждый чип — SoC, флеш, WiFi, 64 МБ RAM — сошёлся один к одному с вариантом -53b. Теперь я не просто знал, что это; я знал, где находится её UART и какая учётная запись впустит меня внутрь.

Шаг 3 — охота за UART

Прямо рядом с SoC находился запаянный 6-контактный угловой разъём с шелкографией J2 и треугольником, отмечающим вывод 1. Подтверждено по странице OpenWrt для этой модели:

ВыводСигнал
1VCC 3.3Vне подключать
2Tx→ RX переходника
3Rx→ TX переходника
4GND→ GND переходника
5NC

115200 8N1, 3.3V TTL.

Схема подключения J2

Как найти UART, когда никакая вики не подсказывает распиновку — вот та часть, которая показывает, что это не просто следование рецепту:

  • GND — проверка целостности (писк) на земляной полигон/экран при обесточенной плате.
  • VCC — шина, которая держит стабильные ~3.3 В после подачи питания.
  • TX — в покое находится в высоком уровне ~3.3 В (маркерное состояние UART) и заметно проседает/мерцает в момент, когда устройство загружается и начинает вываливать свой лог. Это мерцание — консоль говорит.
  • RX — обычно тихий: в воздухе или слабо подтянут, активности при загрузке нет.

А если вы не знаете скорость? 115200 — значение по умолчанию для Broadcom CFE, но вслепую вы бы либо перебирали распространённые скорости (9600 → 115200), пока мусор не превратится в ASCII, либо измерили самый узкий битовый период на осциллографе и вычислили 1 / t.

Шаг 4 — получаем консоль

Я подключил USB-TTL переходник (HW-597, PL2303) с перемычкой на 3.3V. Это важно: UART у BCM6368 — это 3.3 В TTL, а не RS-232 (±12 В) — подключите настоящий последовательный порт или переходник на 5 В, и вы сожжёте вывод. Сначала земля, затем RX/TX крест-накрест, VCC оставлен в воздухе, чтобы ничто не запитывало плату в обратную сторону. Перед подачей питания я проверил GND и VCC мультиметром, затем:

screen /dev/ttyUSB0 115200

Подал питание, наблюдал, как CFE передаёт управление ядру, как поднимается BusyBox init, и оказался на приглашении login.

Шаг 5 — парадная дверь была нараспашку · CVE-2025-0890

Логин поддался скрытой заводской учётной записи, которую ZyXEL никогда не документирует для конечного пользователя:

user:     supervisor
pass:     zyad1234

Полные системные привилегии. Это ядро CVE-2025-0890.

Шаг 6 — побег из вендорской клетки · CVE-2024-40891

Этот логин забросил меня в закрытый вендорский CLI (consoled, приглашение >): никакого sh, ни одного обычного Linux-инструмента — тюрьма, обёрнутая вокруг реальной системы. Но в нём был доступен диагностический ping, и эта команда подставляла свой аргумент прямо в строку оболочки без какой-либо санитизации. Поэтому я скормил ей метасимвол оболочки:

> ping 127.0.0.1; sh

…и оказался в root-оболочке BusyBox (#).

Скачать инструмент