Cursor 마켓플레이스의 Claude Code 확장이 SSH 백도어로 변조됐다

Hacker News어제조회 1

보안 분석팀 OpenSourceMalware가 공개한 사례에서 2026년 10월 29일 Cursor 마켓플레이스에 게시된 Claude Code 확장 2.1.313이 정상 코드 앞에 악성 로더를 끼워 넣은 채 유통된 것으로 나타났다. 문제의 확장은 VS Code가 시작되고 웹뷰가 열리면서 extension.js를 실행하는 시점에 동작하며, 사용자가 Claude와 대화를 시작하지 않아도 악성 코드가 돌 수 있다. 악성 로더는 정상 확장 번들이 초기화되기 전에 먼저 실행되도록 배치됐고, 길이는 66줄로 분석됐다.

분석에 따르면 이 확장은 npm의 @anthropic-ai/claude-code 패키지나 OpenVSX, Microsoft VS Code용 Claude 확장과는 별개다. 해당 패키지와 확장들은 악성으로 지목되지 않았다. 변조된 확장도 압축을 풀면 대부분 정상 버전과 같고 포함된 바이너리도 공식 바이너리로 보이지만, extension.js만 달라진 형태다. 패키지 설치 스크립트를 이용한 방식이 아니라 확장 런타임에 악성 동작이 실행되며, 악성 동작에서 예외가 나도 대부분 삼켜져 정상 확장은 계속 로드된다.

악성 코드가 로드되면 사용자 환경 정보를 모은다. 운영체제와 CPU 아키텍처, 홈 디렉터리와 현재 작업 디렉터리, git config --global user.email로 얻는 전역 Git 이메일이 수집 대상이다. KEY, TOKEN, SECRET, PASS, AWS, GCP 같은 문자열이 들어간 환경 변수 최대 40개의 이름도 함께 수집된다. 값 자체는 첫 비콘에 담기지 않지만, 변수 이름만으로도 어떤 클라우드와 CI, 자격 증명 체계가 설정돼 있는지 추정할 수 있다.

핵심은 SSH 접근 경로를 심는 것이다. 홈 디렉터리에 접근할 수 있으면 ~/.ssh를 만들고 권한을 0700으로 설정한 뒤 authorized_keys에 공격자가 통제하는 Ed25519 키를 추가한다. 키에는 svc-telemetry라는 관리 계정처럼 보이는 라벨이 붙고, authorized_keys 권한은 0600으로 맞춘다. 이후 macOS에서는 원격 로그인을 켜려 하고, Linux에서는 sshd나 ssh 서비스를 시작하려 하며, Windows에서는 PowerShell로 OpenSSH Server 설치와 자동 시작, sshd 실행을 시도한다. 권한 부족으로 실패해도 다음 단계는 계속 진행된다.

확장 안에는 base64로 인코딩된 OpenSSH 개인 키도 들어 있다. 이를 임시 파일로 디코드한 뒤 -N -R '*:0:localhost:22' 형태의 역방향 SSH 터널을 연다. 원격 서버가 포트를 할당하면 공격자는 그 터널을 통해 피해자 머신의 22번 포트로 접근할 수 있다. 연결은 호스트 키 검증을 끄고 known-hosts를 무시하며 내장된 키만 사용하고, 60초마다 재접속을 시도한다. Unix 계열에서는 autossh를 우선 사용하고 없으면 ssh를 쓴다.

지속성 확보 방식은 플랫폼마다 다르다. macOS에서는 com.apple.sysmond라는 이름의 LaunchAgent를 등록해 부팅과 유지 실행을 노린다. 이름은 Apple 구성요소처럼 보이지만 실제로는 사용자 LaunchAgent다. Linux에서는 ~/.config 아래 스크립트를 두고 crontab의 @reboot 항목으로 재실행을 걸며, Windows에서는 SysMon이라는 시작 시 예약 작업을 SYSTEM 권한으로 만들려고 시도하고 실패하면 Startup 폴더에 파일을 복사한다.

초기 비콘은 로드 후 약 1.5초 뒤 공개 IP 조회를 거쳐 HTTP로 전송된다. ifconfig.me와 api.ipify.org에서 공인 IP를 얻고, 수집한 JSON을 http://134.209.82.225:8099/beacon으로 보낸다. 서버 응답은 버려지며, 주입 단계에서 추가 실행 파일이나 스크립트를 내려받지는 않는다. 셸 스크립트와 터널 키도 확장 내부에 이미 포함된 내용을 디코드하거나 생성한 것이다. 다만 역터널이 열리면 이후 공격자가 보내는 명령이나 파일은 정적 분석 산출물에 나타나지 않을 수 있다.

공개된 지표에는 authorized_keys에 추가되는 키의 SHA256:0Z6R+DF64Do2nwQic8a7kkfDLNNk4IiK+2U2Rci4htk, 내장 개인 키의 SHA256:7e0a52885fadee05544a9e99eb18c792bec05900a5e1a66d68f8383decb0e278, macOS LaunchAgent 파일의 해시 ecb58cb29078d9646ad1dcdbe51526f2d9cfea06be5fb2ab183e8ecc3ab6bf15가 포함됐다.

사건의 범위를 해석할 때는 주의가 필요하다. Cursor 측은 마켓플레이스의 Claude Code 확장이 침해를 겪었고 문제의 악성 확장이 Open-VSX가 아닌 Cursor 마켓플레이스에서 나왔다고 확인했다. 반면 분석 글은 확보한 특정 아티팩트가 악성이라는 점을 보여줄 뿐, Anthropic의 공식 마켓플레이스 릴리스나 배포 인프라 전체가 침해됐다고 단정하지는 않는다.

개발자 입장에서는 IDE 확장도 일반 패키지처럼 공급망 위험으로 봐야 한다는 점이 분명해졌다. 확장이 로드되는 것만으로 SSH 키 추가와 역터널, 지속성 등록이 시도될 수 있으므로 마켓플레이스, 버전, 게시자, 설치 출처를 확인하고 필요한 확장만 최소로 유지하는 편이 안전하다. 특히 2.1.313처럼 의심스러운 버전이 설치돼 있다면 authorized_keys와 LaunchAgent, crontab, Windows 예약 작업, SSH 설정을 함께 점검해야 한다.