تصور کنید سیستمی را مدیریت میکنید که ۵۸ تست امنیتی را با موفقیت پشت سر گذاشته، اما در دنیای واقعی در حال دروغ گفتن است. در ۲۸ سپتامبر ۲۰۲۶، تیم توسعه پروتکل conduct-v1 متوجه شد که سرورهای آنها متادیتای جعلی درباره نقطه پایانی (Endpoint) ارسال میکردند؛ خطایی که برای تمام ابزارهای خودکار آنها نامرئی بود تا اینکه یک پرسش ساده از سوی یک مهندس خارجی، این توهم را شکست.
این شکست، ریسکی سیستماتیک در استقرار عاملهای هوش مصنوعی را برملا میکند: «توهم تستهای سبز». در فضای فعلی عاملمحور (Agentic) — شبیه به وقتی که یک دانشآموز فقط جوابهای کلیدی کتاب را حفظ میکند بدون اینکه مفهوم را بفهمد — توسعهدهندگان اغلب به مدلهای شبیهسازیشدهای (Mocks) و فیکسچرهایی (Fixtures) تکیه میکنند که با منطق سرور همجهت هستند. این وضعیت یک حلقه بسته ایجاد میکند که در آن کد، خطاهای خودش را تأیید میکند. این چالش با مفاهیم گستردهتری که در تحلیل ما درباره علت شکست سیستمهای اعتبارسنجی خودکار و توهم تیک سبز بررسی شده، همراستاست. پروژه conduct-v1 تلاش میکند با استفاده از یک دفتر ثبت عمومی از رکوردهای هششده، این چرخه را بشکند تا هر کلاینتی بتواند یک عامل را «رصد» (Walk) کرده و مشاهدهای را ثبت کند که هر کسی بتواند آن را مجدداً محاسبه کند.
زمینه و بستر Conduct-v1
این پروتکل بر یک فرض ساده استوار است: یک «کارت عامل» باید اعلام کند چه کسی هزینه عامل را میپردازد و سوابق رفتاری اندازهگیری شده آن در کجا قرار دارد. این ساختار به هر کلاینتی اجازه میدهد تا عامل را رصد کند، آنچه را مشاهده کرده ثبت نماید و اجازه دهد هر شخص ثالثی نتیجه را مجدداً محاسبه کند. در این سیستم، هیچ امتیاز یا نشان تجاری برای خرید وجود ندارد و تنها رکوردهایی با هش (Hash) معتبر هستند.
تیم توسعه متوجه شد که دفتر ثبت فراخوان A آنها، که تنها یک شاهد داشت، صراحتاً در خروجی خود ذکر کرده بود که برای حذف این جمله، به یک شاهد مستقل دوم نیاز است. برای حل این مسئله، آنها یک Issue عمومی باز کردند و از شخصی خارج از سازمان خواستند تا یک عملیات رصد (Walk) انجام دهد؛ فرآیندی که حدود ده دقیقه زمان میبرد و هیچ هزینهای نداشت.
به گزارش وبسایت dev.to، این نقص زمانی آشکار شد که یک مهندس مستقل به این فراخوان پاسخ داد. او با استفاده از یک کلاینت مرجع که روی یک کامیت (Commit) خاص در ماشین ویندوزش پین شده بود، رابط A2A در گیت Horizon Shield را رصد کرد. او رکوردی را ثبت کرد که در آن ۵ ادعا از ۵ ادعا درست بودند، اما متوجه یک تناقض شد: متادیتای پاسخ ادعا میکرد که درخواست توسط https://gate.horizonshield.dev/mcp سرویسدهی شده است، در حالی که او در واقع /a2a را فراخوانی کرده بود.
تحلیل فنی شکست
بر اساس مستندات فنی، دو شکست همزمان در دو طرف ارتباط (Wire) رخ داده بود:
- سمت سرور: مشخصات فنی (Spec)، کلید نقطه پایانی را به عنوان «ورودی از measured_endpoints که این درخواست را سرویس داده است» تعریف کرده بود. اما گیت در مسیر
/a2aبه درخواستهای A2A پاسخ میداد، در حالی که اندازهگیریها در مسیر/mcpانجام میشد. چون هیچ ورودیای نمیتوانست صادقانه نام URL سرویسدهنده را ذکر کند، هندلر (Handler) مقدار نقطه پایانی اندازهگیری شده را به صورت یک مقدار ثابت (Hardcoded Constant) در تمام پاسخها مینوشت. دو عامل دیگر نیز دقیقاً از همین الگوی غلط پیروی میکردند. - سمت کلاینت: کلاینت مرجع، هدر پاسخهای A2A-Extensions را بررسی میکرد اما متادیتای داخلی را کاملاً نادیده میگرفت. با وجود اینکه از نسخه ۱، وجود سه کلید متاداتا الزامی بود، هیچ بخشی از کلاینت آنها را اعتبارسنجی نمیکرد.

از آنجا که مدلهای شبیهساز (Mocks) مورد استفاده در ۵۸ بردار تست داخلی هرگز متادیتایی برنمیگرداندند، تستها «سبز» یا پاس شده بودند. حتی یکی از عاملهای فیکسچر مقدار جعلی "x" را برمیگرداند و باز هم امتیاز ۵ از ۵ برای ادعاهای درست میگرفت. این اتفاق یادآور نقصهای مشابه در پروتکل Traceguard ۱.۶.۰ بود که در آن دو حفره امنیتی بحرانی از میان بیش از هزار تست سبز نفوذ کردند. تیم متوجه شد که تستهای سرور با سرور، و تستهای کلاینت با کلاینت موافق بودند، اما هیچکس آنها را در یک محیط زنده در برابر هم قرار نداده بود.
اصلاحات و بازبینی مشخصات فنی v1.4
برای رفع این مشکل، تیم ابتدا راهکار را بهصورت عمومی اعلام کرد تا نتایج نهایی بتواند با وعدههای اولیه سنجیده شود. آنها نسخه ۱.۴ مشخصات فنی را با تغییرات زیر منتشر کردند:
- محدود کردن نقطه پایانی: کلید
.../endpointاکنون فقط نقطه پایانی اندازهگیریشدهای را گزارش میکند که رکورد رفتار (Conduct Record) به آن تعلق دارد. - کلید جدید served_by: یک کلید جدید به نام
.../served_byاضافه شد که URL واقعی رسیدن درخواست را حمل میکند. این مقدار مستقیماً از درخواست گرفته میشود و هرگز از یک مقدار ثابت استفاده نمیکند. - اعتبارسنجی سختگیرانه: اگر مقدار
served_byنام URL متفاوتی را ذکر کند، حتی در صورت تطابق نقطه پایانی، عملیات شکست میخورد. مشخصات فنی اکنون این تفاوت را ثبت میکند به جای آنکه پنهانش کند. - تأییدیه های جدید: آنها دو مورد
metadata_echoed(برای تأیید حضور کلیدها تحت شناسه کانونی) وendpoint_bound(برای تأیید اینکه URL ارسال شده باserved_byبرابر است) را پیادهسازی کردند.
برای جلوگیری از تکرار این خطا در آینده، ابزار walk_reference_servers.py ساخته شد. این ابزار چهار ورکر (Worker) واقعی را بهصورت محلی اجرا میکند، URLها را در مبدأ عمومیشان نگه میدارد، بایتها را به localhost هدایت میکند و کلاینت را روی هر دو نسخه ارتباطی اجرا میکند. در مواجهه با کد قدیمی، این ابزار شکست را بازتولید کرد: سه سرور در آزمون endpoint_bound مردند. اما در کد اصلاحشده، ۸ از ۸ رصد (Walk) با موفقیت پاس شدند.
تأیید خارجی و نهایی
مهندس مستقل مذکور، اصلاحات را از سیستم خود تأیید کرد: ۷۶ تست داخلی در کامیت جدید پاس شدند و یک رصد زنده جدید امتیاز ۷ از ۷ گرفت. او همچنین پاسخ ضبطشده اصلی خود را از طریق کلاینت جدید بازپخش کرد که به درستی در آزمون endpoint_bound شکست خورد. او رصد جدید را ثبت کرد و اشاره نمود که این مورد، یک دیدگاه (Vantage) و یک نسخه ارتباطی را ایجاد میکند، نه یک شاهد دوم شمارششده.
کل این چرخه — از رسیدن پرسش پیش از نیمهشب در ژاپن تا فعال شدن اصلاحات پیش از ساعت ۱:۰۰ صبح و ثبت تأییدیه shortly after — تنها چند ساعت زمان برد.
این حادثه ثابت میکند که یک «تست سبز» صرفاً یک ادعاست، اما رکوردی که در دست یک غریبه است، یک سند است. برای مدیرانی که عاملهای هوش مصنوعی را مستقر میکنند، این بدان معناست که تضمین کیفیت (QA) داخلی برای زیرساختهای حساس کافی نیست. تنها راه تأیید رفتار عامل، ایجاد مسیری برای اعتبارسنجی مستقل شخص ثالث است که از بایتهایی استفاده کند که هر کسی بتواند آنها را هش کند.
در ادامه این مسیر، تیم دفتر ثبت خود را با مشخصات VLC-1 برای بررسی کامل بودن لاگهای حسابرسی (Audit-log) تطبیق داد. آنها ابتدا امتیاز L0 گرفتند چون ورودیها به پیشنیازهای (Predecessors) خود متصل نبودند و فاقد نشانگر پایان (End Marker) بودند؛ به این معنی که حذف جدیدترین ورودیها، باقیماندهها را همچنان معتبر میگذاشت. آنها بلافاصله یک Pull Request برای اصلاح این مورد ارسال کرده و امتیاز دفتر ثبت زنده را به L1 ارتقا دادند.
توسعهدهندگان اکنون میتوانند این اعتبارسنجی را از طریق pip install a2a-conduct-walk برای پایتون یا npm install a2a-conduct برای جاوااسکریپت (با استفاده از @a2a-js/sdk) پیاده کنند. پیش از سپردن کار به یک عامل ناشناس، میتوان با یک فراخوانی ابزار MCP در گیت (preflight_agent)، کارت، پرداختکننده و سوابق آن را خواند. تمام یافتهها، از جمله رشته گفتگوهای Issue و رکوردهای دفتر ثبت با sha256 بهصورت عمومی در دسترس و قابل محاسبه مجدد هستند.
گام بعدی شما
- اگر از تستهای Mock برای عاملهای خود استفاده میکنید، یک سناریوی «تست زنده» با کلاینت خارجی طراحی کنید.
- ابزار
a2a-conduct-walkرا برای بررسی صحت متادیتای عاملهای خود نصب و اجرا کنید. - در معماری سیستمهای عاملمحور، متادیتای پاسخ را به عنوان بخشی از منطق اعتبارسنجی (Assertion) قرار دهید، نه فقط به عنوان اطلاعات تکمیلی.
اما تأثیر این رویکرد بر کاهش هزینههای استنتاج در مقیاس بالا حتی جذابتر است — به تحلیل ما درباره بهینهسازی GPUها مراجعه کنید.




گفتگو