یه عنوان issue ساده، توکن Snowflake رو لو داد
خلاصهٔ کاملتر
به گفتهٔ تیم Wiz Research، ایجنت خودکار امنیتیشون به اسم Red Agent وقتی سازمان گیتهاب Snowflake رو اسکن کرد، ورکفلوی jira_issue.yml تو ریپوی عمومی snowflake-connector-net رو آسیبپذیر به script injection (یعنی تزریق دستور از راه ورودی غیرقابلاعتماد داخل بلوک run:) علامت زد. این ورکفلو با رویداد issues: opened اجرا میشد، پس هر کاربر گیتهابی میتونست فعالش کنه.
ریشهٔ مشکل یه تغییر تو PR #1218 بود که الگوی امن قبلی، یعنی ریختن عنوان issue توی یه متغیر env: و پارس کردنش با jq --arg، رو برداشت و بهجاش عنوان رو مستقیم وسط یه اسکریپت شل درج کرد. اسکیپ کردن با sed بعد از باز شدن قالب گیتهاب اجرا میشد، برای همین یه کوتیشن تکی توی عنوان کافی بود که از رشته بیرون بزنه. یعنی مهاجم فقط با نوشتن یه عنوان مناسب، دستور دلخواهش رو روی رانر اجرا میکرد.
یه شرط if: هم توی ورکفلو بود که بهنظر محافظ میاومد، ولی روی رویدادهای issue مقدار github.event.pull_request همیشه null هست، پس شرط عملاً همیشه درست از آب درمیاومد و هیچکس رو فیلتر نمیکرد. Red Agent هم موقع تست، اولین تلاشش با خطای سینتکس شل شکست خورد، اما خودش خطا رو تحلیل کرد، ورودیشو اصلاح کرد و بار دوم جواب گرفت.
توکنی که بیرون کشیده شد، دسترسی خواندنی به پروژههای مهندسی، انطباق امنیتی و باگبانتی Snowflake توی Jira میداد. Wiz روز ۲۳ ژوئن ۲۰۲۶ گزارش رو از راه HackerOne فرستاد و Snowflake همون روز ورکفلو رو با کامیت 1dc7766 (PR #1402) وصله کرد، توکن Jira رو روز بعد چرخوند و با بررسی لاگهای ممیزی تأیید کرد که تو اون پنجرهٔ پنجروزه فقط IPهای تست Wiz به سرویس زده بودن.
چیزی که تیم Wiz بیشتر روش تأکید داره خودِ باگ نیست، بلکه اینه که Copilot بهعنوان همنویسنده همون PR رو بررسی کرده و همهچیز رو سالم اعلام کرده، و اسکن GitHub Advanced Security هم دقیقاً همین فایل ورکفلو رو خونده ولی تزریق رو ندیده. به گفتهٔ اونها فاصلهٔ بین ورود یه باگ و کشف خودکارش داره کوتاه میشه، پس چرخهٔ وصله باید سریعتر بشه و توکنها عمر کوتاهتری داشته باشن.
نکات کلیدی:
- باگ روز ۱۸ ژوئن ۲۰۲۶ با مرج شدن PR #1218 زنده شد و ۲۳ ژوئن کشف و گزارش شد.
- ورودی مهاجم عنوان issue بود و ورکفلو با رویداد issues: opened برای هر کاربر ناشناسی اجرا میشد.
- شرط if: محافظ بیاثر بود، چون github.event.pull_request روی رویداد issue همیشه null هست.
- توکن Jira لو رفته با هویت qa@snowflake.net به فضای اتلسین Snowflake دسترسی خواندنی داشت.
- وصله (کامیت 1dc7766، PR #1402) الگوی امن env: بهعلاوهٔ jq --arg رو برگردوند و توکن ۲۴ ژوئن چرخونده شد.




