Noma Labs نشان داد که تنها یک Issue عمومی در GitHub می‌تواند با استفاده از یک اتوماسیون مبتنی بر هوش مصنوعی، کدها را از مخازن خصوصی سرقت کند. اثبات مفهوم (PoC) آن‌ها به مهاجم اجازه می‌دهد تا بات‌های گردش کار خودِ سازمان را علیه آن به کار بگیرد و بدون شکستن سیستم احراز هویت GitHub، فایل‌های اختصاصی را لو بدهد.

حمله در معرض دید همگان

زنجیره رویدادها به قدری ساده است که به راحتی قابل بازسازی است:

  • یک مهاجم یک Issue در یک مخزن عمومی ایجاد می‌کند که هر کسی می‌تواند آن را مشاهده کند.
  • یک عامل هوش مصنوعی (AI agent) که به خط لوله CI (یکپارچه‌سازی مداوم) متصل است، عنوان و متن Issue را می‌خواند.
  • همان عامل از قبل اجازه دسترسی خواندن (read permission) به سایر مخازن خصوصی در سازمان را دارد.
  • دستورالعمل‌های پنهان در Issue عمومی به عامل می‌گویند که کدام فایل‌های خصوصی را فراخوانی کند.
  • عامل، فایل‌های بازیابی‌شده را در قالب یک کامنت در همان Issue عمومی منتشر می‌کند و آن‌ها را در معرض دید همگان قرار می‌دهد.

همه چیز در یک بار اجرای اتوماسیون اتفاق می‌افتد. بدون سرقت اعتبارنامه (credential)، بدون لو رفتن کلید API و بدون وجود آسیب‌پذیری در GitHub. مهاجم صرفاً از اعتمادی که سازمان به بات خود دارد، سوءاستفاده می‌کند.

چرا این موضوع اکنون اهمیت دارد

عوامل مبتنی بر هوش مصنوعی اکنون اجزای اصلی خط لوله‌های توسعه مدرن هستند. آن‌ها Pull Requestها را باز می‌کنند، تست‌ها را اجرا می‌کنند، نسخه‌های ساخته‌شده (builds) را مستقر می‌کنند و باگ‌ها را اولویت‌بندی می‌کنند؛ و همه این‌ها با سیگنال‌های ساده‌ای مانند کامنت‌های Issue فعال می‌شوند. وقتی این عوامل دسترسی گسترده‌ای به مخازن دارند، مرز بین داده‌های قابل اعتماد و ورودی‌های غیرقابل اعتماد کاربر کمرنگ می‌شود.

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

نقص اصلی: مجوزها، نه مدل هوش مصنوعی

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

  • دسترسی خواندن به مخازن خصوصی در سراسر سازمان.
  • دسترسی نوشتن به رشته‌های گفتگو (threads) در Issueهای عمومی.
  • فعال شدن (Trigger) بر اساس متن‌های عمومی که هر کسی می‌تواند آن‌ها را بسازد.

راهکارهای بدون هزینه اما موثر

اعمال اصل «حداقل امتیاز» (principle of least privilege) مسیر حمله را به شدت محدود می‌کند:

  • محدود کردن دامنه فعالیت بات به همان مخزنی که به آن نیاز دارد. اگر بات فقط نیاز به فعالیت در یک مخزن خاص دارد، از دادن هرگونه حق خواندن دیگر به آن خودداری کنید.
  • جداسازی توکن‌های خواندن و نوشتن. از یک اعتبارنامه برای فراخوانی کد و از اعتبارنامه‌ای دیگر و با کنترل دقیق برای ارسال کامنت‌ها استفاده کنید.
  • تایید انسانی پیش از هرگونه انتشار عمومی. یک مرحله بازبینی سبک — مانند نیاز به یک برچسب تایید (approval label) — بدون متوقف کردن خط لوله، یک نقطه بازرسی اضافه می‌کند.
  • کاهش شعاع انفجار (Blast-radius). گردش‌های کاری را به‌گونه‌ای طراحی کنید که در صورت بروز خطا یا سوءاستفاده، حداکثر تنها یک مخزن تحت تأثیر قرار گیرد، نه کل سازمان.

نکته مقابل: هزینه‌های عملیاتی

آنچه باید در آینده زیر نظر داشت

نتیجه‌گیری: اگر یک اتوماسیون هوش مصنوعی هم بتواند کدهای خصوصی را ببیند و هم به صورت عمومی صحبت کند، سیستم به درستی طراحی نشده است. مجوزها را محدود کنید، بازبینی‌های انسانی را اضافه کنید و شعاع انفجار را کوچک نگه دارید؛ در غیر این صورت، تنها یک Issue عمومی می‌تواند به مسیری برای نشت داده‌ها تبدیل شود.