Neler oluyor
Son birkaç aydaki üç ayrı rapor aynı yönü gösteriyor.
- Cequence (28 Ekim'de yayımlandı): tek bir tarayıcı, yaklaşık 32 sahte yapay zekâ kimliği, en az Eylül sonundan Ekim sonuna kadar aktif. Her bulut adresi yaklaşık sekiz saniyede 50 ila 190 istekten oluşan bir patlama yapıp yoluna devam etti. Tek bir günde 300'den fazla adres kullandı ve Eylül sonundaki adreslerin hiçbiri bir ay sonra yeniden görünmedi. CSO Online'ın yazısı, bu tür bir rotasyonun statik IP engelleme listelerini çok daha az işe yarar hâle getirdiğini belirtiyor.
- GreyNoise (Ağustos): farklı bir küme, hiçbiri şirketlerin yayımladığı IP aralıklarında olmayan 824 adresten 13 yapay zekâ tarayıcısını taklit etti. En çok istenen yollar, bir framework'ün secret bırakabileceği her yerin kontrol listesi gibi: /.env, /app/.env, /api/.env, /backend/.env, /.env.local, /.env.production, /.env.bak, /.aws/credentials. Sahte botlar bir kez bile /robots.txt istemedi. Anthropic'in gerçek tarayıcısı istedi ve hiçbir zaman bir kimlik bilgisi dosyası talep etmedi.
- Symantec, Help Net Security aracılığıyla (23 Ekim): korumasız bir yapay zekâ servisi gibi davranan bir honeypot, bir saldırganın otonom ajanını iş başında yakaladı. Ajanın jailbreak prompt'u, modele .env dosyalarını, API key'lerini ve veritabanı şemalarını okumanın sıradan bir geliştirme işi olduğunu söylüyordu. Honeypot'un kaydettiği 127.000'den fazla isteğin çoğu keşif, çalıntı key denemeleri ve açıkta kalmış yapılandırma dosyası yoklamalarıydı.
Örüntü açık. Saldırganlar, site sahiplerinin yapay zekâ tarayıcılarını allowlist'e almaya başladığını biliyor, bu yüzden o adları ödünç alıyorlar. Ve yapay zekâ key'lerinin gerçek para ettiğini biliyorlar: sızdırılmış bir OpenAI, Anthropic ya da Gemini key'i sen fark etmeden büyük bir fatura çıkarabilir.
Hızlı ship eden geliştiriciler neden umursamalı
User agent dizesi, ziyaretçinin kendisi hakkında yazdığı bir header'dan ibaret. Hiçbir şey kanıtlamaz. Hosting ayarın, CDN kuralın ya da WAF'ın "bilinen yapay zekâ botlarını" geçiriyorsa, tam da bu trafiğe kapı açmış olabilirsin.
Daha da önemlisi, avlanan şey hızlı ship edilen uygulamalarda klasik bir hata. Build tüm proje klasörünü kopyaladığı için bir .env dosyası web root'a düşüyor. Gece yarısı yapılan bir düzeltmeden sonra bir .env.production.bak geride kalıyor. Bir Docker imajı /app'i statik dosya olarak sunuyor. Bunların hiçbiri zekice bir exploit gerektirmiyor. Bir GET isteği yeterli ve bot bunun ilk isteği mi yoksa doksanıncısı mı olduğunu umursamıyor.
Uygulamanı nasıl kontrol edersin
Tarayıcıların gerçekten istediği yollarla başla. Aşağıdaki döngüyü kendi alan adınla bir terminalde çalıştır.
Her satırda görmek istediğin şey 404 ya da 403. 200 bir sorun, ama paniğe kapılmadan önce yanıtın gövdesine bak: birçok single-page uygulama, bilinmeyen her yol için 200 ile index.html döndürür. curl -s https://yourapp.com/.env | head -5 komutunu çalıştır ve neyin döndüğüne bak. KEY=value satırları görüyorsan, o dosyadaki her secret'ı ele geçirilmiş say.
for p in .env .env.local .env.production .env.bak .env.old \
app/.env api/.env backend/.env .aws/credentials .git/config; do
code=$(curl -s -o /dev/null -w "%{http_code}" "https://yourapp.com/$p")
echo "$code /$p"
doneHazır başlamışken, aynı secret'ları başka bir yoldan ele veren ilgili sızıntıları da kontrol et:
- Erişilebilir bir .git dizini, şimdiye kadar commit edilmiş her .env dahil, kaynak kodunu herkesin yeniden oluşturmasına izin verir.
- JavaScript bundle'ındaki key'ler için tarayıcıya bile gerek yok. DevTools'u aç ve bundle'da sk-, AIza ya da key ara.
- Production'daki source map'ler, yorumlar dahil orijinal kaynak kodunu dağıtabilir.
Sonra loglarını kontrol et. /.env ya da /.aws/credentials isteklerini ara. Bunlardan herhangi biri 200 döndürdüyse, olayının başlangıç zamanı o.
Nasıl düzeltirsin
1. Secret'ları web root'tan çıkar. Gerçek çözüm, dosyanın sunulacak şekilde orada hiç olmaması. Ortam değişkenleri, statik dosyalarınla birlikte deploy edilen bir dosyada değil, host'unun ayarlarında olmalı (Vercel, Netlify, Railway, Fly ve diğerlerinin hepsinde var). .env*'nin hem .gitignore hem de .dockerignore içinde olduğundan emin ol.
2. Yedek önlem olarak dotfile'ları sunucuda engelle. nginx için:
# Deny all hidden files except the ACME challenge path
location ~ /\.(?!well-known) {
deny all;
return 404;
}Apache için (.htaccess):
<FilesMatch "^\.">
Require all denied
</FilesMatch>Statik dosya sunan bir Express uygulamasında express.static varsayılan olarak dotfile'ları yok sayar. Bunu dotfiles: 'allow' ile geçersiz kılma.
3. Açıkta kalan her şeyi yenile. Dosyayı silmek sızan key'leri geri almaz. Erişilebilir olmuş her secret'ı yenile; ödeme, veritabanı ve yapay zekâ sağlayıcısı key'leriyle başla. Railway ihlali hakkındaki yazımız, uygulamanın secret'larını kesinti olmadan nasıl yenileyeceğini adım adım anlatıyor.
4. User agent'a güvenmeyi bırak. Yapay zekâ tarayıcılarını bir güvenlik duvarından ya da rate limit'ten geçiriyorsan, ada göre eşleştirmek yerine şirketlerin yayımladığı IP aralıklarına göre doğrula. GreyNoise, raporunda Anthropic, OpenAI, Google ve Perplexity'nin resmi JSON dosyalarını listeliyor. Cequence'in tavsiyesi de aynı: imzalı istekler, yayımlanmış adres aralıkları ya da doğrudan entegrasyonlarla doğrula.
5. Açıktaysa geliştirme araçlarını yamala. GreyNoise bu tarayıcıların Vite'ın dosya okuma hatası CVE-2025-30208'i denediğini de gördü. Bir Vite dev sunucusu internetten erişilebilir durumdaysa 6.2.3, 6.1.2, 6.0.12, 5.4.15 ya da 4.5.10 veya sonrasına yükselt ve en baştan dev sunucularını herkese açma.
6. Yapay zekâ key'lerine harcama limiti koy. Çoğu yapay zekâ sağlayıcısı aylık harcamayı sınırlamana ya da key'leri belirli projelerle kısıtlamana izin verir. Bir sızıntıyı durdurmaz ama dört haneli bir sürprizi küçük bir sürprize çevirir.
Hızlı kontrol listesi
Terminali kapatmadan önce şunlardan emin ol:
- Yukarıdaki curl döngüsündeki her yol dosyanı değil, 404/403 döndürüyor.
- .env*, .gitignore ve .dockerignore içinde.
- Sunucun ya da host'un dotfile'lara erişimi reddediyor.
- JS bundle'ında ya da source map'lerde gizli key yok.
- Bir zamanlar erişilebilir olmuş her key yenilendi.
- Yapay zekâ tarayıcısı allowlist'leri yalnızca user agent'ı değil, IP aralıklarını da kontrol ediyor.
- Yapay zekâ sağlayıcısı key'lerinde harcama limitleri ayarlı.
Botlardan önce sen kontrol et
Bu tarayıcılar yüzlerce adres arasında dönüyor ve her patlamaya yaklaşık sekiz saniye harcıyor. Logları izleyerek kazanamazsın. Kapıyı çaldıklarında orada hiçbir şey olmadığından emin olarak kazanırsın.
AppSafe tam da bu botların aradığı sızıntıları kontrol eder: erişilebilir .env dosyaları, açıkta kalan .git dizinleri, veritabanı dökümleri ve frontend bundle'ındaki API key'leri. Her bulgu, yapay zekâ kodlama aracına kopyalayıp yapıştırabileceğin bir düzeltme prompt'uyla gelir. Hâlâ lansman öncesindeysen, yapay zekâ ile geliştirilen uygulamalar için hazırladığımız kontrol listesi iyi bir tamamlayıcı okuma. Uygulamanı ücretsiz tara ve bir botun ne göreceğini gör.
