Skip to content
KitploitKITPLOIT
ツールブログ
Log in
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
zyxel-p870hn-hardware-hacking — むき出しのPCBからrootまで: UART経由でZyXEL P-870HN (BCM6368) をハードウェアハッキング — CVE-2025-0890 + CVE-2024-40891、自分のハードウェア上で。 | Kitploit
ツール/GitHubGitHub/danyw24/zyxel-p870hn-hardware-hacking
組み込みシステムセキュリティパスワードクラッキングIoTセキュリティ脆弱性分析エクスプロイトリバースエンジニアリングハードウェアハッキング学習と教育ファームウェア解析

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有
GitHubdanyw24/zyxel-p870hn-hardware-hacking

zyxel-p870hn-hardware-hacking

むき出しのPCBからrootまで: UART経由でZyXEL P-870HN (BCM6368) をハードウェアハッキング — CVE-2025-0890 + CVE-2024-40891、自分のハードウェア上で。

リポジトリを見る
281ヶ月前未レビュー

むき出しのPCBからrootへ: UART経由でZyXEL P-870HNをハードウェアハッキング

ラベルのないルーター基板のスマホ写真2枚 → シリアルコンソール → 認証バイパス → 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

机の上に無造作に置いてあった正体不明のルーター基板。筐体もなく、ラベルもなく、何なのかもわからない。写真2枚だけを手がかりに、PCB上のすべてのチップを読み取り、正確なモデルを特定し、シリアル(UART)ヘッダーを見つけて接続し、工場出荷時のバックドアアカウントから侵入し、ロックされたベンダーメニューを脱出してroot Linuxシェルを入手し、そのボックスからすべてのパスワードを引き出した — クラックは1秒未満。

これらの脆弱性はいずれも私が発見したものではない。ベンダーがパッチを当てないと明言している、文書化済みのZyXELの問題だ。このリポジトリのテーマは、その方法をエンドツーエンドで、各ステップの判断根拠とともに示すことだ。


最初に: これは私自身のハードウェアです

  • 対象は私が所有するルーター基板です。
  • 侵入経路はPCB上の物理シリアルポート — リモート攻撃でも、第三者のネットワークでも、インターネットに晒されたものでもありません。
  • 作業台の上で、終始エアギャップ状態でした。
  • 目的は、ハードウェアハッキングの一連の流れをエンドツーエンドで実行し、再現可能な形で文書化することでした。

調査対象

シルクスクリーンの基板番号 45-402-000022 とバーコードから型番を特定し、TechInfoDepot、OpenWrtのハードウェア表、FCC ID I88P870HN51B と照合しました:

モデルZyXEL P-870HN-53b — VDSL2/ADSL2+ WiFiゲートウェイ、MitraStar製
年代約2013年(デートコードは2013年第21週を示す); ISP配布ユニット
SoCBroadcom BCM6368UKPBG — デュアルコアMIPS(BMIPS4350)、約400 MHz
RAMWinbond W9425G6JH-5 ×2 — 各256 Mbit DDR2 ×16 = 32ビットバス上で64 MB
FlashMacronix MX29LV640EBTI-70G — 8 MBパラレルNOR、TSOP-48
WiFiBroadcom BCM43222(802.11n; デュアルバンド対応シリコン、2.4 GHzのみ配線)
DSL AFEBroadcom BCM6302
ファームウェアLinux 2.6.30 + BusyBox v1.00、Broadcom CFEブートローダー(2012-06-11ビルド)

基板番号がすべてを解き明かす鍵となる理由: この種のODMゲートウェイはリファレンスデザインです。シルクスクリーンの部品番号が文書化された基板と一致すれば、先人が済ませた宿題 — 正確なフラッシュチップ、UARTの位置とピン配置、デフォルトアカウント — をそのまま利用できます。型番の特定は形式的な作業ではなく、手当たり次第のプロービングを標的型攻撃へと変えるものなのです。


実行の流れ

ステップ0 — スマホから写真を取り出す

まず小さなQoL改善から: スマホで基板を撮影し、その写真が直接マシンに転送されるようにする小さなLAN写真アップローダー(Python標準ライブラリのみ、依存ゼロ)を即席で作りました。良いセッションの半分は、こうした摩擦を取り除くことにあります。

ステップ1 — 基板を読み解く

高解像度の写真からチップを1つずつ読み取っていきました。パッケージの種類だけで、刻印を読む前から中身が見えてきます: 中央のBGAが頭脳、TSOP-48はほぼ間違いなくパラレルフラッシュ、同軸ケーブルの付いた小さなキャンは無線部です。SoCはRFシールド(EMI対策とヒートスプレッダーを兼ねる)の下に隠れていたため、キャンを外して下の刻印を読むと — Broadcom BCM6368 でした。

Annotated board map

基板のマッピング: (1) BCM6368 SoC、(2) DDR2 RAM、(3) BCM43222 WiFi、(4) DSLライントランス、(5) Ethernetパルストランス、(6) 内部USBヘッダー、(7)(8) 基板刻印、(9) J2コンソールヘッダー、(10) 未実装のJTAGフットプリント。

ステップ2 — 型番を特定する

シルクスクリーンの 45-402-000022 は文書化された基板と完全に一致し、SoC、フラッシュ、WiFi、64 MBの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 wiring card

ピン配置を教えてくれるWikiがない場合のUARTの見つけ方 — ここで示したいのは、これが単にレシピに従うだけの話ではないということです:

  • GND — 未通電の状態で、グランドプレーン/シールドへの導通(ビープ音)を確認。
  • VCC — 通電すると約3.3 Vで安定するレール。
  • TX — 約3.3 Vでハイレベルにアイドリング(UARTのマーク状態)し、デバイスが起動してログを吐き出し始めた瞬間に目に見えてディップ/ちらつきが発生。そのちらつきこそがコンソールの声です。
  • RX — 通常はおとなしい方: フローティングか弱いプルで、起動時の活動はなし。

ボーレートが分からない場合は? 115200 はBroadcom CFEのデフォルトですが、手探りなら一般的なレート(9600 → 115200)をスイープして文字化けがASCIIに変わるポイントを探すか、オシロスコープで最小ビット幅を測定して 1 / t を計算します。

ステップ4 — コンソールを確保する

USB-TTLアダプター(HW-597、PL2303) を、ジャンパーを3.3Vに設定して配線しました。これは重要です: BCM6368のUARTは3.3V TTLであり、RS-232(±12V)ではありません — 本物のシリアルポートや5Vアダプターを接続するとピンを焼きます。まずGNDを接続し、RX/TXはクロス接続、VCCはフローティングのままにして基板への逆給電を防ぎます。通電前にマルチメーターでGNDとVCCを確認し、その後:

screen /dev/ttyUSB0 115200

電源を入れると、CFEがカーネルへ引き継ぐ様子、BusyBox init が立ち上がる様子を観察し、ログインプロンプトに到達しました。

ステップ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シェル(#)に落ちました。

セミコロン1つで十分な理由: CLIハンドラーは system("ping " + ユーザー入力) と同等のことを行います。; は ping コマンドを閉じて2つ目のコマンド — sh — を開始し、これはコンソールのstdin/stdoutを引き継ぐため、対話型シェルが得られます。アカウントは既にuid 0でした。実シェルと私を隔てていたのはCLIだけであり、サニタイズされていない入力がその壁を打ち壊しました。隠しアカウントに認証済みCLIインジェクションを連鎖させる、まさにそのパターンがCVE-2024-40891として追跡されています。

ステップ7 — 戦利品を取得する

rootを手に入れたので、システムとフラッシュを調べました:

# cat /proc/version
Linux version 2.6.30 ... (Buildroot 2010.02) #1 Mon Jun 11 2012

# cat /proc/mtd
dev:    size   erasesize  name
mtd0: 004f5000 004f5000 "Physically mapped flash"     # 5,197,824 bytes = the whole firmware

/proc/mtd が教えてくれること: このフラッシュはパラレルNOR、メモリマップドです — CPUはこれをフラットなアドレス範囲(MIPS KSEG1の 0xB8000000 付近)として認識し、単一のMTDパーティションとして公開します。これはダンプにとって朗報です: NORはNANDで苦労するスペア領域/OOBバイトやECCの不整合なしにクリーンに読み出せます。/dev/mtdblock0 こそがファームウェアイメージです。

次はパスワードです。/etc/shadow は存在せず — ハッシュは古のDES cryptで /etc/passwd に直接置かれていました:

supervisor:SuO7vycdWI/rU:0:0:Administrator:/:/bin/sh
support:xoKf506EVkGKw:1:0:Technical Support:/:/bin/sh
user:QWOftoXez8Goo:2:0:Normal User:/:/bin/sh
admin:OJGXQ9dWyb9m2:100:0:Administrator:/:/bin/sh

これらを取り出し、John the Ripper(--format=descrypt)でオフラインクラックしました。6つすべてが1秒未満で破られました:

アカウントパスワードUIDGID権限
supervisorzyad123400root
supportsupport10rootグループ
useruser20rootグループ
adminadmin1000rootグループ
nobodyzyad12349999ftp

なぜこれらが瞬時に消え去るのか: DES crypt(3) はパスワードの最初の8文字と12ビットのソルトしか使わず、25ラウンドのDESを実行します。現代のCPUではビットスライスDESクラッカーが毎秒数千万の候補を処理するため、admin や support のような単純なファクトリーパスワードは作業としてすら認識されません。この方式は数十年前に時代遅れになっています; 出荷時ファームウェアにこれが残っていること自体が本当の発見です。

ルートレベルの権限を持つファクトリーアカウントが4つ、パスワードはどれも単純で、このモデルの全ユニットで同一です。


実際に存在する脆弱性

#発見事項CWE深刻度
F-1ルート権限を持つ隠しファクトリーアカウント(supervisor、support、user、admin)— ハードコードされた認証情報、全ユニットで同一。CWE-798高
F-2CLIのping診断における認証済みコマンドインジェクション → CLIの権限境界を飛び越えてrootシェルへ脱出。CWE-78高
F-3脆弱な認証情報の保存 — /etc/passwd 内のDES cryptハッシュ(shadowなし)→ 即座にオフラインクラック可能。CWE-916 / CWE-256中

連鎖全体を1行で表すと:

PCB photo → ID the SoC → find the UART (J2) → serial console
   → hidden account (F-1) → locked CLI → command injection (F-2)
   → root shell → dump + crack every credential (F-3)

「かっこいい0-dayだろ」— いや違う、そこがポイントだ

これらはいずれも私が発見したものではありません。物理アクセスによる、公知かつ現在も関連性のあるバグの再現です:

  • CVE-2025-0890 — レガシーなZyXEL DSL CPEにおける脆弱/隠し認証情報、明確に supervisor:zyad1234 を含む。→ F-1
  • CVE-2024-40891 — 認証済みCLIコマンドインジェクション、コマンドが無検証のままシェルに渡される; CVE-2025-0890と連鎖させて悪用。→ F-2
  • より古いZyXELのpingインジェクションの系譜: CVE-2015-6018、CVE-2017-6884。→ F-2

これらはZyXELが修正しないと明言したEOL機器を標的としており、実環境での悪用も確認されています — だからこそ、その仕組みを実際に手を動かして理解することが重要なのです。ここでの価値は新しいバグではなく、シリコンからシェルに至る完全なワークフローを実行し、文書化したことにあります。


実際の修正方法

ツールをダウンロード