گیتهاب پس از سالها تلاش برای آموزش توسعهدهندگان در زمینه استفاده ایمن از pull_request_target، سرانجام رویکرد امنیتی خود را با اعمال تنظیمات پیشفرض امنتر تغییر داد. این شرکت با تقویت امنیت actions/checkout در نسخه 7، قابلیت جدیدی را برای مقابله با حملات Pwn Request ارائه کرده است؛ حملاتی که از پیکربندی نادرست تریگر گردش کار (Workflow Trigger) مربوط به pull_request_target سوءاستفاده میکنند و امکان اجرای کد تحت کنترل مهاجم با سطح دسترسی کامل گردش کار را فراهم میسازند.
به گفته گیتهاب، نسخه actions/checkout 7 از این پس بهصورت پیشفرض مانع دریافت کدهای تأییدنشدۀ مخازن فورکشده (Fork) در گردشکارهای ناامن میشود؛ اقدامی که با هدف کاهش ریسک حملات Pwn Request، حفاظت از مخازن کد و تقویت امنیت زنجیره تأمین نرمافزار انجام شده است.
چگونگی مسدودسازی مسیر حملات Pwn Request
گیتهاب در 18 ژوئن اعلام کرد که نسخه actions/checkout 7 از این پس هنگام استفاده در رویدادهای pull_request_target یا workflow_run، در صورت تلاش برای دریافت کدهای بررسینشده مربوط به درخواستهای Pull ارسالشده از مخازن فورکشده، بهصورت خودکار اجرای گردش کار را متوقف کرده و آن را با خطا خاتمه میدهد.
بر اساس تغییرات نسخه (Changelog)، توسعهدهندگان تنها در صورتی میتوانند این محدودیت امنیتی را دور بزنند که بهصورت آگاهانه گزینه allow-unsafe-pr-checkout را به actions/checkout اضافه کرده و از این کنترل امنیتی انصراف (Opt Out) دهند.
این تغییر، آغاز رویکرد امنیت بهصورت پیشفرض در گیتهاب به شمار میرود؛ رویکردی که در آن، اعمال سیاستهای امنیتی دیگر به تصمیم یا نحوه پیکربندی توسعهدهندگان وابسته نیست و بهصورت پیشفرض توسط خود پلتفرم اعمال میشود.
همچنین گیتهاب اعلام کرد که از 16 جولای این تنظیمات پیشفرض از طریق بکپورت (Backport) در اختیار تمام نسخههای اصلی پشتیبانیشده نیز قرار خواهد گرفت تا پروژههایی که هنوز از نسخههای قدیمیتر استفاده میکنند، بدون نیاز به ارتقا به نسخههای جدید، از این قابلیت امنیتی بهرهمند شوند.
به گفته گیتهاب، گردشکارهایی که روی یک تگ نسخه اصلی مانند actions/checkout@v4 پین شدهاند، این تغییر را بهصورت خودکار دریافت خواهند کرد. اما گردشکارهایی که روی یک SHA مشخص یا نسخههای فرعی (Minor) و اصلاحی (Patch) پین شدهاند، تحت تأثیر بکپورت قرار نمیگیرند و باید از طریق Dependabot (ابزار مدیریت و بهروزرسانی خودکار وابستگیها) یا فرآیندهای استاندارد مدیریت بهروزرسانی، نسخه خود را ارتقا دهند.
گیتهاب در پایان هشدار داد که حملات Pwn Request تنها به این سناریو محدود نمیشوند و ممکن است از مسیرهای دیگری نیز انجام شوند؛ به همین دلیل، این شرکت اعلام کرده است که در نسخههای آینده احتمال اعمال اقدامات بیشتر برای ایمنسازی امنیتی (Hardening) سایر رویدادها نیز وجود دارد.
نقش pull_request_target در حملات Pwn Request
اگرچه حملات Pwn Request از طریق pull_request_target انجام میشوند، اما مشکل از خود این تریگر نیست؛ بلکه به نحوه پیکربندی و استفاده نادرست از آن در GitHub Actions بازمیگردد.
در GitHub Actions، تریگر pull_request بهگونهای طراحی شده است که هنگام پردازش درخواستهای Pull (Pull Request) ارسالشده از مخازن فورکشده، دسترسی گردش کار به اطلاعات حساس، کلیدهای API، توکنهای سرویس و اعتبارنامهها را محدود کند. این مکانیزم امنیتی از افشای اطلاعات حساس جلوگیری میکند، اما در مقابل، ممکن است اجرای برخی فرآیندهای خودکارسازی را با محدودیت مواجه سازد.
به همین دلیل، برخی توسعهدهندگان از تریگر pull_request_target استفاده میکنند؛ تریگری که مجوزهای بیشتری در اختیار گردش کار قرار میدهد. با این حال، اگر این تریگر همراه با actions/checkout بهگونهای پیکربندی شود که کدهای بررسینشده درخواستهای Pull ارسالشده از مخازن فورکشده را دریافت کند، مهاجم میتواند کد تحت کنترل خود را با سطح دسترسی کامل گردش کار اجرا کرده و به اطلاعات حساس مخزن یا سایر منابع حساس دسترسی پیدا کند.
گیتهاب در تشریح این ضعف امنیتی اعلام کرده است:
«دریافت (Checkout) نسخه HEAD مربوط به یک درخواست Pull بررسینشده از یک فورک در چنین گردشکارهایی، معمولاً به کد تحت کنترل مهاجم اجازه میدهد با سطح دسترسی کامل گردش کار اجرا شود.»
حملات اخیر TeamPCP و سوءاستفاده از GitHub Actions
با وجود این، خسارتهای قابلتوجهی پیش از اعمال این تغییرات به پروژههای متنباز وارد شده است. طی ماههای اخیر، مخازن متنباز هدف حملات هدفمند گروه هکری TeamPCP قرار گرفتهاند؛ حملاتی که با استفاده از تکنیکهای مختلف، از جمله حملات Pwn Request، انجام شدهاند.
یکی از شاخصترین نمونهها، حمله ماه گذشته این گروه بود که در جریان آن 170 پکیج npm، از جمله پکیجهای مرتبط با اکوسیستم TanStack Router، از طریق یک اکسپلویت مبتنی بر Pwn Request آلوده شدند.
در رخدادی جداگانه که ارتباطی با این روش حمله نداشت، خود گیتهاب نیز هدف یک نفوذ سایبری قرار گرفت و مهاجمان موفق شدند کد منبع نزدیک به 3800 مخزن داخلی این شرکت را استخراج کنند.
اگرچه این اقدامات با تأخیر انجام شدهاند، اما گیتهاب اکنون مجموعهای از اصلاحات امنیتی را برای افزایش امنیت پلتفرم خود آغاز کرده است. یکی از این اقدامات که اوایل همین ماه معرفی شد، محدودسازی اجرای خودکار اسکریپتهای نصب در npm است؛ تغییری که با هدف کاهش ریسک حملات علیه زنجیره تأمین نرمافزار اعمال شده است.