EresusSecurity
Araştırmalara Dön
Rehber

CI/CD Build Script Güvenliği: postinstall ve build.rs Riskleri

Eresus Security Research TeamGüvenlik Araştırmacısı
26 Ağustos 2026
3 dk okuma
RehberYazılım Tedarik Zinciri

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 install sırasında arbitrary execution hâlâ mümkün; wheel tercih edin ve --require-hashes kullanın.
  • Maven/Gradle: Plugin'ler build yaşam döngüsünde kod çalıştırır; plugin sürümleri pinlenmeli.
  • Go: go generate ve 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.rs dosyası,
  • [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

İlgili Hizmetler