آلوده کردن Claude Code: یک ایشوی گیتهاب برای شکستن زنجیره تأمین
خلاصهٔ کاملتر
پژوهشگر امنیتی RyotaK از GMO Flatt Security توی این مقاله یه آسیبپذیری در GitHub Actions کلود کد رو توضیح میده که میتونست هر مخزنی رو که از این workflow استفاده میکنه به خطر بندازه — از جمله مخازن خود Anthropic. این workflow بهصورت پیشفرض دسترسی خواندن و نوشتن روی کد، ایشوها، pull requestها، discussionها و فایلهای workflow داره، پس دور زدنش خطرناکه.
برای جلوگیری از سوءاستفاده، این Action بهصورت پیشفرض اجازه نمیده کاربرهای بدون دسترسی write، workflow رو فعال کنن؛ این کنترل توی تابع checkWritePermissions پیاده شده. ولی نکتهی ظریف اینه که این تابع هر GitHub App رو بدون توجه به دسترسی واقعیاش، بیقیدوشرط عبور میداد.
مشکل اینجاست که GitHub Appها روی مخازن عمومی دسترسی ضمنی دارن: درست مثل هر کاربر معمولی که میتونه روی یه مخزن ایشو باز کنه، یه GitHub App هم با توکن نصب خودش میتونه روی هر مخزن عمومی ایشو یا PR بسازه، حتی اگه روی اون مخزن نصب نشده باشه. پس مهاجم میتونست یه App بسازه، روی مخزن خودش نصبش کنه، و با توکنش روی مخزن هدف یه ایشو بسازه تا workflow فعال بشه — و چون actor یه App بود، چک دسترسی رو رد میکرد. حالت tag یه چک اضافی برای انسان بودن داشت، ولی حالت agent این چک رو نداشت.
بعد از این دور زدن، مهاجم با یه ایشوی مخرب میتونست از طریق تزریق پرامپت غیرمستقیم (indirect prompt injection) رفتار کلود کد رو منحرف کنه. متن ایشو طوری ساخته میشد که شبیه یه پیام خطا به نظر برسه؛ کلود فکر میکرد خوندن ایشو شکست خورده و سعی میکرد با اجرای دستورهای جاسازیشده توی توضیحات، خودش رو ترمیم کنه. از اونجا، با خوندن فایل شبهسیستمی /proc/self/environ میشد متغیرهای محیطی و secretها رو بیرون کشید.
حیاتیترین secretها ACTIONS_ID_TOKEN_REQUEST_TOKEN و ACTIONS_ID_TOKEN_REQUEST_URL بودن. اینها اعتبارنامههای لازم برای درخواست یه توکن OIDC از GitHub هستن. مهاجمی که اینها رو به دست میآورد، میتونست کل فرایند تبادل توکن رو تکرار کنه: اول یه توکن OIDC بگیره، بعد با اون از بکاند Anthropic یه installation token برای Claude GitHub App بگیره — توکنی با دسترسی نوشتن روی محتوای مخزن، ایشوها، PRها و workflowها. چون خود مخزن anthropics/claude-code-action هم از این workflow استفاده میکرد، مهاجم میتونست کد منبع خود Action رو دستکاری کنه و آلودگی رو به همهی مخازن پاییندستی سرایت بده.
جدا از این، پژوهشگر یه پیکربندی اشتباه رایج هم پیدا کرد: تنظیم allowed_non_write_users: "*" که به هر کاربری اجازهی فعال کردن workflow رو میداد. حتی با دسترسی بهظاهر محدودِ issues: write، باز هم مهاجم میتونست ایشوها رو ویرایش یا حذف کنه، یا با تغییر یه ایشو بعد از ساختش توسط یه کاربر معتمد ولی قبل از خوندنش توسط کلود، دستور مخرب تزریق کنه. Anthropic این آسیبپذیریها رو پذیرفته و در نسخهی v1.0.94 وصله کرده؛ از جمله با اضافه کردن چک انسان بودن actor در حالت agent.
نکات کلیدی:
- چک دسترسی checkWritePermissions هر GitHub App رو بیقیدوشرط عبور میداد.
- دسترسی ضمنی Appها روی مخازن عمومی، این چک رو در حالت agent قابل دور زدن میکرد.
- با تزریق پرامپت و خوندن /proc/self/environ، اعتبارنامههای OIDC قابل سرقت بود.
- پیکربندی allowed_non_write_users: "*" هم مسیر دیگهای برای آلودگی باز میکرد؛ همه در v1.0.94 وصله شد.




