어두운 네이비 배경 위의 추상적 기술 일러스트: 왼쪽 가장자리 근처에 키가 큰 반투명 경계 평면이 서 있으며, 얇고 옅은 윤곽선과 반투명한 채움으로 그려져 있다. 하나의 흰색 선이 왼쪽에서 들어와 그 평면을 통과한 뒤 오른쪽으로 이어지고, 네 개의 빛나는 청록색 모듈이 이루는 얕은 열 밖에 있는 작은 어두운 블록에서 끝난다. 얇은 흰색 점선 흔적이 평면 바로 앞에서 선으로부터 갈라져 나와, 평면 표면에 붙은 작은 옅은 직사각형에서 멈추며, 그 직사각형은 오직 형태만으로 표시되어 있다. 텍스트, 사람, 조직 로고는 나타나지 않는다. OrcaRouter 로고가 오른쪽 아래 모서리에 합성되어 있다.
AI Safety Incidents

GhostApproval: 여섯 개의 AI 코딩 어시스턴트가 권한을 요청하고 잘못된 파일을 지목했다

작성자

Gideon Frost

게시일

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

2026년 7월 8일 보안 업체 Wiz는 GhostApproval을 공개했다. 이는 리포지토리에 심어 둔 심볼릭 링크가 여섯 개의 AI 코딩 어시스턴트로 하여금 작업 공간 밖에 있는 ~/.ssh/authorized_keys—지속적인 비밀번호 없는 SSH 액세스 권한을 부여하는 파일—이나 다음 셸 시작 시 실행되는 ~/.zshrc에 쓰도록 만든 연구 결과다. 그런데 확인 대화상자에는 링크가 사칭한 무해한 파일 이름만 표시되었다. Wiz는 Amazon Q Developer, Anthropic의 Claude Code, Augment, Cursor, Google Antigravity, Windsurf를 테스트했고 여섯 제품 모두에서 같은 패턴을 보고했다. 실제 환경에서 악용된 사례는 보고되지 않았다. 이 작업은 개념 증명 시연이며, 아카이브 항목에는 실제 피해가 기록되지 않았다. 세 공급업체는 수정본을 배포했고, 두 곳은 보고를 확인한 뒤 답변을 중단했으며, 한 곳은 해당 동작이 취약점이라는 점 자체에 반론을 제기했다. Orca AI Incident Archive에는 이 발견에 대한 전체 기록이 SANDBOX 유형 태그 아래에 등록된 다른 항목들과 함께 보관되어 있다.

프리미티브 자체는 오래된 이야기다. CWE-61로 분류된 심볼릭 링크 추적은 수십 년 동안 공격 프리미티브로 사용되어 왔으며 — Wiz는 경쟁 조건, 패키지 관리자, 컨테이너 탈출에서의 초기 사례들을 나열한다 — 그 모든 사례는 도구가 먼저 경로를 해석하지 않은 채 사용자가 제어하는 경로에 쓰는 것에 의존했다. 이번 발견에 이름을 붙일 가치가 있었던 이유는 두 번째 계층이다. 여러 제품에서 어시스턴트 자체의 추론이 위험한 목적지를 식별했지만, 사용자에게 표시된 프롬프트는 이를 숨겼다. Wiz는 이를 CWE-451, 즉 핵심 정보의 사용자 인터페이스 오표시로 분류한다. 보안 경계는 존재했다. 그러나 사람이 그것을 행사하는 데 필요한 정보는 존재하지 않았다.

이 트릭이 어떻게 작동하는지, 그리고 그것이 무엇에 도달하는지

Wiz의 악성 저장소는 의도적으로 지루하게 만들어졌습니다. 여기에는 개발자의 SSH 인증 키 파일을 가리키는 project_settings.json이라는 심볼릭 링크와, 에이전트에게 워크스페이스를 설정하면서 그 "설정"을 업데이트하라고 지시하는 README가 포함되어 있습니다. 개발자가 어시스턴트에게 README를 따르라고 요청하면, 에이전트는 그 링크를 따라가 공격자의 공개 키를 기록합니다. 해당 머신에서 공격자가 접근할 수 있는 SSH 서비스가 실행 중이라면, 그때부터 비밀번호 없는 로그인이 가능해집니다. 두 번째 변형은 동일한 유인 파일을 ~/.zshrc로 지정하여, 다음에 터미널을 열 때 페이로드가 실행되므로 SSH 접근이 전혀 필요하지 않습니다.

Wiz의 기술적 결함에 대한 설명은 짧다. 샌드박스가 존재하는 경우에도 정규 경로를 검증하지 않기 때문에, 프로젝트 내부를 대상으로 한 쓰기 작업은 링크가 가리키는 곳에 저장된다. 이 회사의 개념 증명은 자사 표현대로 "상위 AI 코딩 어시스턴트 6개"에서 이를 재현했으며, 각각의 스크린샷을 공개했다. 영향을 받는 대상은 해당 도구 중 하나에서 자신이 작성하지 않은 저장소를 여는 모든 사람이다. 이는 일반적인 개발자 워크플로에서 포크된 프로젝트, 타사 종속성, 외부 기여자의 브랜치에 대한 코드 리뷰를 포함한다.

잘못된 파일 이름을 지정한 대화 상자

가장 명확한 증거는 Claude Code에서 나왔다. Wiz의 테스트에서 에이전트의 추론은 해당 업체의 인용문에 따르면 “project_settings.json이 실제로는 zsh 설정 파일이라는 것을 알 수 있습니다.”라고 밝혔다. 사용자가 본 권한 프롬프트는 “project_settings.json에 이 수정을 적용하시겠습니까?”라고 물었다. 에이전트는 쓰기가 어디로 가는지 알고 있었지만, 이를 승인한 사람은 알지 못했다. Wiz는 그 결과로 얻은 동의를 “내용상 공허한” 동의라고 부르고, 휴먼 인 더 루프 검사를 도장 찍기에 불과하다고 본다.

세 제품은 잘못된 라벨보다도 격차를 더 악화시켰습니다. Windsurf는 파일을 디스크에 기록했는데, 이는 수락 및 거부 버튼이 나타나기 전이었습니다. 따라서 대화 상자는 승인 게이트라기보다 되돌리기 제안이었습니다 — Wiz에 따르면 사용자가 거절할 수 있을 때쯤에는 키가 이미 설정되어 있었습니다. Amazon Q Developer도 같은 순서를 보여 주었고, 쓰기 후에는 되돌리기 버튼만 제공했습니다. Augment는 전혀 묻지 않았습니다. Wiz는 채팅 기록에 프로젝트 외부에서 온 위장 AWS 자격 증명 파일을 노출한 심볼릭 링크 읽기와, ~/.ssh/authorized_keys에 대한 심볼릭 링크 쓰기를 어떤 종류의 대화 상자도 없이 시연했습니다. 다른 쪽에서는 Cursor와 Google Antigravity가 해석되지 않은 경로를 표시하고 해석된 경로에 권한을 부여하는 클릭을 요구했습니다.

Wiz의 첫 번째 테스트는 2026년 2월 10일에 진행되었고, 보고서는 2월 12일부터 3월 5일 사이에 발송되었다. 공개 일정표에는 다음과 같은 접수 확인 기록이 남아 있다. Anthropic은 2월 15일, Augment는 2월 24일, Google은 2월 26일, Cursor는 3월 2일, AWS는 3월 6일, Windsurf를 소유한 Cognition은 6월 23일이다. 공개 공지는 첫 보고서 이후 약 5개월 뒤에 이루어졌다.

HTML card headed 'Five months from first test to public disclosure', with a kicker reading 'GhostApproval · Wiz Research · disclosure sequence'. A vertical timeline lists the dated steps: 10 February 2026, initial discovery; 12 and 14 February, Augment read and write reports; 14 February, report to Anthropic; 15 February, Anthropic closes the ticket as Informative; 24 February, Augment acknowledges; 26 February, Google acknowledges; 2 March, Cursor acknowledges; 2 and 5 March, reports to Cognition and AWS; 22 May, Google deploys its fix; 27 May, AWS ships language server 1.69.0; 23 June, AWS publishes CVE-2026-12958 and Cognition acknowledges; 8 July 2026, public disclosure. An amber box records that Augment and Windsurf acknowledged receipt and supplied no further updates. A footer cites Wiz's disclosure timeline. The OrcaRouter logo is composited in the bottom-right corner.

여섯 개 업체, 세 가지 답변

Wiz는 자체 심각도 척도로 발견 사항의 등급을 매기며, AWS에서는 High, Augment, Cursor, Google Antigravity 및 Windsurf에서는 Critical입니다. 세 벤더는 해당 보고서를 취약점으로 처리하고 수정 사항을 배포했습니다. 아카이브는 해당 항목을 높은 심각도 및 신뢰도 A로 평가하며, 주요 권고문도 메커니즘에 관해 Wiz와 일치합니다.

• Amazon Web Services. 높은 심각도이며, CVE-2026-12958로 추적되고 Language Servers for AWS 1.69.0에서 수정되었습니다. 2026년 6월 23일에 게시된 AWS 자체 공지 2026-047-AWS는 1.69.0 이전의 "심볼릭 링크 검증 누락 문제"를 확인하고 수정 사항을 포함하는 최소 플러그인 빌드를 나열합니다: Visual Studio Code용 Amazon Q Developer 2.20, JetBrains용 4.3, Eclipse용 2.7.4, Visual Studio용 Amazon Q가 포함된 AWS Toolkit 1.94.0.0. 이 공지에서는 우회 방법이 없으며 네트워크 구성이 방해하지 않는 한 언어 서버가 자동으로 업데이트된다고 명시하고, 조정된 공개에 대해 Wiz에 감사를 표합니다. CNA 기록은 이 문제에 CVSS 4.0 기준 8.5점, CVSS 3.1 기준 7.8점을 부여합니다.

• Cursor. 치명적이며, CVE-2026-50549로 추적되고 Cursor 3.0에서 수정되었습니다. 해당 기록은 GitHub가 CNA로서 2026년 6월 25일 CVSS 4.0 기준 9.3으로 게시했습니다. 그 설명에서는 공격자를 Wiz의 저장소 사례와 약간 다르게 설명합니다. 악의적인 에이전트가 작업 공간 내 심볼릭 링크를 만들고 경로 정규화를 강제로 실패시키는데, 이는 대상이 존재하지 않거나 경로에서 읽기 권한이 제거되었기 때문이며, 그 후 쓰기 작업이 승인 없이 원래 경로로 대체되어 비샌드박스 실행을 위한 샌드박스 도우미를 덮어쓸 수 있습니다.

• Google. Wiz는 Antigravity를 Critical로 평가하고 수정 사항을 버전 1.19.6으로 기록했으며, 이 버전은 2026년 5월 22일에 배포되었습니다. 해당 심각도 열에는 "Pending"이라고 표시되어 있고, Wiz의 기록에 따르면 Google은 CVE 발급 여부를 검토 중이었습니다. Antigravity에 대한 CVE 식별자는 공개 기록에 나타나지 않습니다.

• Augment. Wiz의 등급 기준 Critical이며, 0.754.3에서 테스트되었고, 2026년 2월 24일에 인지되었으나 발표 시점까지 패치되지 않았습니다. 이 발견에 관한 클라우드 보안 얼라이언스(Cloud Security Alliance)의 연구 노트에는 에이전트가 사용자 본인의 자격 증명으로 운영된다는 Augment의 반론이 기록되어 있습니다.

• Windsurf.Wiz 평가 기준으로 치명적(Critical)이며, 빌드 V1.9566에서 테스트되었고, 2026년 6월 23일 Cognition이 이를 인정했으며 게시 당시 패치되지 않은 상태였습니다.

• Anthropic. 논란 있음. CVE가 없으며, Claude Code의 테스트된 버전인 2.1.42는 Wiz 표에서 상태가 "Rejected"입니다.

HTML card headed 'One pattern, six products, six answers', with a kicker reading 'GhostApproval · vendor status at public disclosure, 8 July 2026'. A six-row table gives product, Wiz's severity rating, CVE identifier, fixed version and status: Amazon Q Developer, High, CVE-2026-12958, fixed in language server 1.69.0; Cursor, Critical, CVE-2026-50549, fixed in 3.0; Google Antigravity, Critical, no CVE published, fixed in 1.19.6 on 22 May 2026; Augment, Critical, no CVE, no fix, acknowledged 24 February 2026; Windsurf, Critical, no CVE, no fix, acknowledged 23 June 2026; Claude Code from Anthropic, Disputed, no CVE, rejected as outside the threat model. A note beneath reads that severity ratings for the products without a CVE are Wiz's own, not a CNA score, and that no exploitation in the wild was reported. A footer cites Wiz's vendor table, the AWS security bulletin and the two CVE records. The OrcaRouter logo is composited in the bottom-right corner.

Anthropic의 거절, 그리고 보고서보다 앞선 수정

Wiz에 대한 Anthropic의 답변은 신중한 거절이었습니다. Wiz가 인용한 바에 따르면 회사는 "이는 현재 우리의 위협 모델을 벗어납니다"라고 썼습니다. "사용자가 디렉터리에서 Claude Code를 처음 시작할 때, 세션을 시작하기 전에 해당 디렉터리를 신뢰한다고 확인해야 합니다. 설명하신 시나리오는 악성 심볼릭 링크가 포함된 디렉터리 안에서 사용자가 권한 프롬프트를 명시적으로 확인하는 상황을 포함하며, 이는 Claude Code의 위협 모델을 벗어납니다." 티켓은 "Informative"로 종료되었습니다.

그 추론에는 일관된 형태가 있습니다: 사용자는 디렉터리를 신뢰한 뒤 작업을 승인했으므로 두 번의 동의 순간이 모두 존중되었습니다. Wiz의 반박은 정보에 기반한 동의에는 정확한 정보가 필요하다는 것입니다 — project_settings.json쓰기가 실제로 이루어지는 위치는 ~/.ssh/authorized_keys이라는 점은 형식상 결정이지만 실질적으로는 공허한 결정입니다. Wiz는 어느 입장이 옳은지 결론을 내렸다고 주장하지 않으며, 이 기사도 마찬가지입니다. 실용적인 관찰은 AWS, Google, Cursor가 다른 견해를 취해 패치했다는 것입니다.

Wiz는 또한 분쟁의 이면에서 Claude Code가 변경되었다고 보고했다. 해당 업체가 썼듯이, 현재 버전은 심볼릭 링크를 해석하고 민감한 파일에 쓰기 전에 경고하며, Wiz는 Anthropic이 그 변경이 해당 보고서와 연결되어 있는지에 대해 밝히기를 거부했다고 언급했다. 2026년 7월 7일 Anthropic은 Wiz가 인용한 다음과 같은 정정 내용을 제공했다. "Edit/Write 권한 대화상자의 심볼릭 링크 경고는 v2.1.32(2026년 2월 5일)에 출시되었으며, 이는 이 보고서가 우리에게 제출되기 9일 전이었습니다. 이는 내부 검토를 바탕으로 한 적극적인 보안 강화의 일환으로 추가되었습니다. 논평 거부는 우리 트리아지 시스템의 자동 회신이었습니다."

버전 시점은 맞아떨어진다. 그러나 무엇이 바뀌었는지에 대한 공개 기록은 맞지 않는다. Claude Code 2.1.32는 2026년 2월 5일 17:03 UTC에 npm 레지스트리에 게시되었으며, 이는 2월 14일 보고서보다 9일 앞선 것으로, Anthropic의 말과 정확히 일치한다. 그러나 해당 릴리스의 공개 변경 로그 항목에는 에이전트 팀, 메모리 기록, 여러 UI 수정을 포함해 12가지 변경 사항이 나열되어 있으며, 그중 어느 것도 심볼릭 링크나 권한 대화상자를 언급하지 않는다. 이 정확한 동작을 설명하는 첫 변경 로그 문구는 훨씬 나중에 나온다. 2026년 9월 22일 npm에 게시된 버전 2.1.280에는 "심볼릭 링크 경로를 통한 쓰기가 트리 내 표기대로 판정되던 문제를 수정: 프롬프트가 쓰기가 실제로 적용되는 위치를 명시"라고 기록되어 있고, 2026년 10월 1일의 2.1.287에는 저장소에 커밋된 심볼릭 링크를 통해 민감한 파일에 수행되는 셸 쓰기가 이제 실제 적용 위치를 명시하고 사람의 확인을 기다린다는 내용이 기록되어 있다. Wiz가 2.1.173 및 이후 버전이 심볼릭 링크를 해석한다고 관찰한 것 역시 보고서 이후에 나온 것이며, 2.1.173은 2026년 6월 11일에 출시되었다.

무엇이 확립되었고, 무엇이 그렇지 않은가

• 확인됨. 그 메커니즘은 다음과 같다: 저장소에 놓인 유인용 심볼릭 링크, 이를 따라가는 에이전트, 워크스페이스 밖에 떨어지는 쓰기, 그리고 잘못된 경로를 지목하는 확인 화면. Wiz는 이를 여섯 개 제품 모두에서 재현하고 스크린샷을 공개했다. 두 건의 CVE 기록이 존재하며 해당 CNA가 이를 발행했고, AWS의 공지도 1.69.0 미만 버전의 취약점과 수정 사항을 독자적으로 확인해 준다. Anthropic은 그 동작이 발생했다는 사실을 부정하지 않는다. 다만 그것이 취약점이라는 점은 부정한다.

• 단일 출처. Augment, Windsurf, Google Antigravity의 심각도 등급은 CNA 점수가 아니라 Wiz의 판단입니다. 세 제품 모두에 대해 공개된 CVE가 없기 때문입니다. Windsurf와 Amazon Q가 대화 상자가 나타나기 전에 기록을 남긴다는 주장은 Wiz의 스크린샷과 설명에 근거하며, 어떤 벤더도 그 순서를 공개적으로 확인하지 않았습니다.

• 분쟁. 도구가 사용자를 속임수 작업 공간으로부터 보호할 의무가 있는지, 아니면 디렉터리 신뢰에 클릭 한 번이면 문제가 정리되는지. Anthropic은 후자라고 하고, Wiz는 자사가 제시한 프롬프트 때문에 그 클릭이 무의미해졌다고 한다. 기록 보관소는 이 기록을 분쟁으로 표시하지 않는다: 사실은 합의되었고 오직 해석만 다툰다.

• 확인되지 않음. Augment와 Windsurf가 게시 이후 해당 취약점을 수정했는지 여부. 2026년 7월 15일자 클라우드 보안 연합(Cloud Security Alliance) 메모를 포함해 이 글을 위해 검토한 모든 보도 자료는 여전히 두 제품 모두 패치되지 않은 상태로 설명하고 있으며, 어느 벤더에서도 공개된 수정 공지가 발견되지 않았다.

날짜 자체에는 작은 불일치가 하나 있다. Wiz의 게시물과 그 공개 일정은 모두 2026년 7월 8일을 제시하지만, Infosecurity Magazine은 개념 증명이 7월 7일에 공개되었고 자체 보도는 7월 9일자라고 설명하며, 아카이브 항목은 일 단위 정밀도로 2026년 7월 9일로 기록되어 있다. 발견 내용, 보도, 아카이브는 주 단위에서는 서로 어긋나지 않지만, 날짜는 최대 두 일까지 차이가 난다.

여섯 개 중 하나에 대한 초기 연구는 별도로 공로를 인정받아야 한다. CSO Online의 Evan Schuman은 2026년 7월 9일 글에서 Cato Networks가 Wiz의 더 광범위한 연구보다 앞서 해당 취약점의 Cursor에만 해당하는 버전을 보고했다고 지적했다. 2026년 7월 3일 게재된 SecurityWeek의 해당 연구 보도는 이를 DuneSlide라고 명명하고, 두 취약점에 각각 CVE-2026-50548과 CVE-2026-50549를 부여하며, 둘 모두 9.8로 평가하고, 이들을 수정한 Cursor 3.0 릴리스의 날짜를 4월 2일로 기록한다 — 이 수치들은 Cursor 수정판 공개를 6월 5일로 보는 Wiz의 일정과도, 6월 25일 공개된 9.3점의 CNA 기록과도 일치하지 않는다. 9.8과 9.3은 동일한 취약점에 대한 두 평가자의 점수다. 4월과 6월 날짜는 패치가 언제 출시되었는지를 두고 서로 어긋나는 것이 아니라 릴리스와 보안 권고를 각각 설명하는 것일 수 있다.

그 후 무엇이 달라졌나요?

구체적으로 말하면, Amazon Q Developer 사용자는 대부분의 구성에서 자동으로 언어 서버 1.69.0으로 전환되었고, Google Antigravity 사용자는 2026년 5월 22일부터 1.19.6으로, Cursor 사용자는 3.0으로, Claude Code 사용자는 링크를 해석하는 버전으로 전환되었습니다. 또한 프롬프트 충실도와 관련한 추가 변경 사항이 2026년 9월과 10월에 2.1.280 및 2.1.287에 적용됩니다. Augment 및 Windsurf 사용자는 게시 당시 이용 가능한 근거로 볼 때 주시해야 할 날짜만 얻었을 뿐 그 외에는 없었습니다.

Wiz의 자체 권고안은 좁고 기술적이었다. 프롬프트를 표시하기 전에 심볼릭 링크를 해석하고, 해석된 경로가 워크스페이스 밖에 있으면 명시적으로 경고하며, 명시적 승인 전에는 디스크에 절대 쓰지 않음으로써 대화상자가 되돌리기 버튼이라기보다 게이트가 되도록 한다. Cloud Security Alliance의 안내문은 거버넌스 관점을 더한다. 코딩 비서를 편집기 플러그인이 아니라 파일시스템 접근 권한을 가진 권한 있는 소프트웨어로 취급하고, 확인 창이 나타나기 전에 경로가 해석되는지 벤더에 직접 물어보라고 한다. CSO Online이 인용한 IDC의 Katie Norton은 잔여 위험을 공급망이 이미 작동하는 영역, 즉 외부 기여자, 포크된 저장소, 타사 의존성에 두었으며 "내부에서 작성된 코드"에는 두지 않았다.

남아 있는 것은 버그가 아니라 설계 질문이다. 독립적으로 구축된 여섯 제품이 같은 순서, 즉 요청된 경로를 보여주고 클릭을 신뢰하는 순서로 수렴했으며, 이후의 차이는 메커니즘이 아니라 책임에 관한 것이었다. 아카이브 항목에는 랜드마크 플래그가 붙어 있는데, 이는 해당 기록이 단일 벤더의 실수가 아니라 하나의 범주를 설명한다는 아카이브의 판단이며, 그 해석에 반박하기는 어렵다. 같은 짧은 개념 증명이 여섯 번 작동했기 때문이다.

Abstract technical illustration on a dark navy field: a pale translucent check mark, drawn as a thin outline, floats above a small white rectangle that represents an approval surface. Beneath the rectangle a white line drops vertically, passes through a faint horizontal plane, and emerges on the other side pointing at a second dark rectangle that is drawn only as an outline, unlit. A soft amber glow marks the point where the line crosses the plane. No text, people or organisation logos appear. The OrcaRouter logo is composited in the bottom-right corner.