
إثبات مفهوم لرفع الامتيازات من مستخدم TeamViewer إلى نواة النظام. CVE-2024-7479 وCVE-2024-7481. ZDI-24-1289 وZDI-24-1290. TV-2024-1006.
يحتوي هذا المستودع على إثبات المفهوم لاستغلال ثغرة في TeamViewer تتيح لمستخدم غير مميز تحميل برنامج تشغيل نواة تعسفي إلى النظام. أود أن أشكر Zero Day Initiative على التنسيق معهم للإبلاغ عن الثغرة والإفصاح المسؤول عنها.

يمكن العثور على تفاصيل البحث الذي أدى إلى هذه الثغرات في سلسلة مدونة من ثلاثة أجزاء على مدونتي. تغطي هذه الأجزاء الثغرات بمزيد من التفاصيل وتُظهر أيضًا الأماكن التي فشلت فيها أثناء العملية. الجزء الثالث هو الممتع :P.
يمكن العثور على فيديوهات الاستغلال هنا:
بعد التمكن من انتحال (عبر مجرد مصادقة بسيطة كما هو موضح في المدونة) هوية عميل TeamViewer صالح عند الاتصال بـ IPC لخدمة SYSTEM، أصبح من الممكن تشغيل تثبيت برنامج تشغيل تعسفي. لم تكن TeamViewer تتحقق من توقيع برنامج التشغيل الجاري تثبيته.
وبالتالي، كان تصعيد الامتيازات من USER إلى KERNEL ممكنًا بفضل TeamViewer.
من أفضل الأساليب استخدام التقنية المعروفة BYOD، Bring Your Own Vulnerable Driver لتحميل برنامج تشغيل موقّع صالح إلى نواة Windows ثم استغلاله لتنفيذ إجراءات مميزة من مستوى المستخدم، مثل تغيير token لأي عملية إلى token مميز.
عند تثبيت TeamViewer على النظام، فإنه ينشئ خدمة تعمل بصلاحيات SYSTEM، وهي TeamViewer_service.exe
هذه الخدمة هي مساعد للعميل في بعض المهام. وبالتالي، لا يعمل العميل بصلاحيات مرتفعة وتُفوض بعض المهام إلى الخدمة.
يتم تنفيذ الاتصال مع الخدمة (IPC) عبر المقابس (sockets) (باستخدام Overlapped I/O و IoCompletionPort). بشكل افتراضي، تستمع خدمات TeamViewer SYSTEM على المنفذ 5939/tcp على localhost.
لا تقوم TeamViewer بتصفية المعامل الذي يرسله العميل لطلب تثبيت برنامج التشغيل أو التحقق من التوقيع، إلخ.
الفكرة إذن هي: سننتحل هوية عميل TV ونطلب تثبيت VPN Driver لكن مع الإشارة إلى INF آخر. أعدت استخدام نفس ملف INF الأصلي الخاص بـ TeamViewer لكن في مسار آخر (غير مميز) مع إعادة تسمية برنامج التشغيل "السيئ" إلى teamviewervpn.sys، حيث أن هذا هو اسم برنامج التشغيل الذي يستهدفه ملف INF الأصلي.
يتجاوز هذا أيضًا خيار TeamViewer Changes require administrative rights on this computer.
يكون هذا الفحص فعّالًا فقط عبر الواجهة الرسومية (GUI)، حيث يكون TeamViewer options معطلاً عند النقر على الزر بمستخدم غير مميز. ولكن من الممكن الاتصال بالمقبس وتنفيذ تحميل برنامج التشغيل التعسفي.
يعتمد الاستغلال على الإصدار بسبب رسالة IPC التي يحدد فيها العميل معرّف العملية (PID) الخاص به وبيانات أخرى من بينها الإصدار. يجب أن يتطابق إصدار العميل مع إصدار خدمة SYSTEM. يجب تعديل الاستغلال (الأسطر 140 إلى 143) في Main.cpp ليتوافق مع إصدار TeamViewer_service.exe المستهدف.
إذًا، ببساطة، ننتحل هوية عميل TeamViewer نتصل به بخدمة SYSTEM ونطلب تثبيت برنامج تشغيل تعسفي. تقوم خدمة TeamViewer بتحميله بلطف إلى النواة.
لدى TeamViewer رسالة IPC أخرى مشابهة جدًا للرسالة الأولى التي اكتشفتها أولًا (تُرسل عند النقر على Install VPN Driver). هذه الرسالة الأخرى تثبّت Printer Driver.
إذن، في جوهر الأمر، CVE-2024-7479 و CVE-2024-7481 هما نفس الثغرة لكن TeamViewer ارتكبت الخطأ نفسه مرتين. الرسالتان، رغم اختلافهما، متشابهتان جدًا. لديهما Method Id مختلف.
النتيجة هي نفسها، يمكن تحميل برنامج تشغيل تعسفي.