قد يقوم مساعد البرمجة بالذكاء الاصطناعي الخاص بك بإعادة كتابة مفاتيح SSH الخاصة بك دون أن تلاحظ ذلك أبداً. كشف بحث Wiz Research عن ثغرة "GhostApproval" تسمح لرابط رمزي (symlink) خبيث لملف project_settings.json بالإشارة إلى المفاتيح الخاصة، بينما لا يظهر مربع حوار الموافقة الذي يظهر لكل إجراء سوى اسم الرابط الرمزي فقط. وبالموافقة على مربع الحوار، ستكون قد منحت المساعد وصولاً غير مقيد إلى بيانات اعتمادك.

كيف تعمل عملية الاستغلال

  • يضيف المهاجم ملفاً يسمى project_settings.json إلى مستودع (repository).
  • هذا الملف ليس ملف JSON عادياً؛ بل هو رابط رمزي (symlink) يعيد التوجيه إلى المفتاح الخاص للمستخدم ~/.ssh/id_rsa (أو ما يعادله).
  • عندما يطلب المطور من مساعد الذكاء الاصطناعي "إعداد مساحة العمل" (set up the workspace)، يتبع المساعد الرابط الرمزي ويستعد للكتابة في ملف مفتاح SSH الحقيقي.
  • يسرد مربع حوار الموافقة الذي يظهر ملف project_settings.json فقط، ولا يقوم بفك الرابط الرمزي لإظهار المسار الفعلي على القرص.
  • يؤدي النقر على "موافقة" (Approve) إلى منح المساعد الإذن بتعديل المفتاح الخاص، مما يؤدي فعلياً إلى اختراق هوية المستخدم في كل خدمة تثق في ذلك المفتاح.

تظهر هذه الثغرة في ست أدوات واسعة الاستخدام: Amazon Q Developer, Claude Code, Augment, Cursor, Google Antigravity و Windsurf. تظهر جميعها نفس مربع الحوار المضلل لأن واجهة المستخدم تعرض الاسم الذي تتلقاه، وليس الهدف الذي تم الوصول إليه.

لماذا لا تكفي مربعات الحوار لكل إجراء

تفترض الموافقة لكل إجراء أن الإنسان يمكنه فحص كل عملية يقوم بها الذكاء الاصطناعي. في الواقع، فإن هذا يجبرك على اتخاذ أحكام مثالية كل بضع ثوانٍ، وهو أمر لا يمكن لأحد القيام به بسرعة تفوق سرعة عمل الوكيل (agent).

ما تفعله الشركات المصنعة – ولماذا يهم ذلك

  • قامت Amazon, Google and Cursor بإصلاحها بالفعل.
  • تقول Anthropic (الشركة المصنعة لـ Claude Code) إنه يجب على المستخدمين الموافقة فقط على ما يفهمونه. وهذا يتجاهل العبء المعرفي المتمثل في اكتشاف الروابط الرمزية ويفترض أن المستخدمين يمكنهم مراجعة كل مسار ملف على الفور، وهو توقع غير واقعي.
  • كشفت Cursor أيضاً عن مشكلة منفصلة، أُطلق عليها اسم DuneSlide، سمحت للمهاجمين بتنفيذ تعليمات برمجية على الجهاز دون أي مطالبة بالموافقة. قامت الشركة بإصلاح هذا الخطأ، مما يوضح مدى سرعة تحول هؤلاء المساعدين إلى نواقل هجوم عندما تكون فحوصات الأذونات ضعيفة.

يثير التباين في الردود سؤالاً أعمق: هل يجب أن يكون الأمن عبارة عن حوار يتم بعد وقوع الحدث، أم حدوداً محددة مسبقاً لا يتجاوزها المساعد أبداً؟

الأذونات المحددة النطاق: بديل عملي

بدلاً من طلب الموافقة لكل عملية ملف، يمكن للمطورين تحديد نطاق (scope) للمساعد قبل تشغيله:

  • تحديد شجرة دليل (مثل /src) يمكن للذكاء الاصطناعي القراءة منها أو الكتابة فيها.
  • أي محاولة للوصول إلى ملفات خارج تلك الشجرة — مثل ~/.ssh/id_rsa — سيتم حظرها بواسطة نظام التشغيل أو طبقة الحماية (sandbox).
  • يتم تحديد النطاق مرة واحدة، مما يقلل عدد القرارات التي يجب على الإنسان اتخاذها مع الاستمرار في احتواء تأثير المساعد.

ينقل تحديد النطاق نموذج الأمن من "اسأل في كل مرة" إلى "اسمح فقط بما هو مطلوب". وهو ما يحاكي كيفية قيام بيئات تشغيل الحاويات (container runtimes) وأنظمة تشغيل الهواتف المحمولة بعزل التطبيقات (sandboxing)، مما يحد من الضرر عند حدوث خطأ ما.

ما يجب مراقبته لاحقاً

  • إصدارات الشركات المصنعة: راقب ملاحظات التحديث من الأدوات الست المتأثرة.

الخلاصة

يثبت استغلال GhostApproval أن الثقة في مربع حوار منبثق تعطي شعوراً زائفاً بالأمان. وإلى أن يقوم كل مساعد برمجة بالذكاء الاصطناعي بفك الروابط الرمزية وإظهار المسارات الكاملة، يجب على المطورين فرض أذونات كتابة محددة النطاق — بإخبار المساعد بالضبط أين يمكنه العمل قبل أن يبدأ. هذا التغيير البسيط يمنع أخطر أنواع الهجمات دون إضافة إرهاق النقر المتكرر.

المصدر: dev.to/girish_r/your-coding-agents-approval-dialog-is-lying-to-you-ih1