
Thinkware U3000ドライブレコーダーのローカルWiFi制御プロトコル用Pythonクライアント。公式Androidアプリからリバースエンジニアリングされたもの。CVE-2026-101053、CVE-2026-101054、CVE-2026-101055のPoCツール群。
Thinkware U3000 ドライブレコーダーのローカル WiFi 制御プロトコル用 Python クライアント。公式 Android アプリからリバースエンジニアリングし、実機で確認済み。公開仕様(存在しない)に基づくものではありません。
このプロジェクトには 2 つの目的があります。ご自身のドライブレコーダーから映像を吸い出すための実用的なライブラリと、完了した CVE 開示のための補足資料です(下記のセキュリティを参照)。
docs/protocol-reference.md を参照してください。set_wifi_mode、connect_to_ap など)ため、confirm=True でゲートされています。これらのいずれかに confirm=True を渡す前に docstring を読んでください。PyPI リリースはありません。GitHub から直接インストールします:
pip install "u3000py[cli] @ git+https://github.com/turretsec/u3000py.git"
または CLI なしで、ライブラリのみ:
pip install git+https://github.com/turretsec/u3000py.git
またはタグ付きリリースに固定:
pip install git+https://github.com/turretsec/[email protected]
from u3000py import ThinkLinkClient, VideoCategory
with ThinkLinkClient("192.168.1.100") as cam: # your camera's actual IP
print(cam.get_device_info())
print(cam.get_system_status())
files = cam.list_files(VideoCategory.CONTINUOUS)
latest = files[-1]
def show_progress(received, total):
print(f"\r{received / total:.0%}", end="")
cam.download(latest.path, dest="latest_clip.mp4", progress=show_progress)
または、[cli] エクストラ付きでインストールした後、コマンドラインから:
u3000py --host 192.168.1.100 info device
u3000py --host 192.168.1.100 files download --latest --category cont_rec
--host は毎回の呼び出しで必須です。上記のようにフラグとして指定するか、繰り返し入力したくない場合は U3000PY_HOST 環境変数経由で指定します。
どの結果が実機テストによるものか、どの結果が検証待ちの推測なのかを含む、メソッドごとの完全な詳細は、プロトコルリファレンスドキュメントにあります。
PUT_FILE: カメラのファイルシステム上の任意の絶対パスへの、認証不要の任意ファイル書き込みを許可することが確認されています。これは 3 件の CVE 調査結果のうちの 1 つです。公開ライブラリに汎用的な write-anywhere メソッドを同梱することは、すぐに使える攻撃ツールを配布することになります。完全な詳細は disclosure-thinkware-u3000 にあります。pip install -e ".[dev]"
pytest -v # unit tests, no camera needed
pytest -m hardware --host 192.168.1.100 # real-camera tests, opt-in only
CLI 自体のためのスタンドアロンのスモークテストスクリプトは scripts/smoke_test_cli.py にあります。これは pytest スイートの一部ではありません(実際にインストールされた u3000py コマンドを、実際のカメラに対してシェル経由で実行します)。変更後の健全性チェック用です。
docs/protocol-reference.md: 完全なリバースエンジニアリング済みプロトコル。ワイヤフォーマット、確認済みのすべてのコマンド、まだ未検証のもの、そして既知の未解決の謎(いくつかの挙動は、プロトコル自体の慣習から予測される動作と本当に一致しません)。このプロトコルには認証がありません。この調査から 3 件の調査結果が得られ、別リポジトリで完全に文書化・開示されています: disclosure-thinkware-u3000。
PUT_FILE による認証不要の任意ファイル書き込み(CVE-2026-101053(VulDB #410915))。カメラの実際の /tmp ディレクトリへの書き込みによって確認済み。このライブラリでは意図的に公開していません(上記の意図的に含まれていないものを参照)。LS/GET_FILE による認証不要の任意ファイル読み取り(CVE-2026-101054(VulDB #410916))。パス制限は一切ありません。このライブラリの download() メソッドはこのプリミティブを直接実証します。例えば cam.download("/tmp/wpa_supplicant.conf") はデバイスのライブ WiFi 設定ファイルを読み取ります。GET_STATUS "wifi_info" による平文 WiFi 認証情報の漏洩(CVE-2026-101055(VulDB #410917))。このライブラリの get_wifi_info() はこのプリミティブを直接実証します(出力を印刷する際、パスワードはデフォルトで伏せられます。WifiInfo の repr() を参照)。Thinkware には 2026-06-21 に通知しました。30 日間の開示期間は 2026-07-21 に、技術的でない受領確認のみで修正確認はなく終了しました。3 件の調査結果はすべて、現在の製品ファームウェアで再現可能なままです。別の Thinkware モデル(F800 Pro)に関する geo-chen による関連する先行研究が、文脈のために開示リポジトリで参照されています。
MIT、LICENSE を参照。