← Radar

Konu: Güvenlik3 dk okuma

.env dosyasındaki şifreleri ajanın da okuyor: Varlock ile şema sende, sırlar kasada

Bu neden önemli?

Bir ajana proje klasörünü açtığında, .env dosyandaki her şeyi de açmış oluyorsun. Şifreyi diskten çıkarıp sadece çalışma anında vermek, hem ajanlı çalışmada hem de log ve hata ekranı sızıntılarında riski ciddi şekilde azaltıyor.

.env neden artık yetmiyor?

Çoğu projede şifreler aynı yerde duruyor: proje klasöründeki .env dosyasında, düz metin olarak. .gitignore’a eklediğin için güvende sanıyorsun. Ama bu dosya sadece git’ten saklanıyor. Diskte duruyor, herkesin kopyalayabildiği bir yerde. Yeni gelen bir ekip arkadaşına Slack’ten gönderiliyor. Bir hata ekranında ya da bir log satırında görünüyor.

Kodlama ajanları bu riski büyüttü. Varlock’un kendi rehberi açıkça söylüyor: Yapay zekâ araçları proje dosyalarını okuyor, .env dosyaları da buna dahil. Ajan şifreyi koda gömebiliyor ya da bir log satırına yazdırabiliyor. Ona “bu klasörde çalış” dediğin anda veritabanı şifren de onun bağlamına girmiş olabiliyor.

Varlock ne yapıyor?

Varlock, Theo Ephraim ve Phil Miller’ın geliştirdiği açık kaynak (MIT) bir araç. İkisi Syntax’ın bu bölümünün konuğu. Temeli @env-spec adını verdikleri küçük bir dil: Sıradan .env söz dizimine, JSDoc’a benzeyen @ ile başlayan yorumlar ekliyor. Böylece dosya bir şemaya dönüşüyor.

Bir .env.schema dosyasında her değişken için şunları yazıyorsun: tipi (port, URL, belli bir önekle başlayan metin), zorunlu olup olmadığı, açıklaması ve @sensitive ile gizli olup olmadığı. Gizli değerler ya boş kalıyor ya da nereden alınacağını söyleyen bir fonksiyon çağrısı oluyor. Örneğin 1Password eklentisiyle değer op(op://kasa/kayit/alan) gibi bir referans. Şifrenin kendisi dosyada yok, sadece adresi var.

Bu dosyayı git’e gönül rahatlığıyla ekleyebilirsin. Hatta ajanın okuması iyi bir şey: Hangi değişkenlerin olduğunu, tiplerini ve ne işe yaradıklarını görüyor ama değerleri görmüyor. .env.example dosyasının aksine şema da kendiliğinden eskimiyor, çünkü uygulama onunla doğrulanıyor.

Çalışma anında ne oluyor?

varlock load şemayı okuyor, değerleri kasadan çekiyor ve her şeyin tipine uyup uymadığını kontrol ediyor. varlock run -- komut ise bu değerleri ortam değişkeni olarak verip programını çalıştırıyor. Vite, Next.js, Astro ve Cloudflare için hazır entegrasyonlar da var. Belgelere göre eklentiler 1Password’ün yanında AWS, Azure, Google Cloud, Bitwarden, HashiCorp Vault ve Infisical gibi kaynakları destekliyor.

İşin ikinci yarısı sızıntıyı yakalamak. Node.js tarafında Varlock console fonksiyonlarını yamalıyor ve gizli bir değer loga yazılırsa ilk iki karakteri dışında maskeliyor. varlock run da çıktı bir dosyaya ya da başka bir programa yönlendirildiğinde aynı maskelemeyi uyguluyor. Bir adım daha var: Sunucunun gönderdiği HTTP yanıtlarının gövdesini tarıyor. İçinde gizli bir değer varsa yanıtı göndermek yerine hata veriyor. Belgeler sınırı da yazıyor: Header’lar, cookie’ler, WebSocket mesajları ve tarayıcıya giden paketlenmiş kod bu taramanın dışında.

Tek seçenek değil

Aynı derde başka çözümler de var. 1Password’ün op run komutu .env dosyasındaki op:// referanslarını çözüp değerleri sadece o alt süreç çalışırken veriyor. dotenvx ise farklı bir yol seçiyor: Değerleri açık anahtarla şifreleyip şifreli .env dosyasını git’e eklemeni sağlıyor. Çözmek için gereken özel anahtar ayrı tutuluyor. Hepsinin ortak noktası şu: Şifre diskte düz metin olarak durmuyor. Ama 1Password’ün belgesindeki uyarı hepsi için geçerli: Aynı kullanıcıyla çalışan başka bir süreç, ortam değişkenlerini yine okuyabilir.

Better Stack’in videosunda da birkaç eksik sayılıyor. Videoya göre internet yokken kasaya ulaşılamıyor, şifreler çekilirken başlangıç biraz gecikiyor ve bazı şifre yöneticileri için eklenti yoktu.

Sonra ne oldu?

Varlock 29 Nisan 2026’da 1.0 oldu ve yerleşik yerel şifreleme getirdi. Böylece kasaya bağlı olmadan da değerleri düz metin dışında tutabiliyorsun. Sonraki sürümlere önbellek, bir Dashlane eklentisi ve koddaki sızmış şifreleri arayan varlock scan geldi. 20 Temmuz’da önizleme olarak çıkan varlock proxy ise ajanı bir yerel vekil sunucunun arkasında çalıştırıyor: Ajan sadece sahte yer tutucular görüyor, gerçek şifre isteğe ağ üzerinde ekleniyor. Aynı fikri Deno ekibinin Claw Patrol yazımızda da anlattık. Ortam değişkenlerinin bir platformdan nasıl sızabildiğini Vercel saldırısı yazımızda, .env dosyalarını hedefleyen arka kapılı bir modeli ise model arka kapısı yazımızda bulabilirsin.

Düşün

  • Bugün proje klasöründe düz metin duran kaç şifren var? Ajanın onları okuyabiliyor mu?
  • Bir şifre sızsa, onu hangi sırayla ve ne kadar sürede değiştirebilirsin?

Videoyu izle

Tıklayınca video YouTube'dan yüklenir; o ana kadar bu sayfa YouTube'a hiçbir istek göndermez.
Kaynaklar (11, İngilizce)

Kendi cümlelerimizle yazılmış bir özettir, çeviri değildir. Tüm kaynaklar yukarıda.