Rust’ta 86 Dakikalık Saldırı, Derleme Adımını Hedef Aldı
arrayref 0.3.10 saldırısı, Rust projelerinde uygulama çalışmadan önce build script’lerinin neden güvenlik sınırı sayılması gerektiğini gösterdi.
Bir Rust projesini derlemek, 20 Ağustos 2026’da bazı geliştiriciler için uygulamayı çalıştırmaktan daha riskli hale geldi. arrayref paketinin 0.3.10 sürümü, geliştiricilerin çoğunun kodunu çağırmadan önce çalışan bir bağımlılık taşıyordu. Cargo bu bağımlılığı derlerken, saldırganın build script’i uzaktaki bir yükü indirmeye çalışıyordu.
Bu olayı seçmemin nedeni yalnızca Rust ekosistemini ilgilendirmesi değil. Hacker News’te ilgili gönderi 500’den fazla yorum aldı. r/programming’deki tartışmada geliştiriciler Cargo’nun build script davranışını, sürüm sabitlemeyi ve bağımlılık incelemesini tartıştı. Rust’ın güvenlik ekibi de aynı gün resmi açıklama yayımladı. RustSec kaydı ve GitHub Advisory Database girdisi, olayın hafta boyunca bağımsız kanallarda izlenebildiğini doğruluyor. (news.ycombinator.com)
Saldırı uygulamanın içine değil, derleme zincirine girdi
Rust Security Response Team’in açıklamasına göre olay 20 Ağustos 2026 saat 07:15 UTC’de proc-macro1 adlı paketin kötü amaçlı olduğunun bildirilmesiyle başladı. Paket, derleme sırasında bir payload indiren build script içeriyordu. Ardından popüler arrayref paketinin yeni yayımlandığı ve bu pakete bağımlılık eklediği fark edildi. Aynı bakım hesabına ait internment ve append-only-vec paketleri de etkilenmişti. (blog.rust-lang.org)
Etkilenen sürümler kısa süre çevrimiçi kaldı. arrayref@0.3.10 86 dakika sonra silindi. internment@0.8.7 90 dakika, append-only-vec@0.1.9 ise 107 dakika sonra kaldırıldı. RustSec kaydında arrayref@0.3.10 için 2.285 indirme göründüğü ve bilinen gerçek kullanım kanıtı bulunmadığı yazıyor. Bu bilgi rahatlatıcı, fakat tek başına yeterli değil. Silinen bir paketin hangi geliştirici makinesinde veya CI işinde derlendiğini merkezi bir kayıtla eksiksiz bilmek mümkün değil. (blog.rust-lang.org)
Buradaki yöntem basit ama etkili. Saldırgan, gerçek proc-macro2 paketinin adına benzeyen proc-macro1 adını kullandı. İlk sürüm temiz bir kopya gibi görünürken sonraki sürümde kötü amaçlı build.rs devreye girdi. arrayref paketinin kendisindeki makro kodu değişmemişti. Değişiklik bağımlılık bildirimindeydi. Bu yüzden kaynak koduna hızlıca bakan bir geliştirici, asıl farkı göremeyebilirdi. (github.com)
Bana kalırsa olayın en rahatsız edici kısmı burada. Rust’ın bellek güvenliği, derleme sırasında çalıştırılan her şeyin güvenli olduğu anlamına gelmiyor. build.rs, proc-macro ve benzeri mekanizmalar geliştirici makinesinin veya CI runner’ın yetkileriyle çalışabiliyor. Uygulama daha ayağa kalkmadan dış ağa bağlantı kurulabiliyor.
Hacker News ve Reddit tartışmalarında geliştiricilerin bir bölümü bu davranışın Cargo’ya özgü olmadığını, paket yöneticilerinin çoğunda benzer riskler bulunduğunu hatırlattı. Karşı argüman da makul: Rust ekosisteminde cargo-vet, cargo-crev, lockfile kullanımı ve RustSec gibi inceleme araçları mevcut. Yine de araçların varlığı, derleme sırasında ağ erişimi olan bir script’in güvenli bir varsayılan olduğu anlamına gelmiyor. Bu noktada kendi görüşüm net: build script’leri uygulama kodundan ayrı bir hazırlık adımı gibi değil, doğrudan çalıştırılabilir üçüncü taraf kod gibi değerlendirmek gerekiyor. (reddit.com)
İlk kontrol lockfile ve Cargo önbelleği olmalı
Rust ekibinin önerisi, yerel Cargo önbelleğinde silinmiş paketlerin kalıp kalmadığını kontrol etmek. Resmi açıklamadaki komut şu dosya adlarını arıyor:
find ~/.cargo/registry/cache -type f \( \\
-name 'append-only-vec-0.1.9.crate' -o \\
-name 'arrayref-0.3.10.crate' -o \\
-name 'internment-0.8.7.crate' -o \\
-name 'proc-macro1-*.crate' -o \\
-name 'proc-macro-en-*.crate' -o \\
-name 'aovine-*.crate' -o \\
-name 'arone-*.crate' -o \\
-name 'aronenao-*.crate' -o \\
-name 'tinymember-*.crate' \\
\) -print
Bunu yalnızca ana makinede çalıştırmak yetmez. CI önbellekleri, self-hosted runner’lar, hazırlanan container imajları ve vendor dizinleri de kontrol edilmeli. Rust ekibinin listesine göre arrayref için güvenli sürüm 0.3.9 ve öncesi. internment için 0.8.6, append-only-vec için 0.1.8 ve öncesi etkilenmemiş sürümler olarak belirtiliyor. proc-macro1, proc-macro-en, aovine, arone, aronenao ve tinymember için ise paket adına rastlamak başlı başına inceleme nedeni. (blog.rust-lang.org)
Burada emin olmadığım bir nokta var. Silinen paketlerin gerçek erişim kapsamını ve ikinci aşama payload’ın ne yaptığını açık kaynak kayıtlarından tam olarak çıkarmak mümkün görünmüyor. Bazı teknik analizler dosya yolları, ağ adresleri ve kalıcılık izleri paylaşıyor; bunların bir bölümü üçüncü taraf gözlemlerine dayanıyor. Rust’ın resmi duyurusu ise daha temkinli bir çerçevede kalıyor. Bu yüzden bir makinede etkilenen paket bulunursa, “testler geçti, sorun yok” demek yerine makineyi etkilenmiş kabul edip erişebildiği kimlik bilgilerini döndürmek daha doğru yaklaşım.
Bu olaydan benim çıkardığım ders, yeni bir güvenlik ürünü satın almakla ilgili değil. CI’da lockfile olmadan güncelleme yapılmaması, bağımlılık diff’lerinin incelenmesi ve derleme işlerinin gereksiz ağ erişiminin kapatılmasıyla ilgili. Bir paket 86 dakika sonra silinmiş olabilir. O 86 dakika, çalışan bir geliştirici makinesi veya geniş yetkili bir runner için yeterli olabilir.
Doğrulama
Kaynaklar
Yazıdaki dış iddiaları doğrulamak ve daha derine inmek için kullandığım ana kaynaklar.
- 01 Rust Blog, resmi güvenlik açıklaması ↗
Olayın zaman çizelgesi, etkilenen paketler ve resmi kontrol komutu.
- 02 RustSec Advisory RUSTSEC-2026-0260 ↗
Etkilenen arrayref sürümü, indirme sayısı ve etkilenmemiş sürümler.
- 03 Hacker News, 20 Ağustos 2026 ön sayfası ↗
arrayref haberi 500’den fazla yorumla aynı hafta içinde geniş teknik tartışma aldı.
- 04 Reddit r/programming tartışması ↗
Cargo build script’leri, lockfile ve bağımlılık denetimi üzerine geliştirici tartışması.
- 05 GitHub Advisory Database ↗
arrayref 0.3.10 için yayımlanan güvenlik kaydı ve CVSS bilgisi.
- 06 RustSec Advisory Database issue #3161 ↗
İlk teknik bildirim, proc-macro1 bağımlılığı ve build-time payload ayrıntıları.
- 07 StepSecurity teknik analiz ↗
CI gözlemleri ve saldırının bağımlılık manifestosu üzerinden nasıl ilerlediğine dair ikincil analiz.
- 08 GitHub Trending, Rust filtreli görünüm ↗
Aynı hafta için ilgili proje veya advisory’nin belirgin bir trending kaydı doğrulanamadı.
- 09 TechCrunch, 21 Ağustos 2026 arşivi ↗
Aynı hafta incelendi; arrayref olayıyla ilgili eşleşen haber bulunamadı.
- 10 Ars Technica, yazılım geliştirme etiketi ↗
Aynı hafta incelendi; arrayref olayıyla ilgili eşleşen haber bulunamadı.