VSCode의 SSH 원격 편집 기능, 실상은 에이전트 침투
원제: VSCode's SSH Agent Is Bananas (2025)
왜 중요한가
LLM 에이전트 개발이 확산되는 가운데, VSCode 원격 편집의 광범위한 권한 설계는 개발 서버 보안 정책 재검토를 촉구한다.
Fly.io의 보안 전문가 Thomas Ptacek가 2025년 2월 7일 공개한 기사에서, VSCode의 SSH 원격 편집 기능이 Emacs 'Tramp'와 달리 Node.js 바이너리를 포함한 에이전트를 원격 서버에 설치하고, WebSocket을 통해 파일시스템 조작·셸 프로세스 실행·자기 지속까지 수행한다는 사실을 밝혔다.
Fly.io의 보안 리서처 Thomas Ptacek(@tqbf)는 VSCode의 SSH 원격 편집 기능 내부 구조를 조사한 결과를 블로그에 공개했다. Ptacek가 주목한 배경에는 LLM 코드 생성 에이전트가 있다. Cursor 등 VSCode 파생 에디터에서 LLM이 코드를 생성하고, 에이전트가 실행·오류를 피드백하는 클로즈드 루프 개발이 일반화되고 있다. 이 루프를 자신의 로컬 머신이 아닌 격리된 Linux 인스턴스 위에서 돌리는 것이 이상적이며, Fly.io가 그 용도로 Machine을 활용하려 한 것이 조사의 출발점이다.
Emacs의 Tramp는 원격 SSH 세션에서 Bourne shell 명령어만으로 작동하는 경량 설계다. 반면 VSCode 원격 편집은 전혀 다른 접근을 취한다. 먼저 Bash 스니펫을 원격 서버에 전송하고, 그 스니펫이 Node.js 바이너리를 포함한 전용 에이전트를 다운로드·설치한다. 에이전트는 SSH 포트 포워딩을 경유해 기동하며, ローカルの VSCode フロントエンドとWebSocket 접속을 확립한다.
この接続 위에서 에이전트가 실행할 수 있는 조작은 광범위하다. 파일시스템 탐색, 임의 파일 편집, 독자적인 PTY 셸 프로세스 실행, 그리고 재기동 후에도 자신을 유지하는 영속화까지 갖추고 있다. Ptacek는 '보안 업계에는 이런 동작을 하는 툴에 이름이 있다'고 에둘러 표현하며, 개발 서버에서의 VSCode 원격 편집 허용에는 신중해야 하며 프로덕션 인시던트 중이라면 더욱 위험하다고 경고했다.
Fly.io 측은 자사 Machine에 커스텀 접속을 구현하는 데 이 구조를 직접 이용할 필요는 없었다고 밝히면서도, '학습한 이상 독자와 공유해야 한다'는 이유로 공개를 결정했다.