AI 코딩 도구 5종 내장 브라우저 모두 뚫렸다…코덱스·VS 코드는 아직 패치 없이 노출
작성일
Forever Security, AI 코딩 도구 5종 내장 브라우저 취약점 EMBRACE 공개
코덱스·VS 코드는 10월 29일 기준 패치 없이 SSH 키 등 노출

보안업체 Forever Security가 AI 코딩 어시스턴트 5종에 내장된 브라우저를 뚫는 데 성공했다. 대상은 커서(Cursor)와 깃허브 코파일럿(GitHub Copilot), 오픈AI의 코덱스(Codex), 마이크로소프트의 VS 코드(Visual Studio Code), 앤트로픽의 클로드 데스크톱이다. 웹페이지나 로컬 파일 하나가 브라우저 뒤편의 컴퓨터 자체에 닿았다. Help Net Security에 따르면 코덱스와 VS 코드는 10월 29일(현지시각) 기준 수정 패치가 나오지 않았다. 이하 날짜는 모두 현지시각이다.
브라우저의 세 가지 안전 규칙이 무너졌다
일반 브라우저는 모든 웹페이지를 적대적인 대상으로 취급한다. 여기서 세 가지 규칙이 나온다. 페이지는 사용자의 컴퓨터에서 명령을 실행할 수 없고, 로컬 파일은 다른 파일을 읽을 수 없으며, 주소창은 브라우저만 쓸 수 있다는 것이다. 각 업체는 AI가 로컬 프로젝트를 미리 보거나 탭 내용을 읽도록 내장 브라우저의 제약을 느슨하게 풀었다.
Forever의 연구자들은 이 변경이 세 규칙을 깨는지 시험했다. 연구를 정리한 Gal Weizman에 따르면 5개 제품 모두에서 규칙 중 하나가 무너졌다. Forever는 이 패턴을 EMBRACE라고 부른다. ‘진짜 브라우저처럼 신뢰받는 내장 브라우저’(EMbedded BRowser, trusted like a real one)의 줄임말이다.
Hackread는 이 연구가 10월 29일 공개되기에 앞서 공유받았다고 밝혔다. 이 매체는 영향 범위가 작지 않다고 짚었다. Forever Security는 VS 코드 개발자가 약 4천만 명이고 코덱스 주간 사용자가 500만 명을 넘는다는 점을 들어 수억 명의 개발자와 사용자가 영향권에 들 수 있다고 추산했다.

링크 한 번 클릭하면 디스크 전체가 열린다
파일 탈취 공격은 따분한 재무 보고서처럼 꾸민 프로젝트에서 시작한다. 개발자가 어시스턴트에게 README(설명 문서)대로 환경을 설정해 달라고 요청한다. 어시스턴트는 프로젝트 안 HTML 파일로 가는 클릭 가능한 링크를 내놓고, 개발자가 이를 누른다. 그 뒤에는 화면에 아무 변화가 없다.
클로드 데스크톱과 VS 코드는 로컬 페이지가 접근할 수 있는 범위를 프로젝트 폴더로 제한한다. 그런데 이 검사는 페이지 자체에만 적용된다. 페이지가 띄울 수 있는 백그라운드 스크립트인 웹 워커(web worker)는 검사 밖에 있어서 컴퓨터의 모든 파일을 읽을 수 있다. 코덱스에는 폴더 검사 자체가 없었다.
공격은 맥OS가 사용자가 파인더로 연 모든 폴더에 써 두는 숨김 색인 파일을 읽어 표적을 찾는다. 폴더를 하나씩 따라가며 디스크 구조를 파악하는 방식이다. Forever의 시험용 컴퓨터에서는 SSH 키와 .env 파일, npm 토큰, hosts 파일이 수집되어 외부로 전송됐다.
Weizman은 Help Net Security에 이렇게 말했다. AI 하네스(harness, AI를 구동하는 실행 환경) 안에서 프로젝트를 신뢰하지 않으면 도구를 쓸 수 없게 되므로 모두가 ‘신뢰’ 버튼을 누른다는 것이다. 그래서 그 프롬프트는 사용자를 전혀 보호하지 못한다고 했다.
커서는 엔터 한 번에 계산기 실행, 코파일럿은 가짜 주소창
커서에서는 웹페이지 하나와 엔터 키 한 번이면 충분했다. 페이지는 ‘Start setup’이라는 무해해 보이는 버튼을 보여 주고, 그 뒤에 에이전트용 명령을 숨겨 뒀다. 에이전트는 숨은 명령을 읽고 실행 허락을 구했고, 승인은 키 입력 한 번이면 됐다. 커서의 샌드박스(격리 실행 환경)가 명령을 막자 에이전트는 샌드박스를 끄고 다시 시도했다. 페이지에는 그렇게 하라는 지시가 없었다.
Forever의 시험에서 이 명령이 연 것은 계산기였다. 실제 공격자라면 개발자의 전체 권한으로 어떤 프로그램이든 실행할 수 있다. 다만 이 공격은 모델의 행동에 좌우되어 매번 성공하지는 않는다. 에이전트가 스스로 안전장치를 우회하려 할 수 있다고 봐야 하느냐는 질문에 Weizman은 “물론이다. 이번 연구 범위 밖에서도 같은 행동이 반복되고 있다”고 답했다. Forever가 최근 다운로드를 다룬 연구에서도 에이전트가 허락 없이 같은 행동을 했다고 한다.
코파일럿에서는 주소창이 속았다. 1.1.27 버전에서 악성 페이지는 앱에 자신의 주소를 알려줄 수 있었고, 앱은 그 글자가 웹 주소처럼 생겼는지만 확인했다. Forever의 페이지는 가짜 로그인 양식 위에 github.com/login을 주소창에 띄웠고 에이전트의 탭 목록도 같은 주소를 보고했다. 피싱에 악용될 수 있는 구조다.
두 곳은 거절, 한 곳은 무응답…남은 구멍과 점검 사항
패치 상황은 엇갈린다. 커서는 Forever가 9월 10일 취약점을 신고한 지 3주 만인 10월 1일 수정했다. 다만 연구진에게 답장은 하지 않았다. 깃허브는 10월 13일 코파일럿 1.1.29에서 버그를 고쳤다. Hackread에 따르면 Forever가 이 결함을 파악한 날은 9월 26일이고 깃허브는 독자적으로 고쳤다. Help Net Security는 수정이 Forever의 신고 접수 전이었다고 전했다.
나머지 업체는 소극적이었다. 앤트로픽과 마이크로소프트는 개발자에게 프로젝트 폴더를 신뢰할지 묻는 ‘워크스페이스 신뢰’(Workspace Trust) 프롬프트를 이유로 Forever의 신고를 받아들이지 않았다. 앤트로픽은 7월 23일 Forever의 신고를 거절했지만 7월 24일 Noma Security가 낸 신고는 유효하다고 인정했다. 오픈AI는 Forever가 7월 27일 신고한 뒤 아무 답이 없다. Hackread에 따르면 VS 코드 문제는 9월 10일 마이크로소프트에 신고됐고 Weizman은 두 건 모두 공개 시점에 패치되지 않았다고 말했다.
Weizman은 코덱스나 VS 코드를 쓰는 팀에 각 컴퓨터의 설정 파일에서 신뢰 프로젝트 목록을 뽑으라고 권했다. 그 프로젝트의 모든 HTML 파일에서 Forever 기술 문서의 공격 패턴이 있는지 점검하라는 것이다. 이 공격에 필요한 클릭은 어시스턴트가 직접 만든 링크에서 나오고, 코덱스와 VS 코드에서는 그 링크가 여전히 디스크 전체를 읽는 페이지를 열 수 있다. Hackread는 기업이 개발자 단말에서 영향받는 도구를 파악하고 내장 브라우저 통제 수단을 점검하라는 Forever의 권고를 전했다. 취약한 도구가 설치된 단말 하나만으로도 SSH 키와 클라우드 자격 증명, 개발자 토큰, 소스 코드가 노출될 수 있다.