یک آسیبپذیری امنیتی بحرانی در پلتفرم مشترک DevSite گوگل کشف شده است که به مهاجمان بدون احراز هویت (Unauthenticated) اجازه میداد تا با جعل کوکیهای نشست (Session Cookies) در فریمورک Flask و تزریق Payloadهای مخرب Python pickle، کدهای دلخواه خود را روی سرویسهای میزبانی شده توسط گوگل اجرا کنند.
جزئیات فنی و مکانیسم حمله
این نقص امنیتی توسط پژوهشگر Simon Köck در حین تحلیل جریان احراز هویت OAuth در مستندات توسعهدهندگان گوگل شناسایی شد. این آسیبپذیری زیرساختهای مشترک دامنههایی نظیر developers.google.com، Firebase، Android Developer و AOSP را تحت تأثیر قرار داده بود.
روند حمله به شرح زیر بود:
- مرحله اول: مهاجم با ارسال درخواست به نقطه انتهایی (Endpoint) بدون احراز هویت
/oauth2/authorize، یک کوکی نشست Flask دریافت میکرد. - مرحله دوم: از آنجایی که کوکیهای Flask به صورت پیشفرض رمزنگاری نمیشوند و تنها برای تأیید یکپارچگی (Integrity) امضا میشوند، پژوهشگر متوجه شد که این کوکی حاوی یک شیء سریالسازی شده (Serialized Object) از جریان OAuth است که مقادیر
client_idوclient_secretرا در بر میگیرد. - مرحله سوم (نقطه ضعف اصلی): گوگل از همان
client_secretبه عنوانSECRET_KEYبرای امضای کوکیهای Flask استفاده کرده بود. این بازاستفاده (Reuse) از کلید، به مهاجم اجازه میداد تا پس از به دست آوردن Secret، امضاهای معتبری برای هر محتوای دلخواه در نشست ایجاد کند. - مرحله چهارم: در مسیر پردازش Callback، سرور مقدار دریافت شده از کوکی را رمزگشایی کرده و آن را به تابع
pickle.loads()در پایتون پاس میداد.
خطرات Deserialization و اجرای کد
استفاده از کتابخانه pickle برای بازگردانی دادهها (Deserialization) در صورتی که دادهها از منبع غیرقابل اعتماد باشند، بسیار خطرناک است؛ زیرا یک شیء دستکاری شده میتواند در حین پردازش، توابع پایتون را فراخوانی کند. با فروپاشی مرز اعتماد (Trust Boundary) به دلیل افشای کلید امضا، مهاجم میتوانست یک شیء pickle مخرب را ارسال کرده و باعث اجرای کد در سمت سرور (Server-Side Code Execution) شود.
در اثبات مفهوم (PoC) این حمله، پژوهشگر از Payloadهای time.sleep() استفاده کرد تا با ایجاد تأخیر در پاسخهای سرور، اجرای توابع پایتون را تأیید کند. این نقص به دلیل اشتراکی بودن پیکربندی امضای نشست در پلتفرم DevSite، روی هفت دامنه مختلف گوگل اثرگذار بود.
نتیجهگیری و اصلاح
گوگل پس از دریافت گزارش در ۶ اوت ۲۰۲۶، این مشکل را بررسی و در تاریخ ۷ اکتبر ۲۰۲۶ بهطور کامل برطرف کرد و مبلغ ۹۰,۰۰۰ دلار پاداش به پژوهشگر پرداخت نمود. این مورد نشان میدهد که چگونه ترکیب چندین اشتباه امنیتی کوچک مانند افشای Secret، بازاستفاده از کلید و Deserialization ناامن میتواند منجر به یک زنجیره حمله منجر به RCE بدون نیاز به احراز هویت شود.