سرقت توکن گیتهاب فقط با یه کلیک روی لینک
خلاصهٔ کاملتر
نویسنده نشون میده که فقط با کلیک روی یه لینک، یه مهاجم میتونه توکن گیتهاب قربانی رو بدزده؛ توکنی که اجازهٔ خوندن و حتی نوشتن روی همهٔ مخزنها، از جمله مخزنهای خصوصی، رو داره. این حمله از طریق github.dev انجام میشه؛ همون نسخهٔ سبک VS Code که کامل تو مرورگر اجرا میشه.
ریشهٔ مشکل تو مدل امنیتی webviewهای VS Codeـه. این webviewها داخل یه iframe با مبدأ (origin) جدا اجرا میشن تا کد ناامن داخلشون منزوی بمونه، ولی برای اینکه کلیدهای میانبر کاربر کار کنه، رویدادهای کیبورد از داخل webview با پیامی به اسم did-keydown به پنجرهٔ اصلی VS Code فرستاده میشه.
مشکل اینجاست که هیچی جلوی اسکریپت ناامن داخل webview رو نمیگیره که خودش رو جای کاربر جا بزنه و این رویدادهای کیبورد رو شبیهسازی کنه. مهاجم با همین ترفند میتونه از میانبرهای پیشفرض VS Code استفاده کنه و در نهایت یه «اکستنشن محلی workspace» نصب کنه که بررسی اعتماد به ناشر رو دور میزنه.
به گفتهٔ نویسنده، چون workspaceهای github.dev همیشه «معتمد» حساب میشن، اکستنشن مخرب میتونه کد دلخواه اجرا کنه، توکن OAuth گیتهاب رو برداره و باهاش لیست مخزنهای خصوصی کاربر رو بگیره. این توکن به مخزن خاصی محدود نیست و به همهٔ دسترسیهای کاربر باز میشه.
نویسنده تأکید میکنه که VS Code بعضی کارها رو خوب انجام داده؛ مثلاً استفاده از Content Security Policy سختگیرانه و DOMPurify جلوی اجرای جاوااسکریپت تو پیشنمایش Markdown رو گرفته و از حملههای بدتر جلوگیری کرده. این باگ روی نسخهٔ دسکتاپ هم هست ولی سوءاستفاده ازش سختتره.
برای محافظت، نویسنده پیشنهاد میده که دادههای سایت github.dev (کوکیها و local storage) رو پاک کنید؛ چون github.dev هیچ توکن CSRF نداره و هر لینکی تو اینترنت میتونه شما رو به این حمله هدایت کنه. خود این افشاگری بهصورت «افشای کامل عمومی» منتشر شده، چون به گفتهٔ نویسنده تجربهٔ قبلیش با تیم امنیت مایکروسافت خوب نبوده.
نکات کلیدی:
- باگ تو مکانیزم پیامرسانی کیبورد (did-keydown) بین webview و پنجرهٔ اصلی VS Codeـه
- مهاجم با شبیهسازی کلیدها یه اکستنشن محلی نصب میکنه و توکن گیتهاب رو میدزده
- توکن دسترسی کامل خوندن و نوشتن به همهٔ مخزنها، حتی خصوصیها، رو داره
- راه محافظت: پاککردن کوکی و دادههای سایت github.dev




