Yönetici Özeti ve Mimari Önem
Rust Güvenlik Müdahale Ekibi, Rust'ın deneysel MIR tabanlı yorumlayıcısı Miri'deki mimari bir davranış için kritik bir güvenlik analizi ve acil düzeltme yayınladı. Bu sorun, cargo miri aracının, birden çok dahili Miri çağrısı arasında durumu köprülemek için geçmişte ortam değişkenlerini doğrudan target/ derleme dizinine nasıl serileştirdiğinden ve depoladığından kaynaklanmaktadır. Bu tasarım tercihi gerekli yürütme bağlamını başarıyla korurken, özellikle GitHub Actions önbellekleme mekanizmaları gibi yaygın Sürekli Entegrasyon (CI) platformlarıyla entegre edildiğinde ciddi bir akış sonu savunmasızlığı yarattı.
Modern yazılım tedarik zinciri güvenliğinde, kalıcı önbellekleme ile çekme isteği (PR) iş akışlarının kesişimi karmaşık bir tehdit vektörü oluşturur. GitHub Actions, işlem hattı yürütme sürelerini optimize etmek için depoların target/ gibi derleme yapıtlarını önbelleğe almasına olanak tanır. Tipik olarak sürdürücüler, birincil dalların önbelleğe yazdığı, güvenilmeyen PR dallarının ise önbellek zehirlenmesini önlemek için yalnızca buradan okuyabileceği erişim sınırları uygular. Ancak Miri, hassas belirteçler ve kimlik bilgileri dahil tüm ortam değişkeni haritasını target/ içine kalıcı hale getirdiği için, bir PR açabilen herhangi bir kötü amaçlı aktör bir CI çalıştırmasını tetikleyebilir, bu sırları paylaşılan önbellekten çıkarabilir ve ardından taahhütleri zorla iterek (force-push) veya üzerine yazarak izlerini kapatabilirdi. Bu analiz, maruz kalmanın mekanizmasını, uygulanan mimari düzeltmeleri ve Rust sürdürücüleri için gerekli azaltma adımlarını açıklamaktadır.
Temel İyileştirmeler ve Geliştirici Ergonomisi
Miri geliştirme ekibi tarafından uygulanan kısa vadeli düzeltme, derleme sırasında ortam değişkenlerinin nasıl ele geçirildiğini ve kalıcı hale getirildiğini temelden değiştirmektedir. Güncellenen Miri mantığı, tüm çalışma zamanı yürütme ortamının kapsamlı bir anlık görüntüsünü yakalamak yerine, yalnızca belirlenmiş ad alanlarını açıkça filtreler ve korur. Özellikle çerçeve artık standart OUT_DIR değişkeninin yanı sıra CARGO_* ortam değişkenlerini izole ederken, CARGO_*_TOKEN gibi hassas kimlik bilgilerini açıkça şerbetten arındırır. Bu hassas kapsam belirleme, dahili Miri süreçlerinin, önbellek kalıcılığına yönlendirilen derleme yapıtlarına hassas çalışma zamanı kimlik bilgilerini istemeden serileştirmeden gerekli derleme parametrelerini korumasını sağlar.
Geliştirici ergonomisi açısından bu güncelleme, güvenli ortam hijyenine bağlı projeler için sıfır iş akışı yeniden yapılandırması gerektirir. Bununla birlikte, CI boru hatlarının sırları nasıl ele aldığının yapısal olarak yeniden değerlendirilmesini zorunlu kılar. Rust, araç zinciri düzeyinde maruz kalma penceresini daraltarak tedarik zincirinin sertleştirilmesi konusunda proaktif bir duruş sergiliyor. Geliştiricilerin artık önbelleğe alma yoluyla optimum derleme süreleri ile mutlak güvenlik arasında seçim yapması gerekmmiyor; derleyicinin kendisi artık koruyucu bir sınır görevi görerek iş düzeyi yapılandırmaları aşırı derecede izin verici olsa bile kazara sır dışarı sızmasını engelliyor.
Mimari Karşılaştırma Matrisi
| Metrik / Boyut | Önceki Temel Çizgi (cargo miri) |
Güncellenen Sürüm (github-actions-leaking-secrets-w) |
Mimari Etki |
|---|---|---|---|
| Ortam Serileştirilmesi | Tüm aktif ana bilgisayar ortam değişkenlerinin tam yakalanması. | Filtrelenmiş yakalama (CARGO_* belirteçler hariç, OUT_DIR). |
Önbellek sızdırma saldırı yüzeyini büyük ölçüde azaltır. |
| Bellek ve Depolama Ek Yükü | Gereksiz ortam haritalarının target/ içine serileştirilmesi nedeniyle daha yüksek ayak izi. |
Yalnızca derlemeyle ilgili bağlam anahtarlarını depolayan daha yalın ayak izi. | Önemli güvenlik kazanımı ile minimum performans iyileştirmesi. |
| API ve Araç Entegrasyonu | Cargo için şeffaf, ancak ortam durumu durumuna büyük ölçüde bağımlı. | cargo-miri/src/util.rs içinde uygulanan açık kapsam belirleme. |
Cargo ve Miri yürütme aşamaları arasında daha sıkı entegrasyon birleşimi. |
| Önbellek Güvenlik Profili | Paylaşılan GitHub Actions önbellekleriyle eşleştirildiğinde yüksek derecede savunmasız. | PR önbellekleri aracılığıyla yetkisiz sır çıkarımına karşı dirençli. | Genel ve özel depolar için kutudan çıktığı gibi güvenli çalışma. |
Kritik Değişiklikler ve Geçiş Uyarıları
Bu sürüm, derleme betikleri veya özel çağrılar aracılığıyla Miri'ye aktarılan isteğe bağlı ortam değişkenlerine güvenen niş iş akışlarını etkileyebilecek hedeflenen değişiklikleri sunar. Miri test paketiniz, CI işinde küresel olarak enjekte edilen CARGO_* dışındaki ortam değişkenlerine güveniyorsa, bu değişkenler önbelleğe alınmış çalışmalarda artık Miri örnekleri tarafından görülemeyecektir.
Projeler, gerekli yapılandırma değerlerinin ortam ortamı sızıntısına güvenmek yerine komut satırı bayrakları veya kısıtlı CARGO_* ön ekli değişkenler aracılığıyla açıkça iletilmesini sağlamak için CI yapılandırmalarını denetlemelidir. Ek olarak, daha önce savunmasız yapılandırmaları çalıştıran sürdürücüler, mevcut GitHub Actions önbelleklerini derhal temizlemeli ve geçmiş PR yürütme yollarına maruz kalmış olabilecek tüm sırları döndürmelidir.
Adım Adım Yükseltme Kılavuzu
Deponuzun Miri ve GitHub Actions önbellekleri aracılığıyla ortam değişkeni sızıntısına karşı tamamen korunduğundan emin olmak için şu düzeltme adımlarını uygulayın:
Araç Zincirini Güncelleyin veya Hızlı Düzeltmeler Uygulayın Miri düzeltmesini içeren gece (nightly) araç zincirini kullandığınızdan emin olun veya sırları yalnızca Miri dışı adımlarla sınırlandırarak iş akışı dosyanızda hızlı bir düzeltme uygulayın.
İş Akışı Sırlarını İzole edin Küresel ortam sırlarını kaldırmak ve bunları yalnızca kimlik doğrulama gerektiren belirli adımlara iletmek için GitHub Actions YAML yapılandırmanızı değiştirin:
jobs: miri-test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Run Miri # Sırlar bu adımın ortamından hariç tutulmuştur run: cargo miri testÖnbellekleri Temizleyin ve Kimlik Bilgilerini Döndürün Deponuzun Actions > Caches altındaki GitHub ayarlarına gidin,
target/için tüm mevcut önbellek girişlerini silin ve önceki CI çalıştırmaları sırasında erişilebilir olan tüm belirteçleri veya API anahtarlarını derhal döndürün.
