ما را دنبال کنید:

آسیب‌پذیری Windows GDI در Rust Kernel

آسیب‌پذیری Windows GDI در Rust Kernel
32 بازدید

آسیب‌پذیری Windows GDI در ماژول هسته مبتنی بر Rust؛ زمینه‌ساز حملات از راه دور

 مقدمه

در سال ۲۰۲۵، مایکروسافت بخشی از هسته‌ی سیستم‌عامل Windows را با استفاده از زبان Rust بازنویسی کرد تا ایمنی حافظه و پایداری سیستم را افزایش دهد.
اما به‌تازگی، آسیب‌پذیری جدیدی در مؤلفه‌ی گرافیکی Windows Graphics Device Interface (GDI) کشف شده است که نشان می‌دهد حتی کدهای Rust نیز از خطاهای منطقی در امان نیستند.

محققان شرکت Check Point Research (CPR) در ژانویه ۲۰۲۵ ضعف امنیتی مهمی را در ماژول win32kbase_rs.sys کشف کردند که می‌تواند به سقوط (Crash) یا حتی کنترل کامل سیستم ویندوز منجر شود.
مایکروسافت در به‌روزرسانی KB5058499 (۲۸ می ۲۰۲۵) این مشکل را برطرف کرد و انتشار عمومی آن تا پایان ژوئن انجام شد.

 شرح فنی آسیب‌پذیری GDI

 منشأ آسیب‌پذیری

تحقیقات CPR با اجرای یک کمپین Fuzzing بر روی فایل‌های متافایل ویندوز (Windows Metafiles) آغاز شد.
در این روش، داده‌های تصادفی یا مخدوش به برنامه‌ها تزریق می‌شوند تا رفتار غیرمنتظره یا Crash در کد شناسایی شود.

محققان با استفاده از ابزارهای WinAFL Pet برای مدیریت فرآیند Fuzzing و BugId برای تحلیل Crashها، فرمت‌های EMF و EMF+ را هدف قرار دادند؛ فرمت‌هایی که شامل دستورات رسم برای توابع GDI هستند.

در ابتدا، تنها خطاهای سطح کاربر (User-space) و نشت حافظه مشاهده شد.
اما پس از یک هفته آزمایش، سیستم‌ها دچار Kernel Panic و راه‌اندازی مجدد ناگهانی شدند — نشانه‌ای از بروز خطا در سطح هسته.

 جزئیات فنی خطا

پس از تحلیل حافظه با MemProcFS و اجرای مجدد فایل‌های آزمایشی، مشخص شد Crash در هنگام اجرای فراخوانی سیستمی NtGdiSelectClipPath رخ می‌دهد.
تابع region_from_path_mut() در ماژول win32kbase_rs.sys به‌درستی داده‌های ورودی را اعتبارسنجی نکرده بود.

در حالت عادی، رکوردهای Bezier curve در EMF+ باید چهار نقطه را تعریف کنند.
اما در این نمونه، فایل مخرب ۱۷ نقطه ارائه می‌داد و باعث می‌شد لیست‌های edge block از محدوده آرایه خارج شوند.

در نتیجه، فراخوانی panic_bounds_check() اجرا شده و سیستم وارد وضعیت Blue Screen of Death (BSOD) می‌شود.

 شبیه‌سازی و اکسپلویت

CPR یک Proof-of-Concept (PoC) با استفاده از اسکریپت PowerShell توسعه داد که با بارگذاری یک فایل متافایل خاص از طریق توابع
Graphics::FromImage() و DrawImage()
موجب اجرای همان Crash می‌شود.

این حمله حتی از یک حساب کاربری با سطح دسترسی پایین (Low Integrity) قابل انجام است و مهاجم می‌تواند با تکرار مداوم حمله، سیستم‌های رومیزی یا سرورهای ویندوزی را از کار بیندازد.

در محیط‌های سازمانی، چنین حملاتی می‌توانند موجب از دست رفتن داده‌ها، توقف سرویس‌ها و آسیب به زیرساخت‌های حیاتی شوند.

 واکنش و اصلاح توسط مایکروسافت

مایکروسافت این ضعف را با عنوان CVE-2025-XXXXX (در قالب بروزرسانی KB5058499) رفع کرد.
در فایل به‌روز‌شده‌ی win32kbase_rs.sys اندازه فایل از ۱۴۸ کیلوبایت به ۱۶۴ کیلوبایت افزایش یافت، که نشانه‌ای از افزوده شدن چک‌های حفاظتی بیشتر است.

این به‌روزرسانی شامل دو روال جدید به نام‌های
add_edge_original() و add_edge_new()
می‌باشد که با استفاده از Feature Flag Runtime مسیر امن‌تر را انتخاب می‌کنند.

در نسخه‌ی آزمایشی (Preview) این قابلیت غیرفعال بود، اما در انتشار نهایی فعال شد و مانع بروز Crash در ورودی‌های غیرعادی گردید.

 ارزیابی امنیتی

مایکروسافت این آسیب‌پذیری را در سطح متوسط (Moderate Severity) و با طبقه‌بندی Denial of Service (DoS) ارزیابی کرده است.
اما بسیاری از پژوهشگران امنیتی معتقدند هر ورودی کنترل‌نشده که منجر به BSOD شود، در عمل یک آسیب‌پذیری امنیتی جدی محسوب می‌شود.

در این مورد، زبان Rust مانع از خرابی حافظه یا اجرای کد مخرب شد، اما به‌دلیل نبود مدیریت خطای مناسب، سیستم دچار Crash کامل گردید.
این موضوع نشان می‌دهد که Rust امنیت حافظه را تضمین می‌کند، اما منطق برنامه‌نویسی و طراحی سیستم همچنان نقش حیاتی دارند.

 تحلیل RootNet: امنیت زبان Rust در هسته ویندوز

ماژول‌های جدید ویندوز که با Rust نوشته شده‌اند، گامی بزرگ در جهت امنیت حافظه به شمار می‌روند.
اما همان‌گونه که این حادثه نشان می‌دهد، انتخاب زبان امن به‌تنهایی برای حذف آسیب‌پذیری‌ها کافی نیست.

Rust از بروز خطاهای کلاسیک مانند Use-After-Free یا Buffer Overflow جلوگیری می‌کند، اما منطق برنامه و مدیریت استثناها (Exception Handling) همچنان نیازمند بررسی دقیق است.

این آسیب‌پذیری را می‌توان نخستین نمونه عمومی از نقص امنیتی در ماژول‌های Rust هسته ویندوز دانست.
نمونه‌ای که به‌خوبی یادآور می‌شود امنیت، نیازمند ترکیب سه عامل است:

  • طراحی امن (Secure Design)

  • تست گسترده (Extensive Testing)

  • نظارت مداوم (Continuous Monitoring)

 راهکارهای پیشنهادی برای مدیران و کارشناسان امنیت

برای جلوگیری از خطرات مشابه، RootNet.ir توصیه می‌کند:

  1. نصب فوری بروزرسانی‌های امنیتی مایکروسافت (ویژه KB5058499 و نسخه‌های بعدی).

  2. غیرفعال‌سازی پردازش متافایل‌های ناشناخته در محیط‌های سازمانی.

  3. استفاده از EDR و SIEM جهت شناسایی رفتارهای غیرعادی در سیستم‌های ویندوز.

  4. اجرای Fuzz Testing داخلی برای شناسایی آسیب‌پذیری در نرم‌افزارهای سفارشی.

  5. پایش مداوم رویدادهای سیستمی (Event Logs) برای شناسایی حملات DoS یا Crashهای مشکوک.

RootNet در حوزه‌ی تحلیل آسیب‌پذیری‌ها، امنیت ویندوز، و پایش تهدیدات سایبری آماده‌ی همکاری با سازمان‌ها برای ارزیابی، ایمن‌سازی و بهینه‌سازی زیرساخت‌های نرم‌افزاری است.

نتیجه‌گیری

آسیب‌پذیری جدید در Windows GDI مبتنی بر Rust نشان می‌دهد که حتی در امن‌ترین زبان‌ها، خطای طراحی می‌تواند تهدیدی واقعی ایجاد کند.
Rust حافظه را ایمن می‌کند، اما تضمین امنیت کامل سیستم نیازمند رویکردی جامع در طراحی، تست، و نظارت است.

این حادثه زنگ خطری است برای توسعه‌دهندگان، تا حتی در معماری‌های مدرن، اعتبارسنجی داده‌ها و مدیریت خطا را جدی‌تر از همیشه دنبال کنند.
مایکروسافت با ارائه وصله‌ی اصلاحی، خطر فعلی را برطرف کرده است، اما درس بزرگ این رخداد آن است که امنیت هیچ‌گاه مطلق نیست.

مرتبط پست

دیدگاه ها بسته هستند