flawopen.com/Teardowns/cve-2026-105812-bedrock-agentcore-generated-code-injection
CVE-2026-105812: AgentCore 가져오기 코드 주입
Bedrock AgentCore Starter Toolkit 0.3.13 이하에서는 에이전트 설정이 안전하게 인코딩되지 않은 채 생성된 Python에 들어갈 수 있었습니다. 다른 사용자가 에이전트를 가져온 뒤 실행하거나 배포하면 코드가 사용자의 로컬 권한 또는 AgentCore Runtime 실행 역할로 동작할 수 있습니다. 패키지 업데이트만으로 기존 생성 산출물이 수정되지는 않습니다.[1], [2], [3]
가져오기 도구는 에이전트 설정을 Python 명령으로 바꾸는 라벨 프린터와 비슷합니다. 수정 전에는 일부 값이 안전하게 이스케이프되지 않은 채 따옴표 사이에 붙여 넣어졌습니다. 값에 포함된 따옴표가 문자열을 일찍 닫아 뒤의 내용이 Python 문법으로 해석될 수 있었습니다. 수정은 값을 Python 문자열 리터럴로 인코딩해 데이터로 유지합니다.[2], [5]
핵심 개념 및 용어
에이전트 가져오기- Bedrock 에이전트 설정을 읽어 Strands나 LangChain 같은 프레임워크용 로컬 Python 프로젝트를 만드는 Starter Toolkit 작업 흐름입니다.[2], [5]
Python 문자열 리터럴- 텍스트를 데이터로 표현하는 소스 표기법입니다.
repr()은 문자를 이스케이프한 따옴표 표현을 반환해 Python 문법이 되지 않게 합니다.[5]
프레임워크 매핑
- 이 가이드에서 설명하는 약점의 CWE 참조: CWE-94
근본 원인 분석 (Root Cause)
취약한 가져오기 변환기는 f-string과 템플릿으로 Python 소스를 만들면서 프롬프트 등 Bedrock 에이전트 설정 값을 직접 삽입했습니다. Python 문자열 구분자가 포함된 값은 의도한 텍스트 문맥을 벗어날 수 있었습니다. 0.3.14 수정은 repr(str(value))를 사용하는 python_string_literal()과 JSON 호환 데이터를 정규화하는 python_data_literal()을 추가하고 생성 문자열을 해당 인코더에 통과시킵니다. 유지관리자 권고문에 따르면 공격 연쇄에는 같은 AWS 계정의 인증된 주체가 에이전트 데이터를 변경할 수 있어야 하고, 다른 사용자가 에이전트를 가져온 후 생성된 프로젝트를 실행하거나 배포해야 합니다. 코드는 가져온 사용자의 로컬 권한 또는 AgentCore Runtime 실행 역할로 동작합니다. AWS는 취약 버전에서 생성된 산출물이 단순 업데이트로 해결되지 않는다고 설명합니다. 0.3.14 이상으로 다시 가져오고 로컬 및 배포된 출력을 교체하세요. CVE-2026-106032는 가져오기 중 외부 OpenAPI 참조를 다루는 별도 문제이며 이 코드 생성 취약점과 다릅니다.
생성 코드 취약점에 도달하는 조건
| 경계 | 문서화된 조건 | 방어 조치 |
|---|---|---|
| Toolkit 버전 | 0.3.13 이하 버전은 일부 값을 안전한 리터럴 인코딩 없이 생성된 Python에 삽입합니다. | 0.3.14 이상으로 업그레이드하거나 @aws/agentcore로 마이그레이션하세요. |
| 데이터를 변경할 수 있는 주체 | 같은 AWS 계정의 인증된 주체가 Bedrock Agent의 관련 필드를 변경할 수 있습니다. | 에이전트 데이터 쓰기 권한을 신뢰된 주체로 제한하세요. |
| 다른 사용자의 가져오기 | 다른 사용자가 영향받는 Starter Toolkit 워크플로로 변경된 에이전트를 가져옵니다. | 다른 주체가 제공한 에이전트 데이터는 신뢰하지 말고 가져오기 전에 출처를 확인하세요. |
| 실행 조건 | 가져온 사용자가 생성 프로젝트를 실행하거나 배포하면 코드가 로컬 권한 또는 AgentCore Runtime 역할로 실행됩니다. | 격리된 최소 권한 자격 증명과 런타임 역할로 가져오기와 테스트를 수행하세요. |
| 이미 생성된 산출물 | 패키지를 업그레이드해도 영향받는 버전에서 이미 생성된 프로젝트는 수정되지 않습니다. | 수정된 버전으로 다시 가져오고 로컬 및 배포된 산출물을 교체하세요. |
단계별 공격 실행 흐름
같은 계정의 주체가 에이전트 데이터를 변경할 수 있음
전제 조건은 AWS 계정의 인증된 주체가 action-group 스키마, 협업 지침, 프롬프트 재정의 등 관련 Bedrock Agent 필드를 바꿀 수 있는 것입니다.[2]
소스 코드 비교: 취약한 구현 vs 보안 패치
이 업스트림 diff 발췌는 취약한 변환기가 설정 값을 삼중 따옴표 Python 문자열에 직접 삽입했음을 보여줍니다. 수정은 완성된 텍스트를 python_string_literal()에 전달하고 repr()로 데이터로 이스케이프합니다. 0.3.14는 다른 생성 문자열과 JSON 호환 데이터에도 같은 원칙을 적용하며, 출력물을 파싱해 표식 문자열이 문자열 상수로 유지되는지 확인하는 회귀 테스트를 추가했습니다. 이 발췌는 소스 코드 분석이며 삽입된 값이나 실행 가능한 익스플로잇이 아닙니다.[2], [5]
소스 코드 발췌: services/import_agent/scripts/base_bedrock_translate.py 및 services/import_agent/utils.py — PRE_PROCESSING 프롬프트 관련 부분
# 0.3.14 수정 전: 템플릿 값이 삼중 따옴표를 사용하는 Python 소스에 직접 삽입됐습니다.
self.prompts_code += f"""
PRE_PROCESSING_TEMPLATE=\"""\n
{config["basePromptTemplate"]["system"]}
\"""
"""
# 0.3.14: 전체 값을 Python 문자열 리터럴로 인코딩합니다
prompt = f"\n\n {config['basePromptTemplate']['system']}\n "
self.prompts_code += f"\n PRE_PROCESSING_TEMPLATE={python_string_literal(prompt)}\n"
# services/import_agent/utils.py
def python_string_literal(value: Any) -> str:
return repr(str(value))
엔지니어링 및 시스템 보안 강화 체크리스트
- ✓
bedrock-agentcore-starter-toolkit을 사용하는 개발 장비와 CI 작업을 조사하세요. 의존성 목록뿐 아니라 fork와 로컬 vendored 사본도 포함합니다.[1], [2] - ✓0.3.14 이상으로 업데이트하거나 지원되는
@aws/agentcoreCLI로 이전하세요. Starter Toolkit은 사용 중단되었습니다.[1], [2] - ✓영향받는 버전으로 만든 에이전트를 다시 가져오고 로컬 및 배포 산출물을 교체하세요. 패키지만 업데이트하면 이전 생성 소스가 남습니다.[1], [2]
- ✓유지관리자 권고에 따라
bedrock:CreateAgentActionGroup,bedrock:UpdateAgentActionGroup,bedrock:AssociateAgentCollaborator권한을 신뢰된 주체로 제한하세요.[2] - ✓권한이 높은 개발 환경에 가져오기 전에 계정 내 다른 주체가 Bedrock Agent의 어떤 데이터 필드를 변경할 수 있는지 확인하세요.[2]
- ✓생성된 Python을 파싱하는 회귀 테스트를 추가해 제어된 표식 문자열이 문자열 상수에만 남고 새로운 대입문이나 실행문이 되지 않는지 확인하세요.[5]
- ✓가져온 에이전트는 최소 권한 로컬 자격 증명과 Runtime 역할로 실행해 향후 생성기 결함의 영향을 제한하세요.[1]
- ✓CVE-2026-106032는 별개로 다루세요. 가져오기 중 외부 OpenAPI 참조를 통한 SSRF 및 로컬 파일 접근이며 취약 경계와 수정이 다릅니다.[6], [9]
출처
- AWS Security Bulletin 2026-127-AWS
- Maintainer advisory GHSA-37r5-8xpw-vxp9
- CVE-2026-105812 record
- NVD record for CVE-2026-105812
- Upstream fix commit 38545b1
- Separate CVE-2026-106032 maintainer advisory
- Control Plane coverage, October 7, 2026 (attention signal)
- TechGeeks coverage, October 6, 2026 (attention signal)