
🎩 🤟🏻 [P1-$10,000] Google Chrome وMicrosoft Edge وOpera - ثغرة أبلغ عنها Maciej Pulikowski - تسرب متغيرات بيئة النظام - CVE-2022-0337
يمكن أن يؤدي الاستغلال الناجح لهذه الثغرة إلى تسريب أسرار المستخدم المخزنة داخل متغيرات بيئة النظام. تم العثور على خطأ أمني في إصدار Chromium 92 وتم إصلاحه في الإصدار 97. هناك العديد من متصفحات الويب المبنية على محرك Chromium، على سبيل المثال Google Chrome وMicrosoft Edge وOpera وBrave. كانت جميعها عرضة للثغرة، باستثناء Brave. تكمن الثغرة في File System Access API، وبشكل أكثر تحديدًا في طريقة window.showSaveFilePicker().
إصدار CVE: CVE-2022-0337
الاعتمادات: Maciej Pulikowski
المكافأة: 10,000 دولار من Google VRP
تحقق من إصدار متصفحك:
chrome://version/edge://version/opera://updateنظام WINDOWS فقط هو المعرض للثغرة. Linux وMac آمنان.
شكرًا على الإعجابات والاشتراكات 😀👍

let a = await window.showSaveFilePicker({suggestedName:'%username%'});
a.name;
في المثال، يتم استخدام متغير البيئة %username%. إنه يُرجع اسم مستخدم Windows المسجل الدخول. علاوة على ذلك، هناك متغيرات بيئة أكثر إثارة للاهتمام:
فيما يلي بعض الأمثلة:
والمزيد...
لذا يمكن للمهاجم الوصول إلى خدمات AWS الخاصة بالهدف، أو حساب Github، أو رمز Binance للوصول إلى API (سحب الأموال) والمزيد...
اطلع على المزيد من الأسرار في متغيرات البيئة في مستودعي:
المثال السابق يتم تشغيله في أدوات مطوري Google Chrome المحلية.
من الواضح أن المهاجم يمكنه إنشاء ملف HTML خاص (موقع ويب) لاستغلال هذه الثغرة بنجاح.
env.html - هو مثال على HTML خاص مُصمم في المستودع.
ولكن، هل يحتاج المستخدم حقًا إلى تنزيل ملف؟
نعم، ومع ذلك، يمكن للمهاجم إنشاء موقع ويب لتشجيع المستخدم على الضغط مع الاستمرار على زر ENTER في لوحة المفاتيح لمدة ثانيتين لتشغيل مربع حوار حفظ الملف وقبوله. نظرًا لأن مربع حوار Windows يركز على زر Save افتراضيًا، فسيتم حفظ الملف في غمضة عين.
*.gif من Opera (تم إصلاح Chrome وEdge بالفعل)
في الختام، يمكن أن يؤدي الضغط مع الاستمرار على زر ENTER في لوحة المفاتيح لمدة ثانيتين إلى تسريب متغيرات بيئة النظام الخاصة بالمستخدم. هذه مشكلة كبيرة لأن المستخدم قد يخزن أسرارًا مهمة في متغيرات بيئة النظام، مثل الوصول إلى خدمات AWS أو حساب Github أو Binance
تحديت نفسي لإصلاح هذا الخطأ. هنا، أود أن أوضح أنني لست مطور c++ 😎.
كان أحد الحلول هو استبدال الحرف % في suggestedName بـ _. يجب أن يحل هذا المشكلة.

يمكن إدراجه في:
والنتائج هي:


في الواقع، لقد حل المشكلة، لكنه لم يكن أفضل مكان لإدراج الكود 😋. ومع ذلك، كنت سعيدًا جدًا بتمكني من إصلاحه بنفسي 😎
يمكن العثور على الإصلاح النهائي هنا:
هذا المشروع مخصص للأغراض التعليمية فقط. استخدام هذا البرنامج ضد الأنظمة المستهدفة دون إذن مسبق غير قانوني، ولن يتحمل المؤلف مسؤولية أي أضرار ناتجة عن إساءة استخدام هذا البرنامج.