
Thinkware U3000 대시캠의 로컬 WiFi 제어 프로토콜을 위한 Python 클라이언트로, 공식 Android 앱에서 리버스 엔지니어링되었습니다. CVE-2026-101053, CVE-2026-101054, CVE-2026-101055에 대한 PoC 도구입니다.
Thinkware U3000 대시캠의 로컬 WiFi 제어 프로토콜을 위한 Python 클라이언트로, 공식 Android 앱에서 리버스 엔지니어링했으며 실제 하드웨어에서 검증되었습니다. 공개된 명세(존재하지 않음)를 기반으로 한 것이 아닙니다.
이 프로젝트는 두 가지 목적을 가지고 있습니다. 자신의 대시캠에서 영상을 가져오기 위한 실용적인 라이브러리, 그리고 완료된 CVE 공개를 위한 지원 자료입니다(아래 Security 참조).
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: 카메라 파일 시스템의 모든 절대 경로에 인증 없이 임의 파일 쓰기를 허용하는 것으로 확인되었습니다. 이는 세 가지 CVE 발견 중 하나입니다. 공개 라이브러리에 범용 쓰기 메서드를 제공하는 것은 바로 사용 가능한 공격 도구를 건네주는 것과 같습니다. 자세한 내용은 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: 전체 리버스 엔지니어링된 프로토콜; 전송 형식, 모든 확인된 명령, 아직 검증되지 않은 것, 그리고 알려진 미해결 미스터리(프로토콜 자체의 관례가 예측하는 방식대로 동작하지 않는 몇 가지 사항이 실제로 있습니다).이 프로토콜에는 인증이 없습니다. 이 연구에서 세 가지 발견이 나왔으며, 별도 저장소에 완전히 문서화되고 공개되었습니다: 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에 종료되었으며, 비기술적인 수신 확인만 있었고 수정 확인은 없었습니다. 세 가지 발견 모두 현재 프로덕션 펌웨어에서 여전히 재현 가능합니다. 다른 Thinkware 모델(F800 Pro)에 대한 geo-chen의 관련 선행 연구가 맥락을 위해 공개 저장소에 참조되어 있습니다.
MIT, LICENSE 참조.