محققان Noma Labs نشان دادند که Agentic Workflows که به‌تازگی توسط GitHub منتشر شده است، می‌تواند برای انتشار فایل‌های مخزن خصوصی فریب بخورد؛ این موضوع نشان می‌دهد که تنها یک کامنت عمومی در یک issue می‌تواند یک دستیار هوش مصنوعی داخلی را به مجرایی برای نشت داده تبدیل کند.

این نقص از آن جهت اهمیت دارد که بدون نیاز به هیچ کد اکسپلویت خاصی، بررسی‌های امنیتی داخلی GitHub را دور می‌زند؛ یک مهاجم تنها کافی است یک issue به‌ظاهر بی‌خطر طراحی کند که عامل هوش مصنوعی آن را خوانده و بر اساس آن عمل کند.

نحوه عملکرد این آسیب‌پذیری

Agentic Workflows به یک عامل هوش مصنوعی اجازه می‌دهند تا با اجرای دستورات تعریف‌شده در یک فایل workflow، به رویدادهای GitHub (مانند issueهای جدید) پاسخ دهد. Noma Labs دریافت که این عامل تفاوتی بین دستورالعمل‌های مشروع workflow و متن جاسازی‌شده در یک کامنت ارسالی توسط کاربر قائل نمی‌شود. یک مهاجم می‌تواند با ارسال یک issue عمومی که درخواست یک مدیر را تقلید می‌کند و افزودن یک دستور پنهان، عامل را به مسیرهای زیر هدایت کند:

  1. باز کردن issue (که به صورت عمومی قابل مشاهده است).
  2. گنجاندن خطی که معمولی به نظر می‌رسد اما حاوی یک دستور مخفیانه است.
  3. تحریک هوش مصنوعی برای واکشی (fetch) فایل‌ها از یک مخزن خصوصی که workflow اجازه خواندن آن را دارد.
  4. واداشتن عامل به ارسال محتوای واکشی‌شده به عنوان پاسخ به همان issue.

محققان دریافتند که گنجاندن تنها کلمه “Additionally,” قبل از دستور پنهان، برای عبور از حفاظ‌های امنیتی GitHub کافی بود. به هیچ مجوز، توکن یا کد سفارشی اضافه‌ای نیاز نیست—فقط یک عبارت‌پردازی درست کافی است.

چرا این موضوع فراتر از یک باگ ساده است

این مشکل ساختاری است. عامل هوش مصنوعی هر متنی را که از یک رویداد مخزن دریافت می‌کند، قابل اعتماد تلقی می‌کند و به‌طور مؤثری محتوای تولیدشده توسط کاربر را به یک بردار ورودی (input vector) مشابه با SQL injection در یک اپلیکیشن وب تبدیل می‌کند. اگر یک workflow به عامل اجازه دسترسی به خواندن مخازن خصوصی و توانایی کامنت گذاشتن به صورت عمومی را بدهد، ترکیب این دو یک مسیر مستقیم برای استخراج داده (data exfiltration) ایجاد می‌کند.

آنچه GitHub می‌گوید

GitHub از این نقص مطلع شده است.

مراحل کاهش ریسک برای تیم‌ها

  • محدود کردن مجوزهای عامل: دسترسی خواندن/نوشتن به مخازن خصوصی را فقط در صورت ضرورت مطلق اعطا کنید.
  • مسدود کردن انتشار عمومی: workflowها را به‌گونه‌ای پیکربندی کنید که عامل‌ها نتوانند کامنت‌ها یا سایر artifacts را در issueهای عمومی منتشر کنند.
  • در نظر گرفتن تمام ورودی‌های خارجی به عنوان غیرقابل اعتماد: لایه‌های اعتبارسنجی اضافه کنید که متن‌های تولیدشده توسط کاربر را قبل از رسیدن به هوش مصنوعی، پاکسازی (sanitize) یا نادیده بگیرند.
  • بازرسی محرک‌های workflow: بررسی کنید که کدام رویدادها (issueها، pull requestها و غیره) عامل‌ها را فراخوانی می‌کنند و تأیید کنید که مجوزهای مرتبط با مورد استفاده‌ی مدنظر مطابقت دارند.

نکته کلیدی: یک دستیار هوش مصنوعی که می‌تواند کدهای خصوصی را بخواند و به صورت عمومی پست کند، تنها به اندازه مرزهایی که در اطراف آن تعیین می‌کنید، امن است. بدون محدودیت‌های دقیق مجوز و پاکسازی ورودی، یک کامنت عمومی ساده می‌تواند یک قابلیت بهره‌وری را به مجرای نشت داده تبدیل کند.