توقف عن الوثوق بالوكيل: اربط الموافقات باستدعاءات الأدوات الدقيقة
تحمي معظم الأنظمة الوكيلية (agentic systems) الإجراءات الخطيرة مثل كتابة الملفات أو تحويل الأموال بموافقة بسيطة.
عادةً ما تكون هذه الموافقة عبارة عن علامة منطقية (boolean flag) في حالة النظام.
مثال: approved: true.
هذا خطأ. تفشل القيمة المنطقية (boolean) بثلاث طرق يستغلها المهاجمون:
- التبديل (Flip): يقوم المهاجم بتغيير الحالة من
falseإلىtrueعبر حقن الأوامر (prompt injection) أو ثغرات برمجية. - إعادة التشغيل (Replay): توافق على أمر آمن مثل "read file". يرى النظام القيمة "true" ويسمح بأمر ثانٍ خطير مثل "delete database".
- انحراف الوسائط (Argument Drift): توافق على "send $10". يقوم المهاجم بتغيير المبلغ إلى $10,000 قبل التنفيذ. تظل العلامة تشير إلى "true".
المشكلة هي أنك تصمم الموافقة كخاصية للجلسة بأكملها. يجب أن تكون دليلاً على استدعاء واحد محدد.
كيفية الإصلاح:
عندما يوافق إنسان على استدعاء ما، قم بإنشاء علامة (tag) آمنة. يجب أن تقفل هذه العلامة أربعة أشياء:
- معرف استدعاء الأداة الفريد (unique tool call ID).
- بصمة (hash) للوسائط الدقيقة.
- هوية المستخدم.
- وقت انتهاء الصلاحية.
تحقق من هذه العلامة في لحظة التنفيذ تماماً. استخدم مفتاحاً سرياً لا يعرفه إلا النظام.
اتبع هذه القواعد للتنفيذ:
- استخدم التوحيد القياسي (Canonicalization): يجب على كل من المُوافق والمنفذ حساب البصمة (hash) لنفس البايتات تماماً. استخدم RFC 8785 لضمان تطابق الأرقام والمفاتيح.
- الفشل عند الإغلاق (Fail Closed): إذا كانت العلامة مفقودة أو منتهية الصلاحية أو خاطئة، فقم بإرجاع خطأ محدد "not approved". لا تعاملها كأنه نتيجة أداة قياسية.
- الرفض افتراضياً (Deny by Default): اسمح فقط بالأدوات التي تتطلب موافقة صريحة. ارفض كل شيء آخر.
- التعامل مع إعادة التشغيل (Handle Replays): إذا كنت تستخدم محركات مثل Temporal، فتأكد من أن مفتاحك السري حتمي (deterministic). إذا تغير المفتاح بعد إعادة تشغيل النظام، فستفشل جميع الموافقات الحالية.
لا ينبغي أن يكون التفويض مجرد جزء عائم من الحالة. يجب أن يكون بمثابة غلاف مقيد يثبت: "هذا الشخص المحدد وافق على هذه الوسائط المحددة لهذه الأداة المحددة حتى هذا الوقت المحدد".
توقف عن استخدام القيم المنطقية (booleans). فهي ليست تبسيطاً، بل هي ثغرة (bug).
مجتمع تعليمي اختياري: https://t.me/GyaanSetuAi