EN
→ بازگشت به خبرخوان
شمارهٔ ۰۴۱۴Rust۲ دقیقه۳ منبع

نشت کش Miri؛ وقتی بهداشت متغیرهای محیطی Cargo به یک قانون امنیتی CI تبدیل می‌شود

هشدار تیم پاسخ‌گویی امنیتی Rust نشان می‌دهد که ترکیب cargo miri، کش کردن target و اسرارِ گسترده در CI چگونه می‌تواند مسیر افشای اطلاعات در Pull Requestها ایجاد کند.

اشتراک‌گذاری
راست (Rust)
نشت کش Miri؛ وقتی بهداشت متغیرهای محیطی Cargo به یک قانون امنیتی CI تبدیل می‌شود
تصویر: تولید هوش مصنوعی

تیم پاسخ‌گویی امنیتی Rust در ۲۱ سپتامبر یک حالت خطای محدود اما مهم در CI را اعلام کرد: Miri متغیرهای محیطی را در target/ ذخیره می‌کرد؛ بنابراین کش کردن این پوشه می‌توانست اسرار را برای jobهای بعدی Pull Request حفظ کند.

این هشدار به این معنا نیست که خود Miri یک آسیب‌پذیری اجرای کد دلخواه است. افشا به ترکیب مشخصی نیاز دارد: CI باید cargo miri را اجرا کند، مرحله Miri از طریق متغیرهای محیطی به اسرار دسترسی داشته باشد، workflow پوشه target/ را کش کند و jobهای Pull Request بتوانند آن کش را بخوانند. در پیکربندی‌های رایج GitHub Actions، jobهای شاخه اصلی کش را می‌نویسند و Pull Requestها آن را می‌خوانند.

درس عملی، فراتر از Miri است. خروجی‌های build به‌طور خودکار عاری از اسرار نیستند. هشدار Rust می‌گوید Cargo، Miri و Rust تضمین نمی‌کنند که متغیرهای محیطی هرگز در artifactهای کامپایل کپی نشوند؛ اسکریپت‌های build نیز می‌توانند مسیرهای ماندگاری جداگانه‌ای ایجاد کنند.

برای توسعه‌دهندگان ICP، بازبینی عملی چنین است:

  • همه workflowهایی را که cargo miri را اجرا می‌کنند، از جمله workflowهای قابل‌استفاده‌مجدد، پیدا کنید.
  • بررسی کنید اسرار در سطح کل workflow یا job قرار نگرفته باشند و فقط به stepهای لازم داده شوند.
  • actionهای کش را برای target/ یا پوشه‌های معادلِ artifactهای build بررسی کنید.
  • مطمئن شوید jobهای Pull Request نمی‌توانند کش تولیدشده توسط jobهای دارای اسرار را بخوانند؛ در غیر این صورت کش job مربوط به Miri را غیرفعال کنید.
  • پس از اصلاح، کش‌های درگیر را پاک کنید و درباره چرخاندن اعتبارنامه‌هایی که ممکن است افشا شده باشند تصمیم بگیرید.

راه‌حل کوتاه‌مدت اعلام‌شده برای Miri، متغیرهای ذخیره‌شده را به مقادیر CARGO_، به‌جز CARGO__TOKEN، و OUT_DIR محدود می‌کند. در طراحی بلندمدت، Miri و Cargo ممکن است بتوانند فهرست متغیرهای محیطی لازم را دقیق‌تر با یکدیگر هماهنگ کنند.

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

قاعده پایدار ساده است: هر فرایندی که بتواند در کش بنویسد، باید قادر به ماندگار کردن ورودی‌های حساس فرض شود. اسرار را از jobهایی که artifactهای قابل‌استفاده‌مجدد تولید می‌کنند دور نگه دارید؛ حتی اگر ابزار اجراشده برای آزمایش یا شناسایی رفتار تعریف‌نشده باشد.

برچسب‌هاRustMiriGitHub Actionsامنیت CI
منابع مستند۳ مرجع
  1. [۰۱]GitHub Actions leaking secrets when Miri output is cachedblog.rust-lang.org ↗
  2. [۰۲]Secretsdocs.github.com ↗
  3. [۰۳]Miri: An interpreter for Rust’s mid-level intermediate representationgithub.com ↗
خواندنی بعدی

خبرخوان را در ایمیل بگیرید

هر سیگنال تازه، مستقیم از خط تولید. بدون مزاحمت، لغو عضویت در هر زمان.

خوراک RSS در دسترس · بدون هرزنامه