· kaynak dev.to (home feed)
Sandbox deneyimi: npm install ve pip, kodun tamamını okumadan repo kodunu çalıştırıyor
dev.to üzerindeki bir sandbox deneyimi, npm install ve pip'in gömülü scriptleri herhangi bir kod okunmadan önce çalıştırdığını ortaya koydu; make ise elle çağrılmayı bekliyor, git hook'ları hiç transfer olmuyor ve README metni etkisiz kalıyor.

dev.to'da bir yazıda belgelendirilen kontrollü bir deneyim yürüten bir geliştirici, tek "kötü niyetli" payload'ları zaman damgalı metin dosyaları yazan bir sandbox repository'si kurdu — ve tek bir npm install komutunun, yazar dosyalarından herhangi birini açmadan önce repo içindeki kodu çalıştırmaya yettiğini gördü. Install komutundan bir saniye sonra, diskte 2026-11-11T21:03:01.183Z damgalı bir işaret dosyası belirdi.
Tek klasörde beş tetikleme noktası
Deneyim, tek bir repository içine beş olası çalıştırma yolu yerleştirdi: package.json içinde bir preinstall script'i, pip tarafından çalıştırılan bir setup.py, bir Makefile varsayılan hedefi, bir git post-checkout hook'u ve README'de duran düz bir İngilizce talimat. Ortam Node v24.22.1, npm 10.9.4, Python 3.12.3, pip 24.0, GNU Make 4.3 ve git 2.43.0 sürümlerine sabitlendi. Her tetikleyici, çalışması halinde zaman damgalı bir işaret dosyası yazarak çalıştığını kanıtlayacaktı; sessiz kalırsa, eksik dosya bunu kanıtlayacaktı.
Beş tetikleyiciden ikisi yalnızca kurulum sırasında çalıştı. Üçüncüsü yalnızca açıkça çağrıldığında çalıştı. Kalan ikisi hiç çalışmadı.
npm: temiz bir audit ile kod çalıştırma
Preinstall hook'u hemen tetiklendi. Yazıda açıklandığı gibi, npm preinstall, install ve postinstall script'lerini olağan davranış olarak görür ve onay install komutunun kendisinden gelir — npm install yazmak, bu script'lerin yaptığı her şeyi onaylar. Çarpıcı detay şu: npm'nin çıktısı sıfır güvenlik açığı bildirdi. Yazara göre audit, bilinen kötü niyetli paketleri kapsıyor ve az önce çektiğiniz paketteki install script'leri hakkında hiçbir şey söylemiyor; çünkü bunları çalıştırmak normal npm davranışı, bir hata değil. Zararsız işaretleyici bir metin dosyası yazdı; aynı slot, kullanıcının hesabının yapmasına izin verilen her şeyi taşıyabilirdi.
pip: build sırasında kod çalışıyor
On bir saniye sonra, pip install . wheel'i derlerken setup.py'yı çalıştırdı — yani paket daha kurulmadan önce. Payload etkili bir şekilde tek satırdı ve paketin tamamı 975 bayt ağırlığındaydı; yazar bunu paket boyutunun hiçbir şey ifade etmediğine dair kanıt olarak sunuyor. pyproject.toml ve uygun bir build backend kullanan modern projeler bu açığın büyük kısmını kapatıyor, ancak PyPI'daki birçok paket hâlâ setup.py ile geliyor ve pip, klonlanmış bir repo üzerinde çalıştığında içindeki her şeyi çalıştırıyor.
Bekleyenler ya da hiç tetiklenmeyenler
Makefile, make yazılana kadar hiçbir şey yapmadı; yani içeren bir repoyu klonlamak güvenli. Yazarın uyarısı teknikten çok toplumsal: README'ler rutin olarak "just run make" demenizi ister ve çoğu insan dosyayı açmadan uyar; bu da Makefile'ı kendi ellerinizle çalıştırdığınız bir script'e dönüştürüyor.
Git hook'u hiç gelmedi. Hook'lar .git/hooks içinde yaşar, bir clone onları transfer etmez ve git, izlenen bir dosyayı sizin tarafınızda hook olarak kurmaz. Dip not: hook'larını kurmak için bir setup script'i çalıştırmanızı isteyen repolar sizi yeniden preinstall-script bölgesine geri götürür — tehlikeli olan hook değil, kurulum script'idir.
Okuyucuya hemen pwned.txt adında bir dosya oluşturmasını emreden README talimatı hiçbir şey çalıştırmadı. Düz metin kendini çalıştıramaz; Markdown, yorumlar veya docstring'ler de öyle.
AI agent'ların devreye girdiği yer
Zamanlama bilinçliydi. Yazar, dev.to'nun trend akışının önceki hafta 23 agent-security yazısı taşıdığını, bunlara "One Markdown File Can Hijack Your AI Coding Agent" ve "WebMCP Attack Lab: Can an E-Shop Hijack Your AI Agent?" yazılarının da dahil olduğunu belirtiyor. O yazılar dosyaların kod çalıştırmasıyla ilgili değil; bir repository içinde bulunan talimatları komut olarak ele alan agent'ları anlatıyor. Yazar, önce daha eski ve daha basit sorunun yanıtlanmasını istedi: agent devrede yokken, sıradan bir install'ın zaten ne yaptığını.
Pratik çıkarımlar
Yazarın yeni alışkanlıkları ucuz olanlardan: yazmadığınız herhangi bir repoyu kurmadan önce package.json'ın scripts bölümünü okuyun, yalnızca dosyalara ihtiyacınız olduğunda npm install --ignore-scripts kullanın ve pip dokunmadan önce setup.py'yı okuyun.
Neden önemli
Deneyim, tanımadığınız kodla çalışırken güven sınırının tam olarak nerede olduğunu yalnızlaştırıyor. Klonlamak büyük ölçüde güvenli; kurmak değil. Paket yöneticisinin audit çıktısı bir güvence gibi okunurken, gerçekten tehlikeli mekanizma — lifecycle script'ler — tam olarak tasarlandığı gibi çalışıyor; tedarik zinciri saldırganlarının bunu tercih etmesinin nedeni de bu. Ve coding agent'lar yayıldıkça, dosya içeriklerine göre harekete geçebilen şeylerin kümesi install script'lerinin ötesine büyüyor; bu da çalıştırmadan önce okuma eski disiplinini yeniden güncel kılıyor. Önlemler saniyelerinizi alıyor.
- #npm
- #pip
- #security
- #supply-chain
- #javascript