چگونه محققان با یک لینک و آسیبپذیری Cross-Frame توانستند کنترل حسابهای ChatGPT را به دست بگیرند — We Took over ChatGPT Accounts
خلاصه
یک تیم تحقیقاتی آسیبپذیری زنجیرهای خطرناکی در ChatGPT کشف کرد که به مهاجمان اجازه میداد تنها با ارسال یک لینک و بدون نیاز به تعامل خاص کاربر، کدهای جاوااسکریپت مخرب را در سهم وبسایت اصلی اجرا کنند. این باگ به مهاجم امکان دسترسی به تاریخچه گفتگوهای خصوصی و سوءاستفاده از توکنهای احراز هویت را میداد.
در ماه اکتبر، یک تیم امنیتی توانست با استفاده از ترکیب چند مؤلفه ظاهراً بیخطر، راهی برای دور زدن ساندباکس (Sandbox) و سیاست امنیت محتوای (CSP) در ChatGPT پیدا کند. این آسیبپذیری نشان میدهد که چگونه پیچیدگی فزاینده در برنامههای وب مدرن میتواند به حفرههای امنیتی جدی منجر شود.
زنجیره آسیبپذیری: از گراف ریاضی تا اجرای کد
همهچیز با دو ویژگی شروع شد که به تنهایی امن به نظر میرسیدند: ابزار نمایش پیشنمایش HTML (HTML Preview) و رسم گرافهای ریاضی.
- ساندباکس پیشنمایش: کدهای HTML که در بخش پیشنمایش اجرا میشوند، در یک فریم محدود و روی دامنی جداگانه قرار دارند تا نتوانند مستقیماً به صفحه اصلی
chatgpt.comدسترسی داشته باشند. - کتابخانه MathLive: برای رندر کردن گرافها، کتابخانهای به نام
MathLiveبارگذاری میشد که از مکانیزمpostMessageبرای ارتباط میان فریمها استفاده میکرد.
مشکل اینجا بود که شنونده پیام در MathLive اعتبارسنجی مبدا (Origin Policy) را به درستی انجام نمیداد و پیامهای دریافتی را بدون بررسی میپذیرفت. مهاجم توانست با ارسال یک پیام ساختگی، چیدمان صفحه کلید مجازی را تغییر داده و کدهای HTML دلخواه خود را تزریق کند.
دور زدن CSP با استفاده از YouTube
تزریق innerHTML به تنهایی برای اجرای جاوااسکریپت کافی نبود، زیرا سیاست امنیت محتوا (CSP) از اسکریپتهای درونصفحهای جلوگیری میکرد. با این حال، محققان متوجه شدند که سیاست امنیتی ChatGPT به اسکریپتهای دامنه YouTube اعتماد دارد.
با سوءاستفاده از پارامتر callback در نقطه پایانی oEmbed یوتیوب و قرار دادن یک ساختار JSONP، مرورگر فریب خورد و پاسخ یوتیوب را به عنوان یک اسکریپت معتبر بارگذاری کرد. این کار باعث ایجاد یک فریم srcdoc بدون ساندباکس شد که هویت chatgpt.com را به ارث میبرد و در نتیجه، کدهای جاوااسکریپت مهاجم توانستند با دسترسی کامل به نشست کاربر اجرا شوند.
تبدیل آسیبپذیری به یک حمله با یک کلیک
برای عملی کردن این حمله، مهاجمان تمامی این اجزا را در یک لینک اشتراکگذاری عمومی ChatGPT قرار دادند:
- یک گراف واقعی برای راهاندازی
MathLiveدر صفحه اصلی. - یک پیشنمایش HTML که پیامهای مخرب را ارسال میکرد.
هنگامی که قربانی روی لینک اشتراکگذاری کلیک میکرد، پیشنمایش به صورت خودکار بارگذاری شده و زنجیره حملات اجرا میشد. در نسخههای پایدارتر، باز کردن ساده لینک برای اجرای کامل پِیلود کافی بود.
پیامدها و واکنش OpenAI
از آنجایی که کد مخرب با دسترسی احراز هویتشده قربانی اجرا میشد، مهاجم توانست کارهای زیر را انجام دهد:
- فهرست گفتگوهای کاربر را استخراج کند.
- محتوای گفتگوهای کاملاً خصوصی و به اشتراکگذاشتهنشده را بخواند.
- درخواستهای دلخواه به APIهای
chatgpt.comبفرستد و عملاً حساب کاربری را تصاحب کند.
شرکت OpenAI پس از دریافت گزارش، این باگ را در رده P1 طبقهبندی کرد و در اواخر اکتبر با اعمال تغییراتی در سیاستهای امنیتی و نحوه پردازش پیامهای MathLive فریمها، این مشکل را برطرف نمود.
نگاه جامعه توسعهدهندگان در هکرنیوز
بحث پیرامون این آسیبپذیری در هکرنیوز بسیار داغ بود. بسیاری از برنامهنویسان به افزایش حجم کدهای مونولیتیک و رشد لگاریتمی سطح حمله انتقاد کردند. برخی کاربران نیز پاداش پرداختی پنج هزار دلاری OpenAI را با توجه به شدت خطرناک بودن این آسیبپذیری بسیار ناچیز دانستند.
این مطلب بهصورت کاملاً خودکار و با هوش مصنوعی از مقالهٔ اصلی و بحث هکرنیوز تهیه شده و ممکن است خطا داشته باشد. حقوق مطلب اصلی متعلق به نویسندهٔ آن است. قوانین و گزارش مشکل