التعرف على تصعيد الامتياز في ABBYY FineReader

تستمر دورة كيفية العثور على ثغرات تصعيد الامتيازات في تطبيقات Windows. في السلسلة السابقة: Steam ( CVE-2019-14743 و CVE-2019-15316 و CVE-2019-17180 ) والأصل ( CVE-2019-19247 و CVE-2019-19248 ). ولكن اليوم لن نتحدث عن مشغل اللعبة ، ولكن عن حزمة برامج تطبيق ABBYY FinerReader.



ملخص - سأخبرك كيف ، بفضل المكون الذي يتحقق من الترخيص ، في غضون 10 دقائق يمكنك رفع حقوقك من مستوى المستخدم إلى NT AUTHORITY \ SYSTEM. تم تعيين معرف الثغرة CVE-2019-20383 ، وهو رابط لموقع ABBYY .

خدمة ذكية


لقد قمت بتنزيل الإصدار التجريبي من FineReader من موقع ABBYY وفحصته بسرعة لمعرفة ما إذا كان من المنطقي اختيار المنتج لزيادة الامتيازات. نعم ، يتضمن المنتج خدمة ، بناءً على اسم "خادم ترخيص شبكة ABBYY" ، ترتبط بالتراخيص ويتم تشغيلها افتراضيًا من المستخدم NT AUTHORITY \ SYSTEM. لقد بدأت ProcMon بمشاهدة سلوك الخدمة.

تم لفت انتباهي إلى الملف الموجود على المسار "C: \ ProgramData \ ABBYY \ FineReader \ 15 \ Licenses \ Licensing.cnt". الخدمة تقرأ شيئًا منها ، وتكتب شيئًا لها ، بشكل عام ، بدا الملف كمرشح مثير للاهتمام للتجارب. خذ بعين الاعتبار المجلد "C: \ ProgramData \ ABBYY \ FineReader \ 15 \ Licenses". قائمة ACL المورثة للوصول الكامل من المجلد الأصلي ("C: \ ProgramData \ ABBYY \ FineReader \ 15") صالحة لهذا المجلد ، مما يعني أنه يمكنك حذف كافة محتوياته ، بما في ذلك الملف "Licensing.cnt".

حاولت الخدمة ، بعد اكتشاف عدم وجود الملف ، إنشائه ، وبطريقة غريبة قليلاً. قام بإنشاء ملف بصيغة "tmpXXXX-YYYYYYYYY.tmp" ، وكتب بعض البيانات فيه ، ثم أعاد تسميته "Licensing.cnt".

هذا هو سجل ProcMon الذي يتم فيه تنفيذ هذه العملية مرتين.



أولاً ، يحدث في الساعة 20:36 ، ثم الساعة 20:46. بين هذه الطوابع الزمنية ، تم حذف الملف مرة أخرى ليتم إنشاؤه مرة أخرى.

يشير المستطيل 1 إلى الموقف عندما تكتشف الخدمة عدم وجود ملف. المستطيل 2 - إنشاء ملف مؤقت. المستطيل 3 - إعادة تسمية الملف المؤقت. المستطيل 4 - كرر العمليات بعد 10 دقائق.

خذ بعين الاعتبار تنسيق الاسم "tmpXXXX_YYYYYYYYY.tmp". كجزء من عملية تشغيل واحدة ، سيكون XXXX دائمًا ثابتًا ، علاوة على ذلك ، في الواقع ، هذا هو معرف مؤشر الترابط الذي يقوم بهذا العمل. YYYYYYYYY لا تبقى ثابتة ، ولكن إذا نظرنا إلى بدايتين متجاورتين (القيمتين: 430210515 و 430810515) ، فيبدو أن هذه مجرد علامة زمنية - الفرق بين الأرقام 600000 - يتزامن بشكل مدهش مع 10 دقائق من الاختلاف. تؤكد بعض الاختبارات الأخرى افتراضنا.
لتلخيص هذا الجزء. يمكن لأي مستخدم حذف الملف "C: \ ProgramData \ ABBYY \ FineReader \ 15 \ Licenses \ Licensing.cnt" ، ثم يمكنه طلب محتويات المجلد "C: \ ProgramData \ ABBYY \ FineReader \ 15 \ Licenses" في في مرحلة ما ، ابحث عن ملف يسمى "tmpXXXX_YYYYYYYYY.tmp". الآن سيتم تجهيز المستخدم ، بعد حذف الملف ، سيعرف بالضبط في أي لحظة وبأي اسم سيتم إنشاء الملف في المرة القادمة.

الآن سنلعب مع الروابط الرمزية


كيفية إنشاء ارتباطات بدون حقوق المسؤول
, . . , , «C:\abc\1» «C:\def\2».

NTFS reparse point ( NTFS mount point) «C:\abc» «\RPC Control\". «\RPC Control\» – , , , . , , , , . NTFS reparse point , , . - , - .

. "\RPC Control\1" <-> «C:\def\2». , «C:\abc\1», «C:\def\2».

في البداية ، تبدو عملية إنشاء ملف الترخيص كما يلي:



عندما نعرف اللحظة الدقيقة لهذه العملية التالية ، يمكننا إنشاء الروابط الرمزية التالية (سوف نتخطى اسم المجلد المصدر "C: \ ProgramData \ ABBYY \ FineReader \ 15 \ Licenses \"): حيث YYYYYYYYA ، YYYYYYYB ، YYYYYYYYC ، ... YYYYYYYYYZ - هذه طوابع زمنية مختلفة في YYYYYYYYYY + 10 دقائق (في حالة تأخر الطابع الزمني قليلاً). بعد ذلك ، قم بإنشاء ارتباط: لاحظ أنه لا يوجد أي من هذه الملفات. يعد ذلك ضروريًا حتى عند الإشارة ، على سبيل المثال ، إلى tmpXXXX_YYYYYYYYB.tmp ، تحدث عمليات إعادة توجيه ، ونتيجة لذلك ، تعمل الخدمة مع الملف "C: \ test \ l2 \ nope". بمجرد أن نكتشف إنشاء الملف "C: \ test \ l2 \ nope" ، يجب أن ننشئ على الفور ارتباطين جديدين:

tmpXXXX_YYYYYYYYA.tmp <-> C:\test\l1\proxy
tmpXXXX_YYYYYYYYB.tmp <-> C:\test\l1\proxy
tmpXXXX_YYYYYYYYC.tmp <-> C:\test\l1\proxy

tmpXXXX_YYYYYYYYZ.tmp <-> C:\test\l1\proxy






C:\test\l1\proxy <-> C:\test\l2\nope




C:\test\l1\proxy <-> C:\test\l2\payload
Licensing.cnt <-> C:\target\path


ستستمر الخدمة في كتابة محتويات الملف إلى "C: \ test \ l2 \ nope" ، ولكنها ستعيد تسميته بعد أن يمر بالفعل عبر الارتباط الرمزي الجديد. وبالتالي ، بدلاً من إعادة التسمية ، على سبيل المثال ، "tmpXXXX_YYYYYYYYC.tmp" إلى "Licensing.cnt" ، ستتم إعادة تسمية "C: \ test \ l2 \ payload" إلى "C: \ target \ path". في الواقع ، يمكننا وضع ملف بأي محتوى في أي مسار نيابة عن المستخدم NT AUTHORITY \ SYSTEM .

من الناحية التخطيطية ، سيبدو الأمر كما يلي:



يشير اللون إلى ما سيتم تنفيذه بالفعل بسبب تأثير الروابط الرمزية.

من السهل بالفعل زيادة الامتيازات باستخدام البدائية الناتجة - يمكنك إرفاق ملف dll بعمليات النظام وأشياء أخرى مماثلة. في هذه المرحلة ، اتصلت بممثلي ABBYY وأرسلت لهم معلومات حول الثغرة الأمنية.

في الوقت الحالي ، وفقًا لـ ABBYY ، تم إغلاق الثغرة الأمنية.

الجدول الزمني


11/25/2019 - الكشف عن الثغرات الأمنية
11/26/2019 - الاتصال الأمني ​​المطلوب من الشركة المصنعة في
11/26/2019 - إرسال تقرير الثغرات إلى الشركة المصنعة
12/09/2019 - تم تأكيد الثغرة من قبل الشركة المصنعة
10/01/2020 - تم إصلاح
الثغرة في 01/22/2020 - تم تعيين الثغرات CVE-2019-20383
19.02 .2020 - نشر هذه المقالة

هناك العديد من المشاريع الآن ونحن الآن بصدد توسيع فريق "الرصد المستقبلي". نحن نبحث عن خبراء في دراسة أكواد المصدر ، وكذلك خبراء في تحليل تطبيقات الهاتف المحمول. هل تريد الانضمام إلى فريقي - اكتب إليّ ، أناستاسيا (أنا 2121) أو عن طريق البريد info@amonitoring.ru

هذه المقالة باللغة الإنجليزية.

All Articles