CVE-2023-40030
Açıklama
Cargo, bir Rust projesinin bağımlılıklarını indirir ve projeyi derler. Rust 1.60.0 sürümünden başlayarak 1.72 öncesine kadar olan sürümlerde Cargo, `cargo build --timings` tarafından oluşturulan rapora dahil ederken Cargo özellik isimlerini kaçırmıyordu (escape). Bağımlılık olarak eklenen kötü niyetli bir paket buraya neredeyse rastgele HTML enjekte edebilir ve rapor daha sonra bir yere yüklendiğinde bu durum potansiyel olarak siteler arası betik çalıştırmaya (XSS) yol açabilir. Bu güvenlik açığı; git, yerel yollar veya alternatif kayıt defterlerinden gelen bağımlılıklara güvenen kullanıcıları etkilemektedir. Yalnızca crates.io'ya bağımlı olan kullanıcılar etkilenmemektedir. Rust 1.60.0, derleme sürecinin farklı adımlarının ne kadar sürdüğüne dair bir rapor oluşturan `cargo build --timings` özelliğini tanıtmıştır. Bu rapor, her crate için Cargo özellikleri listelerini içerir. Rust 1.72 öncesinde, Cargo özellik isimlerinin (özellik sözdizimi tarafından kullanılan bazı istisnalar hariç) hemen hemen her karakteri içermesine izin veriliyordu ancak Rust 1.49'dan beri bunlar hakkında gelecekte uyumsuzluk uyarısı üretiliyordu. crates.io, geçerli bir özellik ismi olarak neyi kabul ettiği konusunda çok daha katıdır ve bu tür özellik isimlerine izin vermemiştir. Özellik isimleri zamanlama raporuna kaçırılmadan dahil edildiği için, örneğin `features = ["<img src='' onerror=alert(0)"]` gibi bir özellik ismiyle sayfaya Javascript enjekte etmek için kullanılabilirdi. Eğer bu rapor daha sonra kimlik bilgileri kullanan bir domaine yüklenirse, enjekte edilen Javascript web sitesi ziyaretçisinin kaynaklarına erişebilirdi. Bu sorun, gelecek uyumsuzluk uyarısının bir hataya dönüştürülmesiyle Rust 1.72 sürümünde düzeltilmiştir. Kullanıcılar, projelerine yalnızca güvenilir bağımlılıkları dahil ederek hangi paketi indirdikleri konusunda hala dikkatli olmalıdır. Bu güvenlik açıkları düzeltilmiş olsa bile, tasarım gereği Cargo'nun derleme betikleri ve prosedürel makrolar sayesinde derleme sırasında rastgele kod çalıştırılmasına izin verdiği unutulmamalıdır: kötü niyetli bir bağımlılık, bu açıklardan bağımsız olarak zarar verebilecektir. crates.io, bu saldırıyı önleyen sunucu tarafı kontrollere sahiptir ve crates.io üzerinde bu açıklardan yararlanan herhangi bir paket bulunmamaktadır. Yine de uzak kod çalıştırma orada da tasarım gereği mümkün olduğundan, crates.io kullanıcılarının bağımlılıklarını seçerken dikkatli olmaları gerekir.
Nasıl düzeltilir
- rust-lang rust1.72.0 ya da sonraki bir sürüm
Etkilenen ürünler
| Ürün | Etkilenen sürümler | Düzeltildiği sürüm |
|---|---|---|
| rust-lang rust | 1.60.0 ≤ v < 1.72.0 | 1.72.0 |
Sürümünüzü kontrol edin
Ürünü seçin ve kullandığınız sürümü yazın; sürümün etkilenen aralıkta olup olmadığını görün.
Attack Surface Management
Alan adlarınıza bağlı varlıkları, bu varlıklarda çalışan teknolojileri ve bilinen zafiyetleri tek listede görün.