원문 캡처 · xplo1t-sec.github.io
원문 캡처 · xplo1t-sec.github.io

보안 연구에서 AWS MCP Server의 aws___run_script 도구가 실행하는 파이썬 코드의 샌드박스를 우회해 Lambda 환경에서 시스템 명령을 실행할 수 있는 취약점이 공개됐다. 연구자는 샌드박스의 제한된 권한 때문에 다른 AWS API 호출은 대부분 거부됐으며, 테스트에서 다른 세션이나 고객 데이터에 접근하지 못했다고 밝혔다.

AWS는 2026년 5월 6일 AWS MCP Server의 정식 출시를 발표했다. 이 서버는 AI 에이전트가 AWS 문서를 조회하거나 사용자 IAM 자격 증명으로 AWS API를 호출하게 한다. aws___run_script는 여러 API 호출과 결과 처리를 한 번의 요청에서 수행하도록 파이썬 스크립트를 Lambda 샌드박스에서 실행하는 도구다.

샌드박스는 코드의 추상 구문 트리(AST)를 검사하는 정적 검증기와 제한된 내장 함수·프록시 객체를 사용하는 실행 단계로 구성됐다. 검증기는 obj.__class__나 getattr() 같은 통상적인 속성 접근을 막았지만, 파이썬의 match/case 클래스 패턴이 내부적으로 속성을 읽는 경로는 차단하지 못했다. 연구자는 클래스의 __match_args__를 바꿔 패턴 매칭이 제한된 속성을 읽도록 했다. 이 과정에서 문자열로 된 밑줄 이름은 chr()로 실행 중에 조합해 검증을 피했다.

연구자는 collections.namedtuple()로 만든 클래스에서 시작해 __reduce_ex__와 copyreg.__newobj__를 거쳐 원래 파이썬 함수의 전역 변수에 접근했다. 샌드박스가 type() 대신 제공한 프록시는 함수 타입을 상속할 수 없을 때 새 프록시 클래스를 만들었고, 이 클래스는 변경 가능하면서 실제 함수에 대한 isinstance() 검사도 통과했다. 이를 이용해 함수의 __globals__에서 원래 __builtins__와 __import__를 얻고 subprocess를 불러왔다.

연구자는 Lambda 환경에서 id를 실행해 uid=993(sbx_user1051) gid=990 groups=990을 확인했다. env 명령으로 Lambda 실행 역할의 AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN도 노출됐으며, 샌드박스 소스 파일을 포함한 파일 읽기도 가능했다. 루트 파일 시스템은 읽기 전용이었고 /tmp는 쓰기 가능했다.

노출된 자격 증명은 연구자가 MCP 서버에 연결할 때 쓴 IAM 사용자가 아니라 Lambda 실행 역할의 것이었다. 연구자는 이 역할이 AWS 소유 계정에 속하며, sts:GetCallerIdentity를 제외한 AWS API 호출은 명시적 거부 응답을 받았다고 밝혔다. 해당 API는 권한이 필요하지 않다. 테스트에서는 인터넷 접근이 없었고 세션마다 별도 컨테이너가 사용됐으며, 다른 세션이나 고객 데이터에 접근하지 못했다.

취약점 공개 일정은 다음과 같다. 2026년 7월 26일 Amazon AWS VDP에 HackerOne을 통해 신고됐고, 7월 30일 HackerOne이 신고를 확인해 AWS 팀에 전달했다. AWS 팀은 9월 15일 신고를 확인하고 수정 작업이 진행 중이라고 알렸으며, 10월 23일 신고가 해결된 것으로 표시됐다. 공개일은 10월 24일이다.

관련 자료: PEP 634의 클래스 패턴 설명, mcp-proxy-for-aws.