
# توثيق تقني وإثبات مفهوم لـ CVE-2026-8069، تصعيد صلاحيات محلي في خدمات Acer NitroSense وPredatorSense، يستغل أنبوبًا مسمّى لتنفيذ كود عشوائي بصلاحيات SYSTEM.
قامت Acer NitroSense وPredatorSense 3.x بتثبيت خدمة Windows تسمى PSSvc التي كشفت بروتوكول named-pipe مخصص للمستخدمين المحليين. قبل أحد أوامر البروتوكول مسارًا قابلًا للتنفيذ يتحكم فيه المتصل، ونسخ رمز winlogon.exe، وشغّل ذلك الملف القابل للتنفيذ كـ NT AUTHORITY\SYSTEM.
كان تقييد المسار في الخدمة الضعيفة اختبارًا لجزء نصي فرعي. المسار الذي يبدأ داخل دليل الخدمة ثم يستخدم مكونات ..\ اجتاز الاختبار لكنه حُلّ في مكان آخر. وبالاقتران مع التحكم في الوصول المتساهل للـ pipe وغياب تفويض المتصل، سمح هذا لمستخدم محلي عادي بالحصول على عملية SYSTEM.
خصصت Acer CVE-2026-8069، ونشرت إصدارات مُصلحة، ونسبت الفضل إلى Artem Domarev من جامعة Hradec Králové في نشرتها الأمنية.
تركز هذه المقالة على مسار إنشاء العملية/LPE. تصف نشرة Acer أيضًا حذف الملفات التعسفي، والذي كان خارج نطاق هذا التحقق.
تأثر اختيار اتجاه البحث أيضًا بتحليل عام لبرامج OEM نشره Leon Jacobs من SensePost. وثّق ذلك العمل ثغرات في ASUS DriverHub وMSI Center وAcer Control Centre وRazer Synapse 4 (Jacobs, 2025). عزز ذلك فكرة أن أدوات الأجهزة المقدمة من البائعين يمكن أن تكشف سطح هجوم ذا معنى وغير مستكشَف بما يكفي. بدلاً من إعادة زيارة Acer Control Centre، وسّعت التحقيق إلى عائلة منتجات Acer مختلفة: NitroSense وPredatorSense.
| العنصر | النتيجة |
|---|---|
| CVE | CVE-2026-8069 |
| المكوّن الضعيف المُختبَر | PSSvc.exe 3.1.3052.0، موقّع من Acer Incorporated |
| هوية الخدمة | LocalSystem |
| نقطة نهاية IPC | \\.\pipe\predatorsense_service_namedpipe |
| الأمر الضعيف | 0x0007 |
| وصول المهاجم المطلوب | مستخدم محلي موثّق قادر على تشغيل برنامج |
| تفاعل المستخدم | لا شيء |
| النتيجة | تشغيل ملف قابل للتنفيذ تعسفي كـ NT AUTHORITY\SYSTEM |
| NVD CVSS v3.1 | 7.8 عالية — AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
| الإصدارات المُصلحة | PredatorSense 3.00.3198؛ NitroSense 3.01.3056 |
سلسلة الاستغلال قصيرة:
مستخدم محلي موثّق
│
▼
PSSvc named pipe متساهل
│ أمر مخصص 0x0007
▼
فحص مسار جزئي نصي فقط
│ service-dir\..\..\..\Windows\System32\cmd.exe
▼
نسخ رمز winlogon.exe للجلسة النشطة
│
▼
CreateProcessAsUserW → NT AUTHORITY\SYSTEM
هناك تباين في الصياغة العامة. تقول صفحة Acer إن إصدارات NitroSense "قبل 3.01.3052" متأثرة، ومع ذلك فإن PSSvc.exe الموقّع من البائع بإصدار 3.1.3052.0 المُختبَر لهذه المقالة ضعيف بشكل مثبت. تحدد الصفحة نفسها NitroSense 3.01.3056 كإصدار مُصلَح. يمتد نطاق قابلية التطبيق في NVD أيضًا حتى 3.01.3056 دون تضمينه.
بالنسبة لـ PredatorSense، تتوقف جملة الإصدارات المتأثرة من Acer قبل 3.00.3196، بينما الإصدار المُصلَح المدرج هو 3.00.3198 ويستخدم NVD الأخير كحد أعلى.
لذا فإن القاعدة التشغيلية المتحفظة بسيطة: لا تستخدم جملة "المتأثرة" الغامضة كفحص للتصحيح. قم بالترقية إلى الإصدارات المُصلحة على الأقل التي تسميها Acer — PredatorSense 3.00.3198 أو NitroSense 3.01.3056 — أو حزمة أحدث متوافقة مع الطراز.
أُعيد إنتاج المشكلة باستخدام حزمة NitroSense الأصلية.
| القطعة الأثرية | SHA-256 |
|---|---|
NitroSense_V3.01.3052_MSFT_SIGNED_20230420.zip | 947FB7C62665875450AFA9C9E7919D2B061ED8197C11B28D64781F121B30C157 |
NitroSense.msi | 6F9D405B6D2ADF2992C4E071453AD2C919A6DD38A89A31EF96EAFE81C50A745C |
PSSvc.exe المثبّت 3.1.3052.0 | 3BA836B6A5D95B55708E771B74F49098F58B096EF1F63C5CCAE355811E193A40 |
| PoC المستخدم للتحقق | 31BC81140BAB64A8B0CB70ACC1C2CF3CA84A7B00015E5610AC075DC50DCB0163 |
تم التحقق من توقيع Authenticode لـ PSSvc.exe بنجاح وارتبط بـ Acer Incorporated. ثبّت MSI خدمة PSSvc كخدمة بدء عند الطلب بعملية خاصة تعمل كـ LocalSystem.
تثبّت حزمة NitroSense:
SERVICE_NAME: PSSvc
DISPLAY_NAME: Predator Service
TYPE: WIN32_OWN_PROCESS
START_TYPE: DEMAND_START
ACCOUNT: LocalSystem
خدمة SYSTEM ليست ضعيفة تلقائيًا. السؤال المهم هو ما إذا كانت عملية ذات امتياز أقل يمكنها الوصول إلى وظائف صُممت بافتراض أن المتصل بها موثوق.
كشف تحليل السلاسل فورًا عن نقطة نهاية IPC:
\\.\pipe\predatorsense_service_namedpipe
عند 0x140014AD0، تنشئ الخدمة الـ pipe وتمرر واصف أمان صريحًا إلى CreateNamedPipeW:
D:(A;OICI;GA;;;BG)(D;OICI;GA;;;AN)(A;OICI;GRGWGX;;;AU)(A;OICI;GA;;;BA)
يجدر التوضيح صراحةً: البنية الضعيفة لا تمرر واصفًا NULL. إنها تنشئ DACL متساهلًا.
| اختصار SID | المبدأ | الصلاحية الفعلية في SDDL |
|---|---|---|
BG | الضيوف المدمجون | وصول عام كامل |
AN | مجهول | وصول عام كامل مرفوض |
AU | المستخدمون الموثّقون | قراءة وكتابة وتنفيذ عامة |
BA | المسؤولون المدمجون | وصول عام كامل |
يكفي ACE الخاص بـ AU لمستخدم موثّق عادي لفتح الـ pipe للقراءة والكتابة. لا يقوم الخادم بعد ذلك بانتحال شخصية العميل واتخاذ قرار تفويض قبل توزيع الأوامر المميزة.
يقرأ مؤشر ترابط العميل عند 0x14000ABB0 الرسائل في مخزن مؤقت بحجم 512 بايت. يحلل أول ثلاثة بايتات كرقم أمر 16-بت وعدد وسائط 8-بت. كل وسيطة مسبوقة بطولها:
الإزاحة الحجم المعنى
0x00 2 معرف الأمر، little-endian
0x02 1 عدد الوسائط
0x03 4 طول الوسيطة 0
0x07 n بايتات الوسيطة 0
... DWORD طول مكرر + قيمة
وسائط السلاسل هي UTF-16LE. وسائط الأعداد الصحيحة هي DWORDs بنمط little-endian. يقبل الموزع معرفات الأوامر الأقل من 0x23 ويستخدمها كمؤشرات إلى جدول دوال من 35 إدخالًا عند 0x140052C90.
يشير إدخال الأمر 0x0007 إلى 0x14000BFD0.
مختصرًا إلى سلوكه المرتبط بالأمان، يبدو المعالج هكذا:
int command_07(parsed_arguments *args)
{
wchar_t service_directory[MAX_PATH];
wchar_t *requested_path = args->wide_string[0];
uint32_t mode = args->dword[1];
GetModuleFileNameW(NULL, service_directory, MAX_PATH);
PathRemoveFileSpecW(service_directory);
if (wcsstr(requested_path, service_directory) != NULL)
return launch_with_selected_token(requested_path, mode);
return 0;
}
يجيب wcsstr فقط عما إذا كانت سلسلة واحدة تحدث داخل أخرى. لا يقوم بتطبيع مسار، أو حل مقاطع النقاط، أو فتح ملف، أو إثبات أن الكائن النهائي يبقى تحت دليل موثوق.
افترض أن الخدمة مثبتة في:
C:\Program Files\Acer\NitroSense_Service
يحتوي المسار التالي على ذلك الدليل عند الإزاحة صفر، لذا ينجح wcsstr:
C:\Program Files\Acer\NitroSense_Service\..\..\..\WINDOWS\System32\cmd.exe
يحل Windows مقاطع النقاط إلى:
C:\WINDOWS\System32\cmd.exe
هذا خطأ تطبيع كلاسيكي: يتم التحقق على تمثيل نصي واحد، بينما تستهلك العملية الحساسة معناه المُطبَّع.
لدى مساعد تشغيل العملية عند 0x1400091F0 فرع خاص عندما تكون الوسيطة الثانية 0x72 (عشري 114). يقوم بـ:
CreateToolhelp32Snapshot؛winlogon.exe في الجلسة النشطة؛winsta0\default.مواقع الاستدعاء الحرجة في البنية المُختبَرة كانت:
| العملية | العنوان |
|---|---|
CreateToolhelp32Snapshot | 0x140009298 |
OpenProcessToken | 0x140009346 |
DuplicateTokenEx | 0x1400093B0 |
CreateProcessAsUserW | 0x1400094BF / 0x1400094C7 |
هذا يعني أن الأمر 0x0007 لا يطلب فقط من خدمة تشغيل أحد أدواتها الموثوقة. إنه يكشف مشغل عمليات برمز SYSTEM عام إلى pipe يمكن للمستخدمين العاديين الوصول إليه.
باني الحزم الأساسي صغير:
import struct