مرز کش Miri اکنون یک بررسی امنیتی برای CI در Rust است
افشای امنیتی تیم Rust نشان میدهد که ترکیب cargo miri، دسترسی گسترده به اسرار و کش قابلخواندن برای pull requestها چگونه میتواند اعتبارنامههای CI را افشا کند و اکنون چه تغییراتی لازم است.

جدیدترین درس امنیتی Rust درباره محاسبات اشارهگرهای ناامن نیست؛ درباره چیزهایی است که یک job در CI پشت سر خود باقی میگذارد.
تیم پاسخگویی امنیتی Rust در ۲۱ سپتامبر ۲۰۲۶ اعلام کرد که Miri برای حفظ وضعیت موردنیاز ساخت بین اجراها، همه متغیرهای محیطی را در پوشه target/ ذخیره میکرد. اگر یک workflow در GitHub Actions این پوشه را کش میکرد، اسراری که در مرحله اجرای Miri در دسترس بودند میتوانستند در کش باقی بمانند و از طریق pull requestها خوانده شوند.
این مشکل همگانی نیست و به شرایط مشخصی نیاز دارد. پروژه زمانی در معرض خطر است که هر چهار مورد همزمان وجود داشته باشند: اجرای cargo miri در CI، دسترسی مرحله Miri به اسرار، کششدن target/ و امکان خواندن آن کش از jobهای pull request. تیم Rust صراحتاً گفته است که بررسی اکوسیستم ممکن است کامل نباشد؛ بنابراین نگهداریکنندگان باید workflowهای خود را بررسی کنند و فقط به نتیجه آن اسکن تکیه نکنند. این caveat در هر دو مقاله لحاظ شده است.
برای توسعهدهندگان ICP، این موضوع Miri را از یک ابزار محلی برای یافتن رفتار تعریفنشده به یک مرز ایزولاسیون در CI تبدیل میکند. یک مخزن canister ممکن است تست، lint، اجرای Miri و آمادهسازی استقرار را در یک workflow انجام دهد، اما این مراحل به اعتبارنامههای یکسان نیاز ندارند. توکنهای registry، اعتبارنامههای ابری، کلیدهای استقرار و سایر اسرار نباید در اختیار jobی باشند که خروجی ساخت قابلبازاستفاده تولید میکند، مگر آنکه این دسترسی واقعاً ضروری باشد.
واکنش فوری باید عملیاتی باشد. اسرار را از محیط jobهای Miri حذف کنید، کش target/ را برای این jobها غیرفعال کنید یا تا زمان بازبینی workflow، Miri را موقتاً متوقف کنید. اگر احتمال میدهید job قبلاً اعتبارنامهای را افشا کرده است، کش مربوطه را پاک کنید و اسرار آسیبدیده را چرخانده یا تعویض کنید. راهنمای رسمی GitHub نیز استفاده از اعتبارنامههای کمدسترسی، بررسی نحوه پردازش دادههای حساس توسط دستورات workflow و چرخش اسرار پس از افشا را توصیه میکند.
راهحل کوتاهمدت Rust دامنه متغیرهایی را که Miri حفظ میکند محدود میسازد: متغیرهای CARGO_* بهجز CARGO_*_TOKEN و همچنین OUT_DIR. تیم Rust گفته است این اصلاح در nightly مورخ ۲۲ سپتامبر ۲۰۲۶ در دسترس خواهد بود. این تغییر رفتار مشخص Miri را کاهش میدهد، اما خروجی دلخواه build را برای کشکردن ایمن نمیکند. در همان افشا هشدار داده شده که build scriptها و ابزارهای دیگر نیز ممکن است دادههای محیطی را در artifactها کپی کنند.
قاعده پایدار ساده است: هر کشی را که یک job دارای دسترسی ممتاز مینویسد، بالقوه آلوده به محیط همان job فرض کنید. در پروژههای ICP، اعتبارسنجی را از اعتبارنامههای استقرار جدا کنید، کشهای قابلخواندن برای pull request را از jobهای دارای اسرار دور نگه دارید و هر زمان ابزار جدیدی وارد workflow شد، مرزهای آن را دوباره بررسی کنید. Rust باگ محدود Miri را پیدا و اصلاح کرد؛ اما مسئولیت مرزهای pipeline همچنان با نگهداریکنندگان است.
خبرخوان را در ایمیل بگیرید
هر سیگنال تازه، مستقیم از خط تولید. بدون مزاحمت، لغو عضویت در هر زمان.


