
ثلاث ثغرات غير مُصادَق عليها في بروتوكول التحكم عبر WiFi المحلي لكاميرا القيادة Thinkware U3000: كتابة ملفات عشوائية، وقراءة ملفات عشوائية، والكشف عن بيانات اعتماد WiFi بنص صريح. CVE-2026-101053، CVE-2026-101054، CVE-2026-101055.
ثلاث ثغرات أمنية في بروتوكول التحكم عبر شبكة WiFi المحلية لكاميرا Thinkware U3000 Dashcam، تم اكتشافها من خلال الهندسة العكسية لتطبيق Android الرسمي وتأكيدها على أجهزة حقيقية. تتطلب الثغرات الثلاث فقط الوصول إلى الشبكة المحلية: لا حاجة للوصول الفيزيائي إلى الجهاز، ولا مصادقة مسبقة، ولا تعاون من مالك الجهاز.
تم الإفصاح لشركة Thinkware في 2026-06-21. انتهت نافذة الإفصاح البالغة 30 يومًا دون سوى إقرار غير تقني باستلام التقرير.
كاميرات لوحة القيادة فئة غير معتادة لهذا النوع من التعرض. فهي تسجل باستمرار تحركات المركبة، وكثيرًا ما تنتقل بين أيدٍ مختلفة عبر الإيجار وإدارة الأساطيل وبيع السيارات المستعملة. من يملك حاليًا الوصول إلى المركبة لا يتحكم بالضرورة في الشبكة التي تم إعدادها عليها. وبالاقتران مع قدرة الكتابة التعسفية للملفات وانعدام المصادقة تمامًا في بروتوكول التحكم، فإن الأمر يتجاوز مجرد مخاوف الخصوصية. إنه أيضًا مصدر قلق يتعلق بالتلاعب: يمكن تعديل أو استبدال أي ملف على الجهاز، وليس الفيديو فقط، دون علم المالك.
كما أن هذه ليست المرة الأولى التي تظهر فيها ثغرة بهذا الشكل في كاميرا لوحة قيادة من Thinkware. كان الباحث المستقل geo-chen قد أفصح سابقًا عن عدة مشكلات في طراز F800 Pro ذي الصلة؛ انظر geo-chen/Thinkware-Dashcam. تلك المشكلات كانت تتطلب عمومًا وصولًا فيزيائيًا أو وصولًا محليًا إلى نظام الملفات لاستغلالها. أما النتائج أدناه فلا تتطلب أيًا منهما: الوصول إلى الشبكة وحده كافٍ، ونتيجة كتابة الملفات تمثل قدرة أقوى من أي شيء في تلك المجموعة السابقة.
ملاحظة حول الطراز المتأثر: تم تأكيد جميع النتائج أدناه على طراز Thinkware U3000 الأساسي. تبيع Thinkware أيضًا طرازًا منفصلًا هو "U3000 Pro"؛ لم يتم اختبار ما إذا كان يشترك في نفس تنفيذ البروتوكول.
CVE: CVE-2026-101053 (VulDB #410915)
التقرير الكامل:
findings/01-arbitrary-file-write.md
المنتج: Thinkware U3000 Dashcam
المكوّن المتأثر: بروتوكول التحكم 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)
التقرير الكامل:
findings/02-arbitrary-file-read.md
المنتج: Thinkware U3000 Dashcam
المكوّن المتأثر: بروتوكول التحكم TCP (أمر المنفذ 7878 / بيانات المنفذ 8787)، دون مصادقة
ناقل الهجوم: يمكن لأي جهاز على نفس الشبكة المحلية سرد وقراءة أي مسار مطلق على نظام ملفات الجهاز، وليس الفيديو المسجل فقط.
تقوم أوامر LS وGET_FILE في نفس البروتوكول بسرد وقراءة أي مسار مطلق دون أي قيود. تم التأكيد بقراءة ملف wpa_supplicant.conf الحي الخاص بالجهاز مباشرة، والذي يحتوي على SSID شبكة WiFi الحقيقي وكلمة المرور بنص صريح. هذا هو الجانب المقابل للقراءة من النتيجة 1: نفس السبب الجذري، في الاتجاه المعاكس، ومسار مختلف ميكانيكيًا لنفس بيانات الاعتماد المكشوفة في النتيجة 3.
START_SESSION -> SET_CLNT_INFO -> APP_CONNECT.LS على /tmp وجود wpa_supplicant.conf، إلى جانب ملفات نظام أخرى (hidraw0.sh، aws.dat، resolv.conf، إلخ).GET_FILE مع param: "/tmp/wpa_supplicant.conf" حجم الملف، ثم يُبث المحتوى الكامل عبر مقبس البيانات تمامًا كما يفعل مع ملف فيديو.ssid=/psk= مطابقة للشبكة المُعدّة فعليًا في الكاميرا.CVE: CVE-2026-101055 (VulDB #410917)
التقرير الكامل:
findings/03-wifi-credential-disclosure.md
المنتج: Thinkware U3000 Dashcam
المكوّن المتأثر: بروتوكول التحكم TCP (المنفذ 7878)، دون مصادقة
ناقل الهجوم: يمكن لأي جهاز على نفس الشبكة المحلية استرداد كلمة مرور WiFi الخاصة بالكاميرا مباشرة، دون مصادقة ودون الحاجة إلى وصول مسبق.
يعيد استعلام حالة مخصص، GET_STATUS "wifi_info"، SSID شبكة WiFi الخاصة بالجهاز وكلمة المرور بنص صريح مباشرة. هذه آلية مختلفة عن النتيجة 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، ونشر إدخالات VulDB |
تماشيًا مع ممارسات الإفصاح المسؤول، توثّق هذا المستودع وجود وتأثير كل قدرة دون تقديم أداة استغلال جاهزة للاستخدام:
PUT_FILE. خطوات إعادة الإنتاج أعلاه كافية لتأكيد النتيجة؛ فالأداة المعمّمة الجاهزة للتشغيل للكتابة في أي مكان لن تقدّم قيمة إضافية للتحقق المشروع بينما تقدّم قيمة حقيقية لإساءة الاستخدام.PUT_FILE، أو حول سلاسل استغلال إضافية.تم تأكيد هذه النتائج باستخدام u3000py، وهو عميل Python مفتوح المصدر لبروتوكول التحكم في U3000، بُني كجزء من هذا البحث.
ThinkLinkClient.download() في u3000py هي إعادة إنتاج مباشرة وقابلة للتشغيل للنتيجة 2: cam.download("/tmp/wpa_supplicant.conf") يقرأ إعدادات WiFi الحية للجهاز دون أي قيود.ThinkLinkClient.get_wifi_info() هي إعادة إنتاج مباشرة وقابلة للتشغيل للنتيجة 3 (كلمة المرور الحقيقية محجوبة افتراضيًا في أي مخرجات مطبوعة؛ لكن القيمة الحقيقية لا تزال متاحة على الكائن المُعاد، بما يطابق كيفية عمل النتيجة نفسها).u3000py عن قصد عن قدرة PUT_FILE عامة الأغراض (النتيجة 1)، للأسباب المذكورة في تقرير تلك النتيجة.اكتشفها وأفصح عنها Ryan Moore (turretsec).