Vite Geliştirme Sunucunuz Bir Güvenlik Sınırı Değil
Toplu tarama yapan bir kampanya, CVE-2026-39364 üzerinden internete açık Vite geliştirme sunucularını yokluyor ve .env dosyalarını, bulut kimlik bilgilerini ve Terraform state'ini arıyor. Bir ekibin repolarında ve sunucularında neleri kontrol edeceğimi anlatıyorum.
Umut Korkmaz
Yayın tarihi: 4 dk okuma
Bu sayfada6
11 Eylül'de F5 Labs, internete açık Vite geliştirme sunucularını hedef alan bir toplu tarama kampanyası hakkında rapor yayımladı. Tarayıcılar, Nisan'da duyurulan ve server.fs.deny korumasını atlatan CVE-2026-39364 açığını yokluyor. İnternete hiç açılmaması gereken makinelerde .env dosyalarının, AWS ve Azure kimlik bilgilerinin ve Terraform state'inin peşine düşüyorlar. Beni asıl endişelendiren açığın kendisi değil. Açığın beslendiği alışkanlık: Birisi o öğleden sonra en hızlı çözüm o olduğu için bir bulut VM'inde ya da bir container içinde vite --host çalıştırıyor.
Açık ne yapıyor
GitHub advisory kaydına göre Vite geliştirme sunucusu, .env ve *.crt gibi dosyaları engellemesi gereken bir server.fs.deny listesi tutuyor. Etkilenen sürümlerde, engellenmiş bir dosyaya doğrudan istek atıldığında beklendiği gibi 403 dönüyor. Ama isteğin sonuna ?raw, ?import&raw ya da ?import&url&inline eklerseniz dosya 200 ile geri geliyor. GitHub bunu CWE-180 olarak sınıflandırıyor: kanonikleştirmeden önce doğrulama.
- Etkilenen sürümler: 7.1.0 ile 7.3.1 arası ve 8.0.0 ile 8.0.4 arası
- Düzeltilen sürümler: 7.3.2 ve 8.0.5
- Önem derecesi: Yüksek. GitHub, CVSS 4.0'a göre 8.2 puan veriyor, F5 ise 7.5 olarak listeliyor. Kimlik doğrulama gerekmiyor.
Ön koşullar önemli. Geliştirme sunucusunun --host ya da server.host ile ağa açılmış olması, dosyanın da server.fs.allow kapsamında bulunup bir deny kalıbıyla eşleşmesi gerekiyor. Vite varsayılan olarak localhost'a bağlanıyor. Yani bu açık ancak birinin geliştirme sunucusunu bilerek dışarı açtığı yerlerde istismar edilebiliyor.
F5 gerçekte ne gördü
F5 Labs'in yazısı, Ağustos 2026'da 807 saldırı oturumunda toplanan yaklaşık 32.000 ham olay sayıyor. Önceki üç aydaki sayı 1.732'ydi. F5'in raporladığı şey doğrulanmış veri hırsızlıkları değil, denemeler. Birkaç ayrıntı dikkatimi çekti:
- İstekler
/@fs/üzerinden geliyor. Proje kök dizininin epey dışına çıkmak için sonda??ayraçları ve çift kodlanmış%252file dizin gezinme (traversal) kullanılıyor. - Hedef listesi resmen bir bulut ele geçirme kontrol listesi: her ortam için
.envvaryantları,/root,/home/ubuntu,/home/ec2-user,/home/node,/appve daha fazlası altında.aws/credentials,.aws/sso/cache/, AzureaccessTokens.json,terraform.tfstate,terraform.tfvars,serverless.ymlve/proc/self/environ. - User-agent'lar kendini Googlebot, ClaudeBot, GPTBot, PerplexityBot, OAI-SearchBot ve Amazonbot gibi gösteriyor, yanında da sahte
X-Forwarded-ForveX-Real-IPheader'ları var. - En çok trafik gelen kaynak aralıkları Google Cloud Platform adresleriydi. Hacme göre ilk sırada ABD, ardından Belçika ve Hollanda geliyor.
En çok /proc/self/environ'a dikkat ederdim. Container ortamında gerçek secret'lar çoğu zaman environment variable'larda durur. Dosyalara düşmesinler diye bilerek oraya konurlar. Bir dosya okuma açığı bu doğru pratiği size karşı kullanılır hale getiriyor.
"Alt tarafı dev server"
F5, --host, server.host ve yanlış yapılandırılmış Docker port eşlemelerinin adını koyuyor. Ekiplere Kubernetes ingress kurallarını ve bulut security group'larını da denetlemelerini öneriyor. Bunların hiçbiri sıra dışı değil. Bir ekip arkadaşı, bir QA test uzmanı ya da bir telefon dev build'e erişebilsin diye ekiplerin her zaman başvurduğu kestirmeler bunlar.
Geliştirme sunucusu hızlı ve yardımcı olmak için tasarlanmıştır. Kaynak kodu sunar, istek geldikçe dosyaları dönüştürür ve bir dosya sistemi endpoint'i açar. Laptop'ta bunlar birer özellik. Public bir IP'de ise saldırı yüzeyi. F5'in raporunda 2024 ve 2025'ten üç eski Vite dosya erişimi atlatma açığı daha listeleniyor. server.fs.deny'ı bir erişim kontrol katmanı olarak değil de bir korkuluk olarak görmemin sebebi bu geçmiş.
Container'lar burada hata yapmayı çok kolaylaştırıyor. Port eşlemenin çalışması için Vite'ın container içinde 0.0.0.0 üzerinde dinlemesi gerekiyor. --host'un bu kadar çok Dockerfile'a girmesinin sebebi de bu. Asıl sorun ise ports: "5173:5173", çünkü Docker bu portu host'un tüm arayüzlerinde yayınlıyor.
Pazartesi neleri kontrol ederdim
- Sürümler. Her repoda
npm ls vite --all(ya dapnpm why vite) çalıştırın, Vite'ı bir framework üzerinden çekenler de dahil. 7.3.2, 8.0.5 veya daha yeni bir sürüme geçin. - Dışa açıklık. Script'lerde,
vite.config.*dosyalarında, Dockerfile'larda, compose dosyalarında ve Helm values'larda--host,host: true,0.0.0.0ve5173için grep yapın. - Port bağlama. Paylaşımlı ya da bulut sunucularda dev portlarını yalnızca loopback üzerinde yayınlayın ve onlara SSH tüneli veya VPN üzerinden erişin.
- Dev ortamındaki secret'lar. Dev
.envdosyasında yalnızca dev kapsamlı anahtarlar olmalı. Geliştirme sunucusu çalıştıran bir makinede production erişimi olan uzun ömürlü~/.aws/credentialsbulunmamalı. Terraform state'in yeri çalışma dizini değil, remote backend. - Preview ortamları. Geliştirme sunucusunu asla preview ortamı olarak yayına almayın. Uygulamayı build edin ve statik çıktıyı nginx ya da bir CDN üzerinden sunun.
- Edge kuralları. F5,
/@fs/içeren her isteği reddeden bir WAF kuralı öneriyor. Production'da meşru hiçbir şeyin bu path'e ihtiyacı yok. - Crawler güveni. F5'in önerdiği gibi, herhangi bir kural "Googlebot"un ya da bir AI crawler'ının bir kontrolü atlamasına izin veriyorsa, header'a güvenmek yerine kaynak IP'yi reverse DNS ile doğrulayın.
npm ls vite --all
grep -rnE -- '--host|host:\s*true|0\.0\.0\.0|5173' \
package.json vite.config.* Dockerfile* *compose*.yml 2>/dev/null
services:
web:
ports:
- "127.0.0.1:5173:5173"
Benim yorumum
Sürüm yükseltmek işin kolay kısmı. Zor olan kural F5'in önerilerinde duruyor: Yamalanmamış bir Vite geliştirme sunucusu Ağustos 2026 boyunca dış ağlardan erişilebilir durumdaysa, onun .env değerlerini, AWS kimlik bilgilerini, Azure access token'larını ve Terraform state'ini ele geçirilmiş olabilir kabul edin ve anahtarları rotate edin. Katılıyorum. Anahtarları yenilemek, saldırıya uğramadığınızı kanıtlamaktan daha ucuz.
Aklımdan çıkmayan kısım ise sahte user-agent'lar. Bir ekip AI crawler'larını isimleriyle allowlist'e alıyorsa, saldırganlar o isimleri çoktan kullanmaya başladı bile. Üzerinde çalıştığım etik hacking materyali keşif (reconnaissance) aşamasına çok zaman ayırıyor. Bu kampanya da ölçekli bir keşif: ucuz, geniş kapsamlı ve birinin hızlı bir demo için açık bıraktığı her şeye nişan almış.
Kaynaklar
Bu yazıda yararlanılan birincil kaynaklar.