دستیار کدنویسی هوش مصنوعی شما ممکن است بدون اینکه متوجه شوید، کلیدهای SSH شما را بازنویسی کند.
تحقیقات Wiz Research نقص امنیتی موسوم به «GhostApproval» را کشف کرده است که اجازه میدهد یک لینک نمادین (symlink) مخرب در فایل project_settings.json به کلیدهای خصوصی اشاره کند، در حالی که کادر تأیید عملیات که ظاهر میشود، فقط نام آن symlink را نشان میدهد. با تأیید این کادر، شما عملاً دسترسی نامحدود به اعتبارنامههای خود را در اختیار دستیار قرار دادهاید.
نحوه عملکرد این اکسپلویت
- یک مهاجم فایلی به نام project_settings.json را به یک مخزن (repository) اضافه میکند.
- آن فایل یک فایل JSON معمولی نیست؛ بلکه یک لینک نمادین (symlink) است که به کلید خصوصی کاربر در مسیر ~/.ssh/id_rsa (یا معادل آن) ارجاع میدهد.
- وقتی توسعهدهنده از دستیار هوش مصنوعی میخواهد که «فضای کاری را تنظیم کند» (set up the workspace)، دستیار از symlink پیروی کرده و آماده میشود تا در فایل واقعی کلید SSH بنویسد.
- کادر تأییدی که ظاهر میشود، فقط نام project_settings.json را لیست میکند و مسیر واقعی روی دیسک را از طریق حل کردن (resolve) symlink نشان نمیدهد.
- کلیک بر روی «Approve» به دستیار اجازه میدهد کلید خصوصی را تغییر دهد و به طور موثر هویت کاربر را در تمام سرویسهایی که به آن کلید اعتماد دارند، به خطر میاندازد.
این باگ در شش ابزار پرکاربرد دیده میشود: Amazon Q Developer، Claude Code، Augment، Cursor، Google Antigravity و Windsurf. همه آنها کادر تأیید گمراهکننده مشابهی را نشان میدهند، زیرا رابط کاربری (UI) نامی را که دریافت میکند نمایش میدهد، نه هدف نهایی (resolved target) را.
چرا کادرهای تأییدِ تکعملیاتی کافی نیستند
تأیید عملیات به صورت تکبهتک (per-action) بر این فرض استوار است که یک انسان میتواند هر عملیاتی را که هوش مصنوعی انجام میدهد، بررسی کند. در عمل، این کار شما را مجبور میکند که هر چند ثانیه یک بار قضاوتهای بینقصی داشته باشید؛ کاری که هیچکس نمیتواند سریعتر از سرعت عمل عامل (agent) انجام دهد.
شرکتها چه میکنند – و چرا این موضوع اهمیت دارد
- Amazon، Google و Cursor قبلاً آن را اصلاح کردهاند.
- شرکت Anthropic (سازنده Claude Code) میگوید کاربران باید فقط مواردی را تأیید کنند که درک میکنند. این نظر، بار شناختی تشخیص symlinkها را نادیده میگیرد و فرض را بر این میگذارد که کاربران میتوانند هر مسیر فایلی را فوراً بازرسی کنند؛ انتظاری غیرواقعبینانه.
- Cursor همچنین مشکل جداگانه دیگری را با نام DuneSlide فاش کرد که به مهاجمان اجازه میداد بدون هیچ پیام تأییدی، کدی را در دستگاه اجرا کنند. این شرکت آن باگ را وصله کرد و نشان داد که این دستیارها وقتی بررسیهای مجوز ضعیف باشند، چقدر سریع میتوانند به بردارهای حمله تبدیل شوند.
این اختلاف در پاسخها یک سوال عمیقتر را مطرح میکند: آیا امنیت باید یک کادر تأیید پس از وقوع اتفاق باشد، یا یک مرز از پیش تعریف شده که دستیار هرگز از آن عبور نمیکند؟
مجوزهای محدود شده (Scoped permissions): یک جایگزین کاربردی
به جای درخواست برای هر عملیات روی فایل، توسعهدهندگان میتوانند قبل از اجرا، یک محدوده (scope) برای دستیار تعیین کنند:
- تعریف یک درخت دایرکتوری (مثلاً
/src) که هوش مصنوعی مجاز به خواندن یا نوشتن در آن باشد. - هرگونه تلاش برای دسترسی به فایلهای خارج از آن درخت — مانند
~/.ssh/id_rsa— توسط سیستمعامل یا یک لایه سندباکس (sandbox) مسدود میشود. - محدوده تنها یک بار تعیین میشود، که باعث کاهش تعداد تصمیماتی میشود که انسان باید بگیرد و در عین حال تأثیر دستیار را کنترل میکند.
تعیین محدوده (Scoping)، مدل امنیتی را از «هر بار بپرس» به «فقط آنچه لازم است را اجازه بده» تغییر میدهد. این کار مشابه روشی است که زمانهای اجرای کانتینر (container runtimes) و سیستمعاملهای موبایل از اپلیکیشنها در سندباکس استفاده میکنند تا در صورت بروز مشکل، آسیب را محدود کنند.
آنچه باید در ادامه زیر نظر داشت
- انتشار توسط فروشندگان: اخبار مربوط به بهروزرسانیهای شش ابزار آسیبدیده را دنبال کنید.
خلاصه کلام
اکسپلویت GhostApproval ثابت میکند که اعتماد به کادرهای پاپآپ، حس امنیت کاذبی ایجاد میکند. تا زمانی که هر دستیار کدنویسی هوش مصنوعی، لینکهای نمادین را حل کرده و مسیرهای کامل را نشان ندهد، توسعهدهندگان باید مجوزهای نوشتن محدود به محدوده (scoped write permissions) را اعمال کنند — یعنی قبل از شروع کار، دقیقاً به دستیار بگویند کجا میتواند کار کند. این تغییر ساده، خطرناکترین کلاس حملات را بدون ایجاد خستگی ناشی از کلیک کردن (click-fatigue)، مسدود میکند.
منبع: dev.to/girish_r/your-coding-agents-approval-dialog-is-lying-to-you-ih1
