
Thinkware U3000 ドライブレコーダーのローカル WiFi 制御プロトコルにおける 3 件の未認証脆弱性: 任意ファイル書き込み、任意ファイル読み取り、および平文 WiFi 認証情報の漏洩。CVE-2026-101053、CVE-2026-101054、CVE-2026-101055。
Thinkware U3000 ドライブレコーダーのローカル WiFi 制御プロトコルにおける3件の脆弱性。公式 Android アプリのリバースエンジニアリングによって発見され、実機で確認された。3件はいずれもローカルネットワークへのアクセスのみを必要とする。デバイスへの物理的アクセス、事前認証、デバイス所有者の協力はいずれも不要である。
2026-06-21 に Thinkware へ開示済み。30日間の開示期間は、技術的な内容を含まない受領確認のみで終了した。
ドライブレコーダーは、この種の露出にとって異例のカテゴリである。これらは車両の動きを継続的に記録し、レンタル、フリート管理、中古車販売を通じて頻繁に持ち主が変わる。現在その車両にアクセスできる者が、その車両が設定されているネットワークを必ずしも管理しているわけではない。任意ファイル書き込みプリミティブと制御プロトコル上の認証ゼロが組み合わさることで、これはプライバシーの懸念にとどまらない。改ざんの懸念でもある。動画だけでなく、デバイス上のあらゆるファイルが、所有者に知られることなく改変または置換され得るのである。
これはまた、この形の脆弱性が Thinkware のドライブレコーダーに現れた最初の事例でもない。独立研究者 geo-chen は、関連モデルである F800 Pro における複数の問題を以前に開示している。詳細は geo-chen/Thinkware-Dashcam を参照。それらは一般に、悪用に物理的アクセスまたはローカルファイルシステムへのアクセスを必要とした。以下の発見はいずれも不要である。ネットワークアクセスだけで十分であり、ファイル書き込みの発見は、その先行事例のいずれよりも強力な能力である。
影響を受けるモデルに関する注記: 以下の発見はすべて、ベースモデルの Thinkware U3000 に対して確認されたものである。Thinkware は別途「U3000 Pro」という派生モデルも販売しているが、同一のプロトコル実装を共有しているかどうかは検証されていない。
CVE: CVE-2026-101053 (VulDB #410915)
製品: Thinkware U3000 ドライブレコーダー
影響を受けるコンポーネント: TCP 制御プロトコル (ポート 7878 コマンド / ポート 8787 データ)、認証なし
攻撃ベクター: 同一ローカルネットワーク上の任意のデバイスが、攻撃者制御のコンテンツをデバイスのファイルシステム上の任意の絶対パスに書き込める。
デバイスの制御プロトコルは PUT_FILE コマンドを公開しており、これが攻撃者提供のバイト列を攻撃者提供の絶対パスに書き込む。パス検証やサンドボックス化は一切ない。デバイスの /tmp ディレクトリ (デバイス自身の WiFi 設定 (wpa_supplicant.conf) と少なくとも1つのシェルスクリプト (hidraw0.sh) を保持するディレクトリと同じ) に直接ファイルを書き込み、それをバイト単位で読み戻して正確な配置を確認することで検証された。

START_SESSION -> SET_CLNT_INFO -> APP_CONNECT。PUT_FILE を送信し、param に公式アプリが正当に書き込むであろう場所の外側のパスを設定する。{"rval": 0, "msg_id": 1286} を返し、その後、完了を確認する非同期の NOTIFICATION (msg_id 7) をプッシュする。LS により、システムファイルと並んで、要求された正確な名前でファイルが存在することが確認される。GET_FILE でコンテンツを読み戻し、送信した内容とバイト単位で比較する。CVE: CVE-2026-101054 (VulDB #410916)
製品: Thinkware U3000 ドライブレコーダー
影響を受けるコンポーネント: TCP 制御プロトコル (ポート 7878 コマンド / ポート 8787 データ)、認証なし
攻撃ベクター: 同一ローカルネットワーク上の任意のデバイスが、記録された動画だけでなく、デバイスのファイルシステム上の任意の絶対パスを一覧表示および読み取りできる。
同じプロトコルの LS および GET_FILE コマンドは、任意の絶対パスを制限なく列挙および読み取る。デバイスのライブな wpa_supplicant.conf を直接読み取ることで確認された。これには実際の WiFi SSID と平文パスワードが含まれている。これは発見 1 の読み取り側の鏡像である。同じ根本原因、逆方向であり、発見 3 で露出するのと同じ認証情報への、機構的に異なる経路である。
START_SESSION -> SET_CLNT_INFO -> APP_CONNECT。/tmp に対する LS により、wpa_supplicant.conf が存在することが確認される。他のシステムファイル (hidraw0.sh、aws.dat、resolv.conf など) と並んでいる。param: "/tmp/wpa_supplicant.conf" を指定した GET_FILE がファイルのサイズを返し、その後、完全なコンテンツが動画ファイルの場合とまったく同様にデータソケット経由でストリーミングされる。ssid=/psk= 行が含まれている。CVE: CVE-2026-101055 (VulDB #410917)
製品: Thinkware U3000 ドライブレコーダー
影響を受けるコンポーネント: TCP 制御プロトコル (ポート 7878)、認証なし
攻撃ベクター: 同一ローカルネットワーク上の任意のデバイスが、認証なし、事前アクセスなしで、カメラの WiFi パスワードを直接取得できる。
専用のステータスクエリ GET_STATUS "wifi_info" は、デバイスの WiFi SSID と平文パスワードを直接返す。これは発見 2 とは異なる機構であり、ファイルシステムへのアクセスは一切不要で、通常のプロトコルステータス読み取りだけで済む。
START_SESSION -> SET_CLNT_INFO -> APP_CONNECT。param: "wifi_info" を指定して GET_STATUS を送信する。{"rval": 0, "msg_id": 2050, "type": "wifi_info", "param": [{"ssid": "<real SSID>"}, {"password": "<real plaintext password>"}, {"mac": "<real MAC>"}]}。| 日付 | 出来事 |
|---|---|
| 2026-06-19 | ファームウェア v1.02.00 に対して発見を確認 |
| 2026-06-21 | ファームウェアを v1.02.04 (現行の製品リリース) にアップグレード。3件の発見をすべて再確認、挙動に変化なし |
| 2026-06-21 | [email protected] へのメールでベンダーに通知 |
| 2026-06-22 (頃) | Thinkware カスタマーサポートが受領を確認、報告が開発チームに転送されたことを確認。技術的な回答、タイムライン、修正の確認は提供されなかった。 |
| 2026-07-21 | 30日間の開示期間が終了。ベンダーからのさらなる連絡はなし。 |
| 2026-08-13 | 公開開示 |
| 2026-9-27 | CVE ID が割り当てられ、VulDB エントリが公開 |
責任ある開示の慣行に従い、本リポジトリは各プリミティブの存在と影響を文書化するものであり、すぐに使える悪用ツールは提供しない。
PUT_FILE の概念実証スクリプトは公開していない。上記の再現手順は発見を確認するのに十分である。パラメータ化された、すぐ実行できる write-anywhere ツールは、正当な検証に付加価値を与えず、悪用に実際の価値をもたらすだけである。PUT_FILE で配置されたファイルが実行可能かどうか、またさらなる悪用チェーンについては、一切調査していない。これらの発見は、u3000py を用いて確認された。これは U3000 の制御プロトコル用のオープンソース Python クライアントであり、本研究の一環として構築された。
u3000py の ThinkLinkClient.download() メソッドは、発見 2 の直接実行可能な再現である: cam.download("/tmp/wpa_supplicant.conf") は、デバイスのライブな WiFi 設定を制限なく読み取る。ThinkLinkClient.get_wifi_info() は、発見 3 の直接実行可能な再現である (実際のパスワードは、印刷される出力ではデフォルトで伏せられる。実際の値は返されたオブジェクト上では依然としてアクセス可能であり、発見自体の動作と一致する)。u3000py は、発見 1 の解説に記した理由により、汎用の PUT_FILE 機能 (発見 1) を意図的に公開していない。Ryan Moore (turretsec) によって発見および開示された。