Genel Bakış
Hassas dosya ifşası; sürüm kontrolü meta verileri, ortam değişkenleri, kriptografik anahtarlar veya veritabanı dökümleri gibi gizli bilgiler içeren dosya ya da dizinlerin, kimlik doğrulaması veya erişim denetimi olmaksızın HTTP(S) üzerinden erişilebilir olmasıyla ortaya çıkar. Bu, uygulama katmanı değil; sunucu tarafı bir yanlış yapılandırma sorunudur: söz konusu veriler hiçbir zaman herkese açık sunulması amaçlanmamıştır, ancak web sunucusu erişimi kısıtlamamaktadır.
En yaygın istismar edilen üç dosya sınıfı şunlardır:
- .git dizinleri: Bir Git deposu çalışma dizini kopyalanarak web köküne dağıtıldığında, tam commit geçmişini, nesne veritabanını, yapılandırmayı ve uzak URL'leri içeren
.git/klasörü herkese açık hâle gelir. git-dumper gibi araçlar, açık bir.git/dizininden tüm kaynak ağacını yeniden oluşturabilir. - .env dosyaları: Laravel, Symfony, Django ve Node.js gibi çerçeveler tarafından popülerleştirilen Onikifaktörlü Uygulama metodolojisinde
.envdosyaları; veritabanı kimlik bilgileri, API anahtarları, OAuth token'ları ve şifreleme anahtarları gibi çalışma zamanı sırlarını düz metin anahtar-değer çiftleri olarak depolar./.envadresine yapılacak tek bir HTTP GET isteği, uygulamadaki tüm sırları ifşa edebilir. - Yedek ve arşiv dosyaları: Geliştiriciler ve sistem yöneticileri zaman zaman yapılandırma dosyalarının veya tüm web kökünün yedek kopyalarını diskte bırakır (örn.
config.php.bak,site.tar.gz,dump.sql). Web sunucuları bu dosyaları herhangi bir statik varlık gibi sunar ve saldırganlara kimlik bilgilerini veya tam veritabanı içeriklerini doğrudan indirme imkânı tanır.
Sensagraph, sürekli tarama sürecinde yüzlerce bilinen hassas dosya yolunu otomatik olarak denetler.
Nasıl çalışır?
Saldırganlar, hedef bir kaynakta bilinen yolları listelemek için otomatik tarayıcılar ve manuel sorgulama kullanır. HTTP yanıt kodu ve yanıt gövdesi, dosyanın mevcut ve erişilebilir olup olmadığını belirler:
- Boş olmayan bir gövdeyle dönen
200 OKyanıtı, dosyanın herkese açık erişilebilir olduğunu doğrular. 403 Forbiddenyanıtı, yolun var olduğunu ancak kısıtlandığını doğrular; dizin yapısını ortaya çıkardığı için bu da bir bilgi sızıntısıdır.404 Not Foundyanıtı, kaynağın mevcut olmadığını veya erişilemez olduğunu gösteren istenen temel durumdur.
.git/ yeniden yapılandırma saldırısı
Dizin listesi etkin olmasa bile /.git/HEAD ve /.git/config adreslerine erişebilen bir saldırgan, depo yapısını çıkarabilir ve Git nesnelerini (/.git/objects/<sha>) yinelemeli olarak indirebilir. Otomatik araçlar çalışma ağacını yerel olarak yeniden oluşturarak gömülü sırları, iç yorumları ve dosya yollarını içeren tam kaynak kodu ortaya çıkarır. /.git/objects/pack/ dizinindeki PACK dosyaları tüm depoyu tek bir indirilebilir arşive sıkıştırabilir.
.env dosyası ifşası
Çerçeveler ve dağıtım betikleri genellikle .env dosyasını uygulama köküne yerleştirir; bu konum web köküyle çakışabilir veya bir üst dizinde olabilir. Yanlış yapılandırılmış bir belge kökü ya da eksik bir reddetme kuralı dosyayı ifşa eder. Yaygın girdiler şunlardır:
DB_PASSWORD,DB_HOST,DATABASE_URL— doğrudan veritabanı erişimiAWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEY— bulut altyapısı ele geçirmeAPP_KEY,SECRET_KEY— oturum sahteciliği veya şifrelenmiş verilerin çözülmesini mümkün kılan şifreleme anahtarı ifşasıSTRIPE_SECRET_KEY,SENDGRID_API_KEY— üçüncü taraf hizmet kötüye kullanımı
Yedek dosya ifşası
Yedek dosyalar genellikle metin editörleri (örn. index.php~, wp-config.php.bak), cPanel yedekleme araçları veya manuel arşivleme tarafından oluşturulur. Yolları tahmin edilebilir ve bir sözcük listesinden kolayca bulunabilir ya da listelenebilir. Statik dosyalar olduklarından uygulama katmanı mantığı indirmelerini engelleyemez.
İş etkisi
Hassas dosya ifşasının sonuçları kimlik bilgisi hırsızlığından tam sistem ele geçirmeye kadar uzanır:
- Tam kaynak kod ifşası: Tescilli iş mantığını, giderilmemiş güvenlik açıklarını ve iç mimariyi saldırganlara açar.
- Kimlik bilgisi ve sır sızıntısı:
.envveya.gitgeçmişinden çıkarılan veritabanı parolaları, API anahtarları ve özel anahtarlar; yanal hareket, veri sızdırma ve altyapı ele geçirilmesini mümkün kılar. - Veritabanı ele geçirme: Açık SQL dökümlerinden saldırganlara kullanıcı kimlik bilgileri (düz metin veya özetlenmiş), kişisel veriler, ödeme bilgileri ve diğer düzenlenmiş bilgiler sağlanır; bu durum GDPR, PCI-DSS ve HIPAA kapsamında ihlal bildirimi yükümlülüklerini tetikler.
- Bulut kaynaklarının kötüye kullanımı: Sızdırılan bulut sağlayıcı kimlik bilgileri (AWS, GCP, Azure) kripto madenciliği altyapısı kurmak, başka saldırılar başlatmak veya önemli mali yükler oluşturmak için kullanılabilir.
- Yasal ve düzenleyici sorumluluk: Kişisel verilerin izinsiz ifşası, GDPR (Madde 33) kapsamında küresel yıllık cirosun %4'üne kadar para cezasıyla bildirilebilir bir olay teşkil eder.
- İtibar kaybı: Kaynak kodu ve kimlik bilgisi sızıntıları sıklıkla arama motorları tarafından dizine alınır veya tehdit istihbaratı topluluklarında paylaşılarak ifşayı kamuoyuna mal eder.
Nasıl düzeltilir?
-
.git/dizinini hiçbir zaman web köküne dağıtmayın. Yalnızca derlenmiş uygulama yapılarını kopyalayan ve depo meta verilerini dışlayan bir CI/CD hattı veya dağıtım aracı (örn. dışlama seçenekli rsync, Deployer, Capistrano) kullanın..git/zaten açık durumdaysa web kökünden hemen kaldırın ve commit geçmişinde bulunan tüm sırları değiştirin. -
Web sunucusu düzeyinde hassas yollara erişimi engelleyin. Herhangi bir yanlışlıkla yapılan dağıtım zarar vermeden önce açık reddetme kuralları yapılandırın:
- Nginx:
location ~* /\.(git|env|htaccess|htpasswd|svn|DS_Store)(/|$) { deny all; return 404; } - Apache:
<FilesMatch "\.(git|env|bak|old|sql|tar|gz|zip|log)$"> Require all denied </FilesMatch> - IIS: Bu yollara yapılan istekleri reddetmek için
web.configdosyasına<requestFiltering>kuralları ekleyin.
- Nginx:
-
.envdosyalarını web kökünün dışında tutun. Yapılandırma dosyalarını belge kökünün bir veya daha fazla dizin seviyesi üzerinde depolayın (örn. web kökü/var/www/app/public/iken/var/www/app/.env). Çerçeve yapılandırmasını doğru yolu gösterecek şekilde güncelleyin. - Bir sır yönetim sistemi kullanın. Dosya tabanlı sırları özel bir sır yöneticisiyle (HashiCorp Vault, AWS Secrets Manager, GCP Secret Manager, Azure Key Vault) değiştirin. Sırları diskteki bir dosya aracılığıyla değil, işlem yöneticisi tarafından ayarlanan ortam değişkenleri aracılığıyla çalışma zamanında enjekte edin.
-
Hassas dosya kalıplarını
.gitignore'a ekleyin..env,*.bak,*.sql,*.tar.gz,*.logve diğer hassas kalıpların.gitignoredosyasında listelendiğinden ve commit edilmemiş olduğundan emin olun. Geçmişi denetlemek içingit log --all -- <dosyaadı>komutunu kullanın. -
Açık olan tüm kimlik bilgilerini derhal değiştirin. Bir
.envdosyası veya Git geçmişi ifşası onaylanırsa içerdiği her sırrı güvenliği ihlal edilmiş sayın: parolaları değiştirin, API anahtarlarını yeniden oluşturun, sertifikaları iptal edip yeniden düzenleyin ve yetkisiz kullanım için erişim günlüklerini denetleyin. -
Dizin listelemesini devre dışı bırakın. Dizin listesi dosyası olmayan dizinlerin dosya listesi yerine 403 döndürmesi için
Options -Indexes(Apache) veyaautoindex off(Nginx) ayarının genel olarak yapıldığından emin olun. -
Bir Web Uygulama Güvenlik Duvarı (WAF) kuralı uygulayın. Bilinen hassas yolları hedef alan istekleri engellemek için WAF kuralları ekleyin (
/.git/,/.env,/.htaccess, yaygın yedek uzantıları). Bu, sunucu tarafı kontrollerine ek savunma derinliği sağlar. - Düzenli dosya ifşası denetimleri gerçekleştirin. Dağıtımların neden olduğu gerilemeleri yakalamak için rutin güvenlik testlerinin (sızma testleri, otomatik tarama) bir parçası olarak hassas dosya yolu listesini dahil edin.
Kaynaklar
- OWASP Top 10 A05:2021 – Güvenlik Yanlış Yapılandırması
- CWE-538: Hassas Bilginin Dışarıdan Erişilebilir Dosyaya/Dizine Eklenmesi
- CWE-548: Dizin Listesi Yoluyla Bilgi İfşası
- OWASP WSTG – Eski Yedek ve Başvurulmayan Dosyaların Gözden Geçirilmesi
- RFC 9110 – HTTP Semantiği: 403 Forbidden
- Onikifaktörlü Uygulama – III. Yapılandırma
- Git Belgeleri – gitignore
- Nginx Çekirdek Modülü Belgeleri
- Apache mod_authz_core Belgeleri