یک نقص امنیتی از نوع CWE-668 (قرار دادن منبع در محدوده اشتباه) در ابزار Google Agent Development Kit (ADK) برای پایتون شناسایی شده است. این آسیبپذیری به یک کاربر احراز هویت شده با سطح دسترسی پایین اجازه میدهد تا آرتیفکتهای (Artifacts) مربوط به برنامههای دیگر را مشاهده، بازخوانی، بازنویسی یا حذف کند.
تحلیل فنی نقص امنیتی
این مشکل در کلاس FileArtifactService رخ داده است که مسئول مدیریت آرتیفکتهای باینری و متادادهها روی دیسک است. در نسخههای آسیبپذیر، اگرچه متدهای API مقدار app_name را دریافت میکردند، اما هنگام ساخت مسیرهای ذخیرهسازی روی دیسک، از این مقدار استفاده نمیشد. در نتیجه، تمامی برنامههایی که از یک دایرکتوری ریشه (Root Directory) مشترک استفاده میکردند، در یک فضای نام (Namespace) واحد قرار میگرفتند و جداسازی بین آنها از بین میرفت.
شرایط لازم برای اکسپلویت (Exploit)
برای بهرهبرداری از این نقص، شرایط خاصی باید برقرار باشد:
- استقرار برنامه به صورت Multi-tenant با ریشه مشترک برای
FileArtifactService. - وجود دو یا چند برنامه ADK که از یک دایرکتوری ریشه یکسان استفاده میکنند.
- مهاجم باید در یکی از این برنامهها احراز هویت شده باشد و دارای
user_idیکسانی با قربانی باشد.
در محیطهایی که هر برنامه ریشه مجزایی دارد یا user_idها در برنامههای مختلف متفاوت هستند، این آسیبپذیری قابل بهرهبرداری نیست.
وضعیت اصلاحیه و نسخههای آسیبپذیر
این نقص در بازههای نسخهای 1.19.0 تا قبل از 1.39.1 و 2.0.0a1 تا قبل از 2.7.0 مشاهده شده است. نکته مهم این است که نسخه 2.6.0 تنها یک اصلاح جزئی ارائه داده است؛ در این نسخه عملیات نوشتن (Write) محدود شده است، اما عملیات خواندن (Read) و حذف (Delete) همچنان از طریق مسیرهای قدیمی قابل دسترسی هستند. اصلاح کامل تنها در نسخههای 1.39.1 و 2.7.0 اعمال شده است.
راهکارهای مقابله و رفع مشکل
برای رفع این آسیبپذیری، اقدامات زیر توصیه میشود:
- بهروزرسانی: ارتقاء به نسخه 1.39.1 (برای شاخه 1.x) یا 2.7.0 (برای شاخه 2.x).
- مدیریت دادهها: توجه داشته باشید که این بهروزرسانی شامل یک تغییر ساختاری (Breaking Change) است. آرتیفکتها باید از مسیر
root/users/{user_id}/به مسیر جدیدroot/apps/{app_name}/users/{user_id}/منتقل شوند، در غیر این صورت سرویس بهروزرسانی شده قادر به یافتن دادههای قدیمی نخواهد بود. - کنترل جایگزین: اگر ارتقاء فوری امکانپذیر نیست، برای هر برنامه ADK یک دایرکتوری ریشه مجزا تعریف کنید تا شرط اشتراک فضای نام از بین برود.