یکی از آسیب پذیری هایی که مایکروسافت در آوریل 2023 اونو اصلاح کرد، یه آسیب پذیری جعل با شناسه CVE-2023-28299 در Microsoft Visual Studio بود.
آسیب پذیری در قسمت نصب افزونه ها در ویژوال استدیو و امکان جعل امضاء و ناشر افزونه رو به مهاجم میده و توسط محققین
کشف و گزارش شده.
با توجه به اینکه ویژوال استدیو بیش از 30 هزار مشتری و سهم بازار 26 درصدی داره و دومین IDE محبوب دنیاست، میتونه هدفی جذاب برای بازیگران تهدید باشه.
یکی از قابلیت های ویژوال استدیو ، وجود افزونه ها هستش. افزونه ها یسری ویژگی هستند که قابلیت هایی رو به ویژوال استدیو میدن مثلا غلط املایی رو میگیره، قابلیت هایی رو برای کار با گیتهاب میده و … . افزونه ها تحت فرمت vsix منتشر میشن. برای مشاهده افزونه های مختلف ، میتونید به marketplace ویژوال استدیو مراجعه کنید.
برای کار با افزونه ها، باید اونهارو در ویژوال استدیو نصب کرد. موقع نصب یسری جزییات از افزونه رو مشاهده میکنیم از جمله امضاء ، ناشر و … .
اگه افزونه ای امضاء نداشته باشه :
مهاجم میتونه از این آسیب پذیری برای تولید یه افزونه مخرب با امضاء و ناشر جعلی استفاده کنه ،تا اونو مورد اعتماد جلوه بده و بتونه مراحل بعدی حمله رو پیاده سازی کنه.
نحوه ایجاد یه افزونه :
قبل از اینکه بریم سراغ بررسی آسیب پذیری ، یه نگاه کوتاهی به نحوه ساخت افزونه در ویژوال استدیو میندازیم.برای اینکه بتونید یه افزونه برای ویژوال استدیو ایجاد کنید، باید امکان توسعه VSIX در ویژوال استدیو داشته باشیم. برای این کار کافیه موقع نصب تیک گزینه مربوطه رو بزنیم :
بعد از اینکار ،ویژوال استدیو قابلیت توسعه افزونه رو به ما میده و ما میتونیم این مدل پروژه ها رو ایجاد کنیم. برای اینکه بتونیم یه افزونه ساده ایجاد کنیم، در ابتدا نیاز هستش که یه برنامه در سی شارپ یا ویژوال بیسیک یا WPF توسعه بدیم. این برنامه میتونه، هر چیز دلخواه باشه و در حقیقت برنامه ای هستش که بعد از نصب، قراره اجرا بشه.
بعد از اینکه برنامه دلخواه رو توسعه دادید، از منوی Project ، گزینه Export Template رو انتخاب کنید :
در این پنجره ، گزینه Project template رو انتخاب و در پنجره جدید فیلدهارو به دلخواه پر کنید :
در نهایت گزینه Finish رو بزنید و محل ذخیره رو به یاد داشته باشید که معمولا مسیر زیر هستش :
1 |
%userprofile%\Documents\Visual Studio 2019\My Exported Templates\{Template name}.zip |
حالا می خواییم این برنامه رو داخل یه افزونه VSIX قرار بدیم. برای این منظور یه پروژه جدید نیاز هست ایجاد کنیم اما از نوع VSIX :
بعد از اینکه پروژه جدید ایجاد شد، موارد زیر داریم :
فایل source.extension.vsixmanifest رو باز کنید و به سلیقه خودتون پر کنید .
حالا برای اینکه، برنامه قبلی رو به افزونه اضافه کنیم، در همین پنجره وارد بخش Assets بشید :
در این پنجره با انتخاب New ، پنجره جدیدی باز میشه که در اون گزینه Microsoft.VisualStudio.ProjectTemplate و File On filesystem رو انتخاب و مسیر برنامه قبلی که نوشتید رو بهش بدید و در نهایت OK کنید :
الان کافیه که از پروژه یه Build بگیریم. خروجی یه فایل VSIX هستش.
این فایل در حقیقت یه فایل فشرده هستش که میتونید با برنامه هایی مانند 7zip محتوای اونو مشاهده کنید :
شرح آسیب پذیری :
خب تا اینجا ، آشنایی کوتاهی با فایلهای vsix داشتیم و وقته اونو که این آسیب پذیری ساده رو بررسی کنیم.چیزی که این آسیب پذیری رو برای من جالب بود کرد همین سادگی اونه و اینکه، گاهی وقتا آسیب پذیری ها خیلی پیچیده نیستن و کد اکسپلویت خیلی خفنی ندارن.
موقع نصب یه افزونه ، برنامه نصب کننده ویژوال استدیو ، جزییات برنامه رو از روی فایل extension.vsixmanifest در UI نشون میده، بنابراین اگه بتونیم این فایل رو دستکاری کنیم، تا در UI چیزهای دیگه رو نشون بده، این آسیب پذیری رو اکسپلویت کردیم.
در حقیقت کل آسیب پذیری به این دلیل هستش که این فایل امکان ایجاد خط جدید رو میده. البته این خط جدید رو نمیشه در برنامه ویژوال استدیو داد و باید در فایل VSIX دستی انجام بدیم.
برای این کار میشه افزونه رو بعنوان یه فایل ZIP باز کنیم و بعد از تگ ، یه خط جدید ایجاد کنیم و عبارت Digital Signature : Microsoft (Verified) اضافه کرد. در ادامه با ایجاد خطوط جدید کاری کنیم که موقع نصب ،
خروجی ما الان به این صورت هستش :
قبلا به این صورت بود :
سناریوی حمله :
مهاجم میتونه از طریق فیشینگ ، از این آسیب پذیری سوء استفاده کنه :
- مهاجم یه ایمیل به توسعه دهندگان شرکت با عنوان بروزرسانی نرم افزار ارسال میکنه
- در داخل ایمیل، مهاجم یه پیوست از فایل مخرب و جعلی VSIX قرار میده
- قربانی ایمیل رو خونده و فایل مخرب رو دانلود و به دلیل اینکه نمیتونه تشخیص بده، فایل مخربه یا قانونی، اونو نصب میکنه.
- پیلود مهاجم اجرا شده و دسترسی اولیه به هدف فراهم میشه.
اصلاحیه :
مایکروسافت در 11 آوریل طی بروزرسانی Patch Tuesday برای این ماه، این آسیب پذیری رو اصلاح کرده، بنابراین اگه بروزرسانی رو اعمال کردید، تحت تاثیر این آسیب پذیری نیستید.
منبع