Yazılımcılar geleneksel olarak elle kod yazdıklarında, bağımlılık ekleme sürecinde doğal bir bilişsel sürtünme vardır:
- npm, PyPI veya Crates.io üzerinde kütüphaneyi aratırsınız.
- GitHub yıldızlarına, haftalık indirme grafiklerine, son commit tarihine ve geliştirici profiline göz atarsınız.
- Bir pull request açmadan önce
package.jsondiff’ini incelersiniz.
Vibe coding çağında ise bu bilişsel güvenlik duvarı saniyeler içinde buharlaşıp yok olur.
Bir yapay zekâ kodlama ajanına komut verirsiniz: “Streaming destekli Azure OpenAI auth token önbelleklemesini ekle.” Ajan on beş dosya yazar, şık bir mimari cephe kurar ve terminalde şu komutu çalıştırır:
npm install langchain-azure-openai-helper
# veya
pip install react-native-tailwind-styled
Terminalde yeşil yazılar akar. Arayüz kusursuzca render edilir. Testler geçer. git commit -am "feat: add azure auth" yazıp doğrudan main dalına basarsınız.
langchain-azure-openai-helper paketinin gerçek bir açık kaynak kütüphane mi yoksa bir saldırgan tarafından önceden tescil edilmiş bir tuzak mı olduğunu asla kontrol etmediniz.
Slopsquatting Anatomisi: 200.000 Öngörülebilir Hayalet Paket
Bu güvenlik açığının kökeni, Büyük Dil Modellerinin (LLM) çalışma prensibinde yatar. LLM’ler canlı bir paket kayıt defterini (registry) sorgulamaz; anlamsal bağlama göre istatistiksel olarak en olası sonraki token dizisini tahmin ederler.
Modele karmaşık veya özel bir entegrasyon görevi verildiğinde, yaygın çatı öneklerini ve işlevsel anahtar kelimeleri (flask-, @langchain/, react-native-, -helper, -utils) birleştirerek kulağa son derece mantıklı gelen hayali paket adları sentezler.
[ Geliştirici Prompt'u ] ──► [ LLM Sonraki Token Tahmini ]
│
▼
Var Olmayan Hayali Paket Adı Sentezler:
"huggingface-cli" / "langchain-tools-aws"
│
▼
[ Ölçülen Halüsinasyon Oranları ]
• Ticari Öncü Modeller (GPT-4o, Claude, Gemini): ~%4.6 - %6.1
• Açık Ağırlıklı Modeller (Llama 3, DeepSeek): ~%19.7 - %22.4
│
▼
[ Saldırgan Bu Adı PyPI / npm'de Önceden Tesciller ]
│
▼
[ Geliştirici / Ajan `npm i` veya `pip install` Çalıştırır ]
│
▼
[ Geliştirici Makinesinde Keyfi Kod Yürütme (RCE) ]
Bar Lanyado ve Vulcan Cyber ekibinin öncülük ettiği, ardından 576.000 kod örneği üzerinde yapılan akademik çalışmalarda sarsıcı bir gerçek ortaya çıktı: LLM paket halüsinasyonları tesadüfi değil, son derece deterministik ve tekrarlanabilirdir.
10.000 farklı geliştirici bir LLM’e Hugging Face tokenizer’ları veya Azure SDK sarmalayıcıları hakkında benzer sorular sorduğunda, model birebir aynı var olmayan paket adlarını uydurur.
Tehdit aktörleri bu öngörülebilirliği endüstriyel bir silaha dönüştürdü:
- Otomatik Prompt Madenciliği: Saldırganlar popüler LLM’lere milyonlarca programlama sorusu sorar ve PyPI/npm üzerinde
404 Not Founddönen tüm paket adlarını listeler. - Önceden Tescil (Slopsquatting): Saldırganlar bu hayali adlar altında geçerli semver meta verilerine sahip kukla paketler yayınlar.
- Pasif Avlanma: Saldırgan sadece bekler. Günler ya da haftalar sonra bir vibe coding oturumunda bir yapay zekâ ajanı aynı prompt örüntüsünü üretir, paketi kurar ve saldırganın zararlı kodunu doğrudan geliştiricinin makinesinde çalıştırır.
[!WARNING]
huggingface-cliÖrneği: LLM’ler geliştiricilere sık sıkpip install huggingface-cliçalıştırmalarını öneriyordu (CLI komutunun adıhuggingface-cliolduğu için model paketin adını uydurmuştu; oysa resmi kütüphanehuggingface_hubidi). Saldırganlar bu adı PyPI’da tescilledi ve paket yasaklanana kadar binlerce geliştiricinin makinesine sızmayı başardı.
Geliştirici Makinesinde Yürütme: --ignore-scripts Neden Yetmiyor?
Tehdit sadece var olmayan bir kütüphanenin kodu çalıştırmaması değildir. Asıl tehlike, paket yöneticilerinin uygulama kaynak kodu henüz belleğe bile yüklenmeden önce sistemde keyfi betikler çalıştırmasıdır.
[ Ajan çalıştırır: npm install <pkg> ]
│
▼
[ Yaşam Döngüsü Kancaları Tetiklenir ]
• package.json -> postinstall / preinstall
• binding.gyp -> node-gyp yerel C++ derleme
• Python wheel -> setup.py / .pth otomatik çalıştırma
│
▼
[ Sessizce Makine Verilerini Çalma (<500ms) ]
• ~/.aws/credentials
• ~/.ssh/id_rsa ve known_hosts
• .env / .env.local gizli anahtarları
• Tarayıcı çerezleri ve oturum tokenları
• ~/.npmrc ve ~/.pypirc yayıncı tokenları
│
▼
[ Kendi Kendini Çoğaltan Ekosistem Solucanı ]
(Shai-Hulud / Hades / Miasma saldırıları)
Modern yapay zekâ geliştirme araçlarında (Cursor, Claude Code, Devin, Windsurf, Antigravity) ajanlar doğrudan terminal komutları yürütme yetkisine sahiptir. Bir ajan npm install çalıştırdığında yaşam döngüsü betikleri anında devreye girer:
- npm:
preinstall,install,postinstallvebinding.gypkancaları. - Python / pip: Wheel derlemeleri sırasında
setup.pyve Python başladığı anda çalışan.pthkancaları. - Rust / Cargo: Kasa derlenirken yürütülen
build.rskodları.
500 milisaniyeden kısa bir sürede bir bilgi hırsızı (infostealer) ~/.ssh, ~/.aws, .env dosyalarını ve tarayıcı oturumlarını sızdırır. Dahası, Shai-Hulud ve Hades gibi solucan kampanyaları ~/.npmrc ve ~/.pypirc tokenlarını ele geçirerek geliştiricinin bakımını yaptığı tüm diğer açık kaynak paketleri de otomatik olarak zehirler.
Geleneksel Güvenlik Araçları Neden Çöküyor?
Geleneksel güvenlik yaklaşımları insan merkezli yazılım yaşam döngülerine göre tasarlanmıştır:
| Güvenlik Aracı | Vibe Coding Karşısında Neden Yetersiz? |
|---|---|
| CVE Tarayıcıları (Dependabot, Snyk) | Kötü niyetli paketler 0.0.1 sürümünden itibaren zararlıdır. Sıfır CVE kaydı ve sıfır NVD girdisine sahiptirler. |
| Statik Kod Analizi (SAST) | SAST depodaki kaynak dosyaları tarar. Kurulum anında node_modules içinde çalışan dinamik derleme kancalarını asla görmez. |
npm --ignore-scripts | Yerel binding.gyp derleme adımları, Python .pth başlangıç kancaları ve IDE çalışma alanı görevleri (.vscode/tasks.json - runOn: folderOpen) ile atlatılabilir. |
| Gece Çalışan CI Tarayıcıları | 2026 zararlı yazılımları “fast-flux” yaşam döngüleri kullanır: Paketi yayınlar, hedef geliştirici kimliklerini çalar ve güvenlik tarayıcılarına yakalanmamak için 15 dakika içinde paketi yayından kaldırır. |
Çok Katmanlı Savunma Mimarisi (Defense-in-Depth)
Otonom ajanların ve vibe coding geliştiricilerinin hız kaybetmeden, ancak geliştirici makinelerini birer veri sızıntı kapısına dönüştürmeden çalışabilmesi için 4 katmanlı bir savunma hattı kurduk:
[ YZ Ajanı Yeni Bağımlılık Önerir ]
│
▼
[ Katman 1: AGENTS.md Kabul Kapısı ]
• Ponytail Kuralı 3: Önce standart kütüphane kontrolü
• İncelenmemiş paket ekleme yasağı
│
▼
[ Katman 2: Socket Güvenlik Duvarı (sfw / socket-cli) ]
• Derin AST anlamsal inceleme (70+ davranışsal kırmızı bayrak)
• Ortam değişkeni hasat tespiti (process.env, os.environ)
• Slopsquat & typosquat Levenshtein puanlaması
• Diske yazılmadan önce gerçek zamanlı kurulum engelleme
│
▼
[ Katman 3: Geçici İzole Korumalı Alan (Sandbox) ]
• Kök yetkisiz konteynerler / microVM çalışma zamanları (Podman/Docker)
• Gizli anahtar izolasyonu: ~/.ssh, ~/.aws, .env bağlanmaz
• Ağ çıkış filtreleme: Yalnızca resmi paket kayıt defterleri
│
▼
[ Katman 4: Güçlendirilmiş Bayraklar ve Deterministik Kilit Dosyaları ]
• bun add --ignore-scripts / npm ci
• pip install --only-binary :all: --require-hashes
1. Tedarik Zinciri Savunmasını AGENTS.md İçinde Standartlaştırmak
Bağımlılık kabul kurallarını doğrudan küresel ajan sistem prompt’umuza entegre ettik:
## Supply Chain & Dependency Intake Guardrails
- **Stdlib Over Packages**: Never introduce a 3rd-party package if Node/Python/Rust stdlib or existing utilities suffice.
- **Safe Install Default**: Always invoke package managers with safety flags (`npm install --ignore-scripts`, `pip install --only-binary :all:`, `bun add --ignore-scripts`) or via Socket wrapper (`socket npm`).
- **No Blind Installs**: Propose new root dependencies as part of the Plan/Approve step before executing terminal install commands.
- **Lockfile Discipline**: Always commit and respect deterministic lockfiles (`package-lock.json`, `uv.lock`, `Cargo.lock`, `bun.lock`).
- **Secret Isolation Boundary**: Never inspect, expose, or pass workstation secrets (`~/.ssh`, `~/.aws`, `~/.npmrc`, `~/.pypirc`, `.env`) in agent tool arguments or output.
2. Socket Güvenlik Duvarı (socket-cli) ile Gerçek Zamanlı Araya Girme
Sonradan yapılan manifesto taramaları yerine, terminal çağrılarını Socket’in AST analiz motoru üzerinden yönlendiriyoruz:
# Kabuk ortamlarında şeffaf araya girmeyi aktifleştirin
socket wrapper on
source ~/.bashrc
Bir ajan doğrulanmamış veya slopsquatted bir paket kurmaya çalıştığında, Socket’in AST ayrıştırıcısı paketi bellekte parçalarına ayırır, dışarı giden ağ çağrılarını inceler, process.env erişimlerini işaretler ve ana makinede herhangi bir yaşam döngüsü betiği çalışmadan önce kurulumu durdurur.
Ajanlar Çağı İçin Temel Ders
Vibe coding, derleyicinin icadından bu yana yazılım mühendisliğindeki en heyecan verici paradigma değişimidir. Günler süren hamallığı saniyeler süren doğal dil sentezine indirger.
Ancak sınır doğrulaması olmayan hız mühendislik değil; bile isteye yapılmış bir kimlik sızıntısıdır.
En iyi kod hâlâ hiç yazılmamış koddur. Ve en güvenli bağımlılık, yapay zekâ ajanınızın aslında hiç ihtiyacınız olmadığını fark ettiği bağımlılıktır.