옅은 회청색 바탕에 희미한 청사진 격자가 있는 생성된 추상 일러스트레이션: 얇은 짙은 슬레이트색 윤곽으로 그린 큰 사각형이 중앙 오른쪽에 위치하며, 다섯 장의 옅은 회색 파일 모양 시트가 수직으로 쌓인 것을 둘러싸고 있다. 한 줄의 호박색 선이 그 쌓인 시트에서 나와 왼쪽으로 뻗어 사각형의 왼쪽 벽을 깔끔하게 통과하며, 프레임 왼쪽 1/3 지점에서 흩어져 정렬되지 않은 몇 개의 회색 직사각형 사이에 있는 작은 속이 찬 호박색 사각형에서 끝난다. 경계선은 호박색 선이 교차하는 곳에서도 끊기지 않는다. 텍스트, 숫자, 사람, 브랜드 표시 또는 조직 로고는 나타나지 않는다. OrcaRouter 로고는 오른쪽 아래 모서리에 합성되어 있다.
AI Safety Incidents

CVE-2026-18953: AWS의 Transform MCP Server에는 쓰기 경계가 없었다

작성자

Alistair Wren

게시일

최신 모델 · 20모든 모델 보기 →
벤치마크: Artificial Analysis · 매일 업데이트
모든 게시물로 돌아가기

Amazon은 2026년 8월 5일 CVE-2026-18953에 대한 보안 공지 2026-075-AWS를 발표했습니다. 이 취약점은 get_resource 도구에서 발생하는 경로 순회로, 해당 도구는 awslabs.aws-transform-mcp-server에 포함되어 있습니다. 이 서버는 개발자 본인의 컴퓨터에서 실행되는 오픈 소스 Model Context Protocol 서버로, AI 어시스턴트가 AWS Transform 작업을 구동하고 해당 아티팩트를 가져올 수 있게 합니다. 버전 0.1.0부터 0.1.4까지는 경로명을 적절히 제한하지 않았으며, savePath 매개변수는 의도한 작업 디렉터리 밖에 파일을 쓸 수 있었습니다. Amazon 저장소의 GitHub 권고문은 이 문제가 “로컬 코드 실행으로 이어질 수 있다”고 밝혔습니다. Amazon은 이를 8.6점, High로 평가했습니다. 수정 버전은 0.1.5이며, 취약한 코드 경로가 기본 구성에 존재하기 때문에 서버 측 또는 구성만으로 적용할 수 있는 우회 방법은 없습니다. 공개된 출처 중 이를 악용한 사례를 기록한 곳은 없습니다. 심각도 및 신뢰도 등급을 포함한 전체 기록은 Orca AI Incident Archive에 있으며, 같은 달에 등록된 MCP 및 에이전트 런타임 사건들과 함께 있습니다.

개발자가 작업하는 환경에서 직접 쓰는 MCP 서버

Model Context Protocol 서버는 어시스턴트에 호출 가능한 도구를 제공하는 계층이며, 이 서버는 의도적으로 로컬입니다. Amazon의 공지에서는 이를 “개발자 머신에서 로컬로 실행되는 오픈 소스 MCP 서버로서, AI 기반 어시스턴트가 AWS Transform과 상호작용하여 코드 변환 작업을 실행하고 해당 아티팩트를 검색할 수 있게 한다”라고 설명합니다. Python Package Index의 패키지 설명에 따르면, 이 서버는 19개의 도구를 통해 Transform 라이프사이클을 노출하며, 변환 워크스페이스, 작업, 커넥터, 휴먼 인 더 루프 작업, 아티팩트 및 채팅을 관리하고 메인프레임 현대화, VMware 마이그레이션, .NET 현대화 및 사용자 지정 코드 변환을 지원합니다.

바로 그 배치가 이 결함을 문제로 만드는 이유입니다. 공급업체 자체 인프라에서 실행되는 서버가 파일 이름을 잘못 처리하면 공급업체의 스토리지를 손상시킵니다. 이 서버는 개발자 권한으로, 개발자의 홈 디렉터리에서, 셸 설정과 SSH 키 바로 옆에서 실행되었으며, Amazon이 설명하는 영향은 손상된 다운로드가 아니라 "로컬 코드 실행"입니다. 이 CVE에 부여된 모든 점수는 한 가지 점에서 일치합니다. 공격 벡터는 네트워크가 아니라 로컬입니다.

권고문에서 지목된 도구는 작업 아티팩트를 디스크로 가져오는 도구입니다. get_resource는 인자로 savePath를 받으며, 이는 파일이 저장될 위치를 지정합니다. 버그는 해당 경로가 다른 곳을 지정하는 것을 막는 장치가 없다는 점입니다.

얼마나 나쁜가, 그리고 누구의 셈법으로 그런가

이 CVE에는 세 개의 점수가 부여되어 있으며 서로 일치하지 않습니다. CVE 번호 부여 기관으로서 이 CVE를 할당한 Amazon은 CVSS v3.1에서 8.6 High로 평가하며, 벡터는 CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:H입니다 — 로컬, 낮은 복잡도, 권한 필요 없음, 사용자 상호작용 필요, 범위 변경, 기밀성·무결성·가용성에 높은 영향. NIST의 National Vulnerability Database 항목은 자체 기본 v3.1 점수 8.8을 다른 벡터 CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H에 부여합니다: 낮은 권한 필요, 사용자 상호작용 없음. 둘 다 High 대역에 속합니다. 불일치는 결과가 얼마나 나쁜지가 아니라 사전 조건 — 공격자에게 이미 발판이 필요한지, 사람이 설득되어야 하는지 — 에 관한 것입니다.

동일한 CVE에 대한 Amazon의 CVSS v4.0 점수는 6.3, 중간(Medium)이며, 기준은 CVSS:4.0/AV:L/AC:L/AT:N/PR:N/UI:P/VC:N/VI:N/VA:N/SC:H/SI:H/SA:H. 영향 지표를 읽어 보세요: 취약한 시스템 자체에는 아무것도 없고, 후속 시스템에서는 모든 것이 높음입니다. 이것은 도구 자체의 경계를 벗어나는 순회의 형태입니다 — 피해는 도구가 닿을 수 있는 모든 것에 발생하므로 하위 시스템 열에 기록되고, 취약한 시스템 점수는 0입니다.

A self-built HTML card titled 'One CVE, three scores', badged 'CVE-2026-18953 · CWE-22', subtitled 'Who scored it, on which scale, and what the vectors disagree about'. A table of four rows: Amazon as CVE numbering authority, CVSS v3.1, 8.6 High, vector AV:L/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:H, noted as no privileges required and user interaction required; NIST as NVD primary, CVSS v3.1, 8.8 High, vector AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H, noted as low privileges required and no user interaction; Amazon again, CVSS v4.0, 6.3 Medium, vector AV:L/AC:L/AT:N/PR:N/UI:P/VC:N/VI:N/VA:N/SC:H/SI:H/SA:H, noted as impact recorded on the subsequent system only; CISA SSVC dated 6 August 2026 with no numeric score, listing exploitation none, automatable no, technical impact total. Three boxes below read 'Where the two v3.1 vectors diverge', 'Where they agree' and 'What the record does not carry'. A footer reads 'Sources: AWS security bulletin 2026-075-AWS; GHSA-66mr-jr63-2jgw; NVD record for CVE-2026-18953, last modified 23 October 2026; CISA Vulnrichment SSVC dated 6 August 2026. The two v3.1 vectors are separate assessments of the same CVE, not a correction of one by the other.' The OrcaRouter logo is composited in the bottom-right corner.

CISA의 CVE 보강 정보(2026년 8월 6일 자)는 SSVC 결정을 기록하고 있다. 악용(Exploitation): 없음, 자동화 가능(Automatable): 아니요, 기술적 영향(Technical Impact): 전면적(total). NVD의 기록은 2026년 10월 23일에 마지막으로 수정되었으며, 여전히 8.6과 8.8을 나란히 함께 포함하고 있다. 어느 문서도 상대를 잘못된 것으로 취급하지 않는다.

취약한 코드가 무엇을 했는지, 그리고 0.1.5에서 무엇이 변경되었는지

Amazon의 이 메커니즘 설명은 한 문장으로, 신중하게 표현되어 있다: 이 도구는 {{1}}"경로명을 적절히 제한하지 않았으며"{{/1}}, 그로 인해 {{2}}"상황에 따라 달라지는 행위자"{{/2}}가 {{3}}"savePath 매개변수를 통해 의도된 작업 디렉터리 외부에 임의 파일을 작성"{{/3}}할 수 있다. 이 권고는 그 행위자가 누구인지 정의하지 않고, 무엇이 쓰기를 유발하는지도 말하지 않으며, 성공적인 익스플로잇이 어떤 모습인지도 설명하지 않는다. 단지 그 결과가 {{4}}"로컬 코드 실행으로 이어질 수 있다"{{/4}}고만 말한다.

이 메커니즘에 관한 가장 상세한 공개 설명은 아마존의 것이 아니다. 그것은 작은 개념 증명 저장소인 ronamosa/CVE-2026-18953로, 2026년 8월 8일 GitHub에 Apache-2.0으로 공개되었으며 — 작성 시점에 커밋 두 개, 스타와 포크 없이 — 취약한 버전과 패치된 버전의 file_validation.py를 그대로 복사해 포함하고 동일한 입력으로 둘 다 구동한다.

0.1.4에 대한 해석은 다음과 같습니다: validate_write_path()는 savePath를 realpath 및 expanduser로 해석하고, 짧은 거부 목록에 있는 위치(~/.aws, ~/.ssh, ~/.gnupg, ~/.docker, ~/.aws-transform-mcp, /etc/shadow, /etc/passwd)를 거부했으며, 제공된 파일 이름에서 디렉터리 구성 요소를 제거했습니다. 해석된 경로를 어떤 기본 디렉터리나 작업 디렉터리에도 한정하지 않았습니다. 민감한 파일 이름 — .bashrc, .zshrc, authorized_keys, id_rsa — 의 차단 목록은 읽기에는 적용되었지만 쓰기에는 적용되지 않았습니다.

저장소는 이것이 허용하는 세 가지 쓰기를 보여 줍니다: 경로 탐색이 전혀 필요 없는 절대 경로, 상대 경로 ../../를 통한 탈출, 그리고 읽기 경로가 거부했을 도트파일 이름입니다. 세 가지 모두 스크립트가 만드는 임시 디렉터리 안에 들어가며, 샘플 출력은 dropped_by_absolute_path.sh, dropped_by_traversal.sh 및 .bashrc가 위장 홈 디렉터리 아래에 있음을 보여 줍니다. 실제 홈 디렉터리는 전혀 건드리지 않습니다. 버전 0.1.5는 빠져 있던 경계를 추가합니다: 다음에서 가져오는 기본 디렉터리, 즉 $AWS_TRANSFORM_MCP_WRITE_DIR 또는 서버의 시작 작업 디렉터리이며, 해석된 모든 쓰기는 그 아래에 있어야 하고, 최종 해석된 쓰기 경로에는 파일 이름 차단 목록이 적용됩니다. 수정된 검증기는 세 가지 모두에 대해 “쓰기 경로는 작업 디렉터리 내에 있어야 합니다”라는 오류를 발생시킵니다.

A generated abstract illustration on a pale grey-blue field with a faint blueprint grid: two nested rectangles drawn in thin dark-slate outline, one inside the other with a gap between them, sit slightly left of centre. A dotted cyan line runs from the centre of the inner rectangle outward, crossing the gap, and stops at the outer rectangle before resuming on the far side. Three small solid amber squares sit at staggered positions along that line, the outermost well beyond the larger rectangle. No text, numbers, people, brand marks or organisation logos appear. The OrcaRouter logo is composited in the bottom-right corner.

그런 세부 사항은 어느 것도 권고문에 나오지 않으며, 저장소도 그것이 권고문에서 비롯되었다고 주장하지 않는다. 거부 목록, 읽기 전용 파일명 검사, 기본 디렉터리 수정은 소스 코드에서 재구성한 것으로 볼 것이지 두 번째 공식 발견 사항으로 볼 것은 아니다. 저장소가 권고문에 더하는 것은 경로를 제공할 수 있는 주체에 대한 설명이다. 서버의 역할이 작업 및 태스크 내용을 어시스턴트의 컨텍스트로 끌어오는 것이기 때문에 savePath를 선택하는 주체는 키보드 앞에 있는 사람일 필요가 없다. 같은 도구를 통해 가져온 신뢰할 수 없는 콘텐츠에 의해 조종되는 어시스턴트가 그 결정을 내릴 수 있다. 이는 코드와 도구 설계에 근거한 저장소의 논변이지 Amazon이 하는 주장은 아니다. Amazon이 정의하지 않은 "컨텍스트 의존적 행위자"는 이와 일치하며, 그 이상은 말하지 않는다.

패치와 공지 게시까지 일곱 주

수정 사항은 공지와 함께 나오지 않았다. 패키지가 배포되는 레지스트리에서 제공하는 자사 메타데이터인 Python Package Index의 릴리스 이력에 따르면 0.1.4는 2026년 5월 20일, 0.1.5는 2026년 6월 17일로 기록되어 있으며, 이는 공지 2026-075가 발행된 2026년 8월 5일보다 칠 주 전입니다. 인덱스에는 0.1.0 파일이 전혀 없습니다. 영향 범위 내에서 가장 먼저 게시된 아티팩트는 2026년 5월 9일에 업로드된 0.1.1입니다. 따라서 인덱스에서 설치한 개발자는 5월 9일부터 6월 17일 사이에 취약한 빌드만 받을 수 있었고, 릴리스를 추적하는 사람은 이미 6월 중순에 패치된 코드를 사용하고 있었습니다.

A self-built HTML card titled 'The patch came seven weeks early', subtitled 'Release dates from the Python Package Index, laid against the advisory', with a side note that Amazon publishes no report date and no discovery date. A vertical timeline of nine dated milestones reads: 23 April 2026, first package file 0.0.0 on the index; 9 May 2026, 0.1.1, earliest artifact inside the affected range; 20 May 2026, 0.1.4, last vulnerable release; 17 June 2026, tagged PATCHED, 0.1.5, first fixed release, seven weeks before the bulletin; 5 August 2026 at 12:30 PDT, tagged ADVISORY, bulletin 2026-075-AWS published with the CVE published at 19:33 UTC the same day; 6 August 2026, CISA SSVC recording exploitation none, automatable no, technical impact total; 8 August 2026, independent proof-of-concept repository published; 23 October 2026, NVD last modified, carrying NIST's 8.8 beside Amazon's 8.6; 27 October 2026, 0.2.4, latest release at the time of writing. A highlight box reads '49 days' from the first fixed release to the bulletin. A footer reads 'Sources: PyPI release metadata for awslabs.aws-transform-mcp-server; AWS security bulletin 2026-075-AWS; CVE record for CVE-2026-18953; CISA Vulnrichment; github.com/ronamosa/CVE-2026-18953; NVD.' The OrcaRouter logo is composited in the bottom-right corner.

아마존은 해당 문제를 언제 알게 되었는지, 신고가 언제 도착했는지, 또는 그 문제를 종결지은 릴리스가 왜 배포되었는지는 밝히지 않았다. 기록에 이름이 언급된 사람은 Drew Raines 한 명뿐이며, 그는 게시 공지와 GitHub 보안 공지 모두에서 "조정된 이슈 공개 절차를 통해 이 이슈에 협력한 점"에 대해 감사를 받았다. GHSA-66mr-jr63-2jgw는 2026년 8월 5일 아마존의 awslabs/mcp 저장소에 게시되었으며, 이는 게시 공지와 같은 날이었다. CVE 기록은 UTC 13:44에 예약되었고 그날 UTC 19:33에 게시되었다.

따라서 수정이 이루어진 날짜는 확인되었지만 그 이유는 확인되지 않았다. 보안 권고문보다 7주 앞서 레지스트리에 올라와 있는 패치 버전은 조용한 수정 뒤 조정된 공개가 이어졌다는 해석과 일치한다. 그러나 이는 두 개의 타임스탬프에서 이끌어낸 추론일 뿐이며, 어느 문서에도 명시되어 있지 않다.

기록이 입증하는 것과 입증하지 못하는 것

아카이브는 이 항목을 A로 평가합니다 — 문서화가 충실하고 1차 출처들이 일치합니다 — 그리고 분쟁 항목으로 표시하지 않습니다. 이 항목을 리서치 기록, 즉 배포 사고가 아닌 취약점 발견 사례로 분류하며, 실제 피해가 기록된 바 없습니다. 등급은 문서화 품질에 관한 것이며, 검토된 근거에 비추어 타당합니다: 보안 공지, GitHub 보안 권고, CVE 기록은 제품, 버전, 수정 사항 및 공로 인정에 대해 일치하는 세 개의 Amazon 게시 문서입니다.

• 확정됨. Amazon은 2026년 8월 5일 CVE-2026-18953을 다루는 공지 2026-075-AWS를 게시했습니다. 이 CVE는 CWE-22 경로 순회 취약점으로, get_resource의 savePath 처리에 존재하며 awslabs.aws-transform-mcp-server 0.1.0부터 0.1.4까지에 영향을 주고 0.1.5에서 수정되었습니다. 취약한 경로가 기본 구성에 있기 때문에 서버 측 또는 구성만으로 가능한 우회 방법은 없습니다.

• 확인됨. 점수와 그 차이: CVE 번호 부여 기관인 Amazon의 8.6 High, NVD 기본 점수인 NIST의 8.8 High, CVSS v4.0 기준 6.3 Medium, 그리고 악용 사례와 자동화 가능 경로가 관찰되지 않았다는 CISA의 8월 6일 SSVC 결정.

• 확인됨. Python Package Index의 릴리스 날짜와 조정된 공개에 대한 Drew Raines의 공로 인정.

• 제3자에 의해 소스 코드에서 추론되었습니다. 거부 목록, 읽기 전용 파일명 차단 목록, 부재하는 기본 디렉터리 및 _ALLOWED_WRITE_BASE 수정은 모두 ronamosa의 개념 증명 저장소에서 비롯되었으며, 두 검증기 버전의 벤더링된 사본은 누구나 비교해 볼 수 있습니다.

• 타임스탬프와 설계에서 추론한 것입니다. 0.1.5가 의도된 보안 릴리스였고, 신뢰할 수 없는 콘텐츠에 의해 조종된 어시스턴트가 악의적인 경로를 제공할 수 있다는 점입니다. Amazon은 어느 것도 명시하지 않습니다.

• 확인되지 않음. 실제 환경에서의 익스플로잇 여부. CISA의 "익스플로잇: 없음"은 공개된 개념 증명(PoC)이 등장하기 두 달 전인 8월 6일자이므로, 그 시점만을 반영할 뿐 이후 상황은 말해주지 않는다. 영향을 받은 사용자 수, 고객 공지, 텔레메트리 정보는 공개되지 않았다.

• 확인되지 않음. 독립 보도. 이 CVE를 다룬 주류 매체는 없는 것으로 보입니다. 공개 기록은 아마존의 세 문서, NIST와 CISA의 해당 문서 보강, 기록을 다시 서술한 트래커 페이지, 그리고 위에서 설명한 작은 개념 증명 저장소 하나입니다.

무엇이 변경되었으며, 무엇을 확인해야 할까요

Amazon의 해결책은 버전 번호를 올리는 것뿐입니다. 0.1.5 이상으로 업그레이드하고, "포크되었거나 파생된 모든 코드가 새 수정 사항을 반영하도록 패치되었는지 확인하십시오."라고 말합니다. 파급 효과가 있는 것은 두 번째 조항입니다. 이 서버는 오픈 소스이며, 0.1.4 검증기를 벤더링한 포크는 권고문은 물려받지 않으면서 결함은 물려받습니다. 이 공지에서는 파생 코드 운영자에게 변경 사항을 해당 코드에 반영하라고 요청합니다. 즉, 업스트림 릴리스는 다른 누군가가 유지 관리하는 사본에는 도달하지 않습니다.

개념 증명 저장소는 권고문이 거부하는 무언가를 제안한다. 즉시 업그레이드할 수 없는 운영자는 서버의 작업 디렉터리를 전용 빈 디렉터리로 설정해 서버를 실행하고, 서버가 쓸 수 있는 모든 파일을 침해된 것으로 간주해야 한다고 그 저장소는 말한다. 아마존의 입장은 더 엄격하다. 서버 측이나 설정만으로 가능한 우회 방법은 전혀 없다. 저장소 자체의 설명에 따르면 그 제안 역시 빈약한데, 취약한 코드가 애초에 쓰기를 작업 디렉터리로 제한한 적이 없기 때문이다. 두 입장이 상충하는 부분에서는 공급업체의 업그레이드 전용 지침이 우선한다.

이 기록에서 유용한 점은 점수가 아니라 그 형태입니다. 로컬 MCP 서버, 호출자가 제공한 목적지로의 아티팩트 다운로드, 그리고 둘 사이에 경계가 없다는 점입니다. 중요한 검사는 게시 날짜가 아니라 고정된 버전입니다. 즉 0.1.5 이상이며, 검증기를 복사한 모든 포크에도 동일한 변경이 반영되어야 합니다.