Thinkware U3000 行车记录仪本地 WiFi 控制协议中存在三个未认证漏洞:任意文件写入、任意文件读取以及明文 WiFi 凭据泄露。CVE-2026-101053、CVE-2026-101054、CVE-2026-101055。
Thinkware U3000 行车记录仪本地 WiFi 控制协议中存在三个漏洞,通过逆向工程官方 Android 应用发现,并在真实硬件上得到确认。这三个漏洞都只需要本地网络访问权限:无需物理接触设备、无需事先认证,也无需设备所有者配合。
已于 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)以及至少一个 shell 脚本(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。GET_STATUS,使用 param: "wifi_info"。{"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(当前生产版本);三个发现均重新确认,行为无变化 |
| 2026-06-21 | 通过电子邮件向 [email protected] 通知厂商 |
| 2026-06-22(约) | Thinkware 客户支持确认收到,确认报告已转发至其开发团队。未提供技术回应、时间表或修复确认。 |
| 2026-07-21 | 30 天披露窗口结束。未收到厂商进一步联系。 |
| 2026-08-13 | 公开披露 |
| 2026-9-27 | 分配 CVE ID,发布 VulDB 条目 |
与负责任的披露实践一致,本仓库记录了每个原语的存在与影响,但不提供可直接使用的利用工具:
PUT_FILE 概念验证脚本。上述复现步骤足以确认该发现;一个参数化的、可直接运行的任意写入工具对合法验证不会提供额外价值,却会为滥用提供实际价值。PUT_FILE 放置的文件是否可被执行,也未调查进一步的利用链。这些发现是使用 u3000py 确认的,这是一个用于 U3000 控制协议的开源 Python 客户端,作为本研究的一部分构建。
u3000py 的 ThinkLinkClient.download() 方法是发现 2 的直接、可运行复现:cam.download("/tmp/wpa_supplicant.conf") 无限制地读取设备的实时 WiFi 配置。ThinkLinkClient.get_wifi_info() 是发现 3 的直接、可运行复现(真实密码在任何打印输出中默认被脱敏;真实值仍可在返回对象上访问,与该发现本身的工作方式一致)。u3000py 有意不暴露通用目的的 PUT_FILE 能力(发现 1),原因见该发现的报告中所述。由 Ryan Moore(turretsec)发现并披露。