
7-Zip حتى الإصدار 21.07 على ويندوز يسمح بتصعيد الامتيازات وتنفيذ الأوامر عند سحب ملف بامتداد .7z إلى منطقة Help>Contents.
لم أنشر أي كود إثبات (PoC) لأي هجوم رفع صلاحيات في أي مكان. أكواد الإثبات الموجودة لا علاقة لها برفع الصلاحيات. لمعلوماتك.
7-Zip هو أرشيف ملفات مجاني ومفتوح المصدر. الإصدار موجه الأوامر من 7-Zip مُصمم للأنظمة الشبيهة بيونكس، بل وحتى أميغا أو إس (AmigaOS) ضمن هذه القائمة. كما أنه متوافق مع نظام "دوس" من خلال منفذ دوس أو مع موسع HX-DOS، ويمكن تشغيله في موجه أوامر ويندوز.
سأكتب بالتركية أيضًا لتتعلموا التركية قليلاً.
أولاً، أود الإشارة إلى قصتي في اكتشاف الثغرة. رأيت حمولة (Payload) تستغل ثغرة XXE على WinRAR. كما أنها كانت تسمح بتشغيل الأوامر عبر JavaScript باستخدام ActiveXObject و WScript.Shell من خلال ملف مساعد HTML (HTML Helper). لم يكن ذلك مختلفاً عن HTA المستخدم في lolbins، وفكرت كيف يمكنني تحويل الموقف لصالحي.
(https://www.exploit-db.com/exploits/47526)
في الحقيقة، كان هدفي هو الحصول على شل عكسي (reverse shell) على الحاسوب الهدف بعد النقر المزدوج على امتدادات ضغط مثل 7z و zip و rar، وكنت أفكر فيما إذا كان بإمكاني استخدام ملف مساعد HTML لتحقيق ذلك. بعد عمليات تدقيق (fuzzing) طويلة باستخدام WinAFL، اكتشفت وجود تجاوز سعة كومة (heap overflow) على FzGM.exe، لكن بعد تجاوز السعة، ستكون صلاحياتي بنفس المستخدم، لذا لم يكن لذلك معنى. لذلك لم أستخدم CreateRemoteThread لأنني بحاجة لاستدعاء API، ولكي أتمكن من تفعيل هذا API كنت بحاجة لملف chm. عند فحص الكود المصدري، لاحظت خاصةً في مكانين وجود معالجات خاطئة عند استدعاء Windows API، مما يسبب مشكلة صلاحيات بشكل مباشر. نقطة اكتشافي هذه، كما هو موضح في الصورة أدناه، تقوم بإنشاء عملية فرعية (child process) تحت FzGM.exe. طبيعياً، نتوقع أن تكون هذه العملية تحت hh.exe.


إذا لم يتم تضمين API وتمت المعالجة الصحيحة عبر الدالة، كنت سأتوقع إنشاء عملية فرعية تحت hh.exe، لكن ملف 7-zip.chm يقوم باستدعائها من نفسه. يمكنك رؤية مثال نموذجي إذا قمت بتحرير ملف 7-zip.chm وتطبيق عملية تشغيل أوامر. بعد تجاوز سعة الكومة، استغليت مشكلة صلاحية API المستدعاة، ثم استفدت من التكوين الخاطئ الموجود داخل ملف 7z.dll، وهو أمر كنت أعمل عليه منذ فترة طويلة. لا معنى لعمل CreateRemoteThread(). الشيء الذي يجب تشغيله واستدعاؤه داخل حمولتي ليس مساعد HTML API نفسه، بل النقطة التي يتم فيها ربط (hook) هذا API عبر 7-zip، وقدرتي على تنفيذ تلك النقطة، لكن هذه الحمولة تعمل فقط مع تكامل hh.exe، ولهذا تعمل عبر وظيفة السحب والإفلات (drag and drop). استدعاء ملف 7-zip.chm عبر زر HELP داخل 7-zip، وتوجيه العنوان المستدعى إلى "base pointer" الذي يعاني من مشكلة صلاحية داخل الحمولة، ينقلنا إلى مستخدم أعلى. بعد ذلك، تتمثل العملية في وجود psexec داخل الحمولة، ثم رفع الصلاحية إلى نظام (nt authority/system) باستخدام الأمر psexec -s cmd.exe.

فيديو إثبات:
كانت العديد من الأسئلة حول تحذير ActiveX. يمكن حل هذه المشكلة بشكل أساسي كالتالي: قبل تشغيل الحمولة، يتم التحقق من:
<'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\0' -Name '1201' -Value '0' -PropertyType "DWord"> إذا كانت هذه القيمة 1، يظهر إشعار منبثق، أما إذا تم تعيين قيمة جديدة 0، يتم تخطي التحذير. ولكن يجب الإشارة إلى أن ذلك يؤثر فقط على المستخدم الذي يقوم بتشغيل الحمولة في تلك اللحظة.
لقد أخبرت المطور بالنقاط اللازمة وتم قبولها من قِبل CVE. لا أفهم اعتقاد بعض الناس أنفسهم كسلطة وفرضية أنه يجب أن أعطيهم الاستغلال (exploit). لقد أوضحت بالفعل أنني سأنشره بعد التحديث، لكن عدم الاحترام هذا قبل التحديث أعتقد أنه ينبع من اعتبار النفس كسلطة. قد لا أرغب أبداً في نشر كود إثبات هجوم رفع الصلاحيات، فهذا قرار شخصي، ولا يهمني إطلاقاً رأي أي شخص في صحة ذلك.
الطريقة الأولى: إذا لم يتم تحديث 7-zip، يمكن حذف ملف 7-zip.chm. الطريقة الثانية: يجب أن يتمكن جميع المستخدمين من الوصول إلى الملفات داخل البرنامج بصلاحية القراءة والتنفيذ فقط.
قاعدة سيجما ذات الصلة: https://github.com/kagancapar/CVE-2022-29072/blob/main/7z_CVE-2022-29072.yml