CI/CD Build Script Güvenliği: postinstall ve build.rs Riskleri
ArrayRef saldırısında payload cargo build sırasında, Axios saldırısında npm install sırasında çalıştı. Ortak nokta şu: iki ekosistemde de paket yöneticileri, kurulum ve derleme aşamalarında senin yazmadığın kodu senin kimliğinle çalıştırıyor. Bu rehber, build-time yürütme yüzeyini ekosistem ekosistem çıkarır ve denetlenebilir kontrollere bağlar.
Build script'ler neden ayrı bir güvenlik problemi?
Bağımlılık kodunun çalıştığı iki farklı zaman vardır ve riskleri farklıdır:
- Import/çalışma zamanı: Yazdığın kod bağımlılığın fonksiyonunu çağırdığında çalışır. Statik analiz, SCA araçları ve code review bu yüzeyi görür.
- Build/kurulum zamanı: Paket indirilir indirmez, hiçbir fonksiyon çağrılmadan çalışır. Kod review sürecine girmez, uygulama testleri kapsamaz ve genellikle geliştirici makinesi veya CI runner'ın tam kullanıcı yetkisiyle çalışır.
Saldırgan için ikinci yüzey daha değerlidir: secret'larla dolu bir ortamda, ağ erişimi olan, loglaması zayıf bir yürütme noktasıdır.
Ekosistem bazında yürütme yüzeyi
npm / Node.js
| Mekanizma | Ne zaman çalışır | Not |
|---|---|---|
preinstall / postinstall / prepare |
npm install sırasında |
Geçişli bağımlılıkların script'leri de çalışır |
node-gyp rebuild |
native modül kurulumunda | Derleme zincirinin kendisi saldırı yüzeyi |
| lifecycle script env'leri | install sırasında | npm_config_* enjeksiyonları bilinen vektör |
Kontrol: npm config set ignore-scripts true lokalde varsayım yapılabilir; ancak bunu yapan ekiplerin gerçek ihtiyaç duyan paketler için allowlist'i yönetmesi gerekir.
Cargo / Rust
| Mekanizma | Ne zaman çalışır | Not |
|---|---|---|
build.rs |
cargo build, cargo check, IDE indexleme |
ArrayRef'te payload buradaydı |
build-dependencies |
build.rs derlenmeden önce |
Ağ kütüphanesi (ureq, reqwest) içeren build-dependency kırmızı bayrak |
| proc-macro'lar | derleme sırasında kod üretir | Zararlı proc-macro statik analizi atlayabilir |
Kontrol: Yeni build.rs içeren bağımlılık ekleniyorsa PR diff'inde otomatik işaretleme; build-dependencies içinde ağ crate'lerine özel inceleme.
Python / Java / Go
- Python:
setup.py/pip installsırasında arbitrary execution hâlâ mümkün; wheel tercih edin ve--require-hasheskullanın. - Maven/Gradle: Plugin'ler build yaşam döngüsünde kod çalıştırır; plugin sürümleri pinlenmeli.
- Go:
go generateve cgo derlemesi; modül proxy'si dışına çıkış engellenmeli.
Somut denetim adımları
1. Depodaki mevcut yüzeyi çıkar
# npm: hangi lifecycle script'leri tanımlı?
rg -n '"(pre)?(post)?install"|"prepare"' --glob 'package.json' node_modules -g '!**/.bin/**' | head -40
# Cargo: hangi paketlerde build.rs var, build-dependencies neler?
fd -H 'build.rs' ~/.cargo/registry/src | head
rg -n '\[build-dependencies\]' --glob 'Cargo.toml' ~/.cargo/registry/src -l | head
2. CI'da yeni build script'i kapıya bağla
Dependency bot PR'larında şu diff desenlerini otomatik uyarıya çevir:
- yeni
"postinstall"/build.rsdosyası, [build-dependencies]içinde yeni ağ kütüphanesi,- mevcut build script'in içeriğinde network/exec API geçişi (
require('http'),Command::new,urllib,fetch).
3. Build ortamını sıkılaştır
- Derlemeyi ephemeral runner'da yap; workspace cache'i güvenilmeyen PR'lardan beslenmesin.
- Registry/mirror egress allowlist'i uygula (ör. sadece registry.npmjs.org ve internal mirror).
- İmzalama ve deploy credential'larını build adımından ayır; OIDC tabanlı short-lived token kullan.
4. Olay sonrası kalıcı kontrol
ArrayRef tipi olaylarda lockfile'daki zararlı sürümü bulmak yetmez; o ortamda çalışan her şeyi ele geçirilmiş say. Olay müdahale rehberimizi ve Axios analizi bu zincirin gerçek örneklerini içeriyor.
Eresus yaklaşımı
Eresus Security, DevSecOps değerlendirmelerinde build-time yürütme yüzeyini depo, CI yapılandırması ve runner izolasyonu üçlüsünde birlikte inceler. Kaynak kod analizi kapsamındaki bağımlılık güvenliği ve CI/CD pipeline güvenliği çalışmaları, bu kontrollerin sizin pipeline'ınıza uyarlanmış halini kanıtla teslim eder.
Sık sorulan sorular
ignore-scripts yeterli bir koruma mı?
Hayır. Native modüller ve bazı popüler paketler install script'siz kurulamayabilir; ekip allowlist bakımı yüklendiğinde politika gevşer. ignore-scripts tek başına değil, mirror + karantina + diff denetimiyle birlikte anlamlıdır.
SCA taraması build.rs riskini yakalar mı?
Çoğu klasik SCA aracı bilinen zafiyet veritabanına bakar; sıfırdan yayımlanmış zararlı paket (ArrayRef gibi) listede olmaz. Davranış odaklı kontrol (yeni build script, beklenmeyen build-dependencies) gerekir.
Private registry yeterli mi?
Mirror, saldırı penceresini daraltır ama ele geçirilmiş meşru paketi durduramaz. Mirror'a minimum yayın yaşı ve otomatik davranış taraması eklendiğinde değer üretilir.
Güvenlik Doğrulaması
Bu riski kendi sisteminizde test ettirdiniz mi?
Eresus Security; sızma testi, AI ajan güvenliği ve kırmızı takım operasyonlarıyla gerçek istismar kanıtı üretir.
Pilot test talep etİlgili Araştırmalar
ArrayRef Saldırısı: Rust'ta proc-macro1 Arka Kapısı
ArrayRef, internment ve append-only-vec paketlerini etkileyen Rust tedarik zinciri saldırısının teknik zinciri, IOC'leri ve olay müdahale adımları.
AdvisoryDerinlemesine Analiz: Axios Tedarik Zinciri Saldırısı ve RAT Gerçeği
Milyonlarca projeyi etkileyen Axios npm tedarik zinciri (supply chain) saldırısının teknik analizi. plain-crypto-js paketinin gizlediği AES-256 şifreli...
DevSecOpsCI/CD Süreçlerinizi Nasıl Tam Otonom ve Güvenli Hale Getirirsiniz?
DevOps ekipleri için CI/CD hatlarını otonom, güvenli ve izlenebilir (Observability) bir hale getirmenin DevSecOps sırları ve Otonom Boru Hattı...
İlgili Hizmetler