당신의 AI 코딩 어시스턴트가 당신도 모르는 사이에 SSH 키를 다시 작성하고 있을지도 모릅니다.
Wiz Research는 악의적인 project_settings.json 심볼릭 링크(symlink)가 개인 키를 가리키게 할 수 있는 “GhostApproval” 취약점을 발견했습니다. 이때 나타나는 작업별 승인 대화 상자에는 심볼릭 링크의 이름만 표시됩니다. 대화 상자에서 승인을 누르는 순간, 어시스턴트에게 귀하의 자격 증명에 대한 무제한 접근 권한을 넘겨주게 됩니다.
취약점 작동 방식
- 공격자가 저장소에 project_settings.json이라는 파일을 추가합니다.
- 이 파일은 일반적인 JSON 파일이 아니라, 사용자의 ~/.ssh/id_rsa(또는 그에 상응하는) 개인 키로 리다이렉트되는 심볼릭 링크(symlink)입니다.
- 개발자가 AI 어시스턴트에게 “워크스페이스 설정(set up the workspace)”을 요청하면, 어시스턴트는 심볼릭 링크를 따라가 실제 SSH 키 파일에 쓰기 작업을 준비합니다.
- 이때 나타나는 승인 대화 상자에는 project_settings.json만 표시됩니다. 심볼릭 링크를 해석하여 디스크상의 실제 경로를 보여주지 않습니다.
- “승인(Approve)”을 클릭하면 어시스턴트에게 개인 키를 수정할 수 있는 권한이 부여되며, 결과적으로 해당 키를 신뢰하는 모든 서비스에서 사용자의 신원이 탈취됩니다.
이 버그는 널리 사용되는 6가지 도구인 Amazon Q Developer, Claude Code, Augment, Cursor, Google Antigravity 및 Windsurf에서 발견되었습니다. 이 도구들은 모두 UI가 실제 대상 경로가 아닌 전달받은 이름만을 표시하기 때문에 동일하게 오해를 불러일으키는 대화 상자를 보여줍니다.
작업별 대화 상자가 충분하지 않은 이유
작업별 승인은 사람이 AI가 수행하는 각 작업을 검토할 수 있다고 가정합니다. 하지만 실제로 이는 몇 초마다 완벽한 판단을 내리도록 강요하며, 이는 에이전트의 동작 속도보다 빠르게 수행할 수 있는 사람이 아무도 없다는 것을 의미합니다.
벤더들의 대응 – 그리고 이것이 중요한 이유
- Amazon, Google, Cursor는 이미 이를 수정했습니다.
- Anthropic(Claude Code의 제작사)은 사용자가 이해할 수 있는 내용만 승인해야 한다고 말합니다. 이는 심볼릭 링크를 찾아내는 인지적 부담을 무시하고, 사용자가 모든 파일 경로를 즉시 감사할 수 있다고 가정하는 비현실적인 기대입니다.
- Cursor는 또한 승인 프롬프트 없이 공격자가 기기에서 코드를 실행할 수 있게 하는 DuneSlide라는 별도의 문제를 공개했습니다. 이 회사는 해당 버그를 패치했으며, 이는 권한 확인이 취약할 때 이러한 어시스턴트가 얼마나 빠르게 공격 벡터가 될 수 있는지를 보여줍니다.
이러한 대응의 차이는 더 깊은 질문을 던집니다. 보안은 사후 대화 방식이어야 할까요, 아니면 어시스턴트가 절대 넘지 못하도록 미리 정의된 경계여야 할까요?
범위 지정 권한(Scoped permissions): 실질적인 대안
각 파일 작업마다 프롬프트를 띄우는 대신, 개발자는 어시스턴트가 실행되기 전에 **범위(scope)**를 설정할 수 있습니다:
- AI가 읽거나 쓸 수 있는 디렉토리 트리(예:
/src)를 정의합니다. ~/.ssh/id_rsa와 같이 해당 트리 외부의 파일에 접근하려는 모든 시도는 운영 체제나 샌드박스 계층에 의해 차단됩니다.- 범위는 한 번만 설정하면 되므로, 어시스턴트의 영향력을 제한하면서도 사람이 내려야 하는 결정의 횟수를 줄여줍니다.
범위 지정(Scoping)은 보안 모델을 “매번 묻기”에서 “필요한 것만 허용하기”로 전환합니다. 이는 컨테이너 런타임과 모바일 OS가 애플리케이션을 샌드박스화하여 문제가 발생했을 때 피해를 제한하는 방식과 유사합니다.
향후 주목할 점
- 벤더의 업데이트 배포: 영향을 받은 6가지 도구의 업데이트 노트를 주의 깊게 살펴보십시오.
요약
GhostApproval 취약점은 팝업 대화 상자를 신뢰하는 것이 잘못된 보안 의식을 심어준다는 것을 증명합니다. 모든 AI 코딩 어시스턴트가 심볼릭 링크를 해석하고 전체 경로를 표시할 때까지, 개발자는 어시스턴트가 시작하기 전에 작업할 수 있는 위치를 정확히 알려주는 '범위 지정 쓰기 권한(scoped write permissions)'을 강제해야 합니다. 이 간단한 변화만으로도 클릭 피로도를 높이지 않으면서 가장 위험한 유형의 공격을 차단할 수 있습니다.
출처: dev.to/girish_r/your-coding-agents-approval-dialog-is-lying-to-you-ih1
