Cursor의 Claude Code 확장 백도어: 점검·제거·키 교체
Cursor 마켓플레이스에서 배포된 변조된 Claude Code 확장의 영향을 확인합니다. 설치 버전과 시간대를 대조하고 SSH 키와 자동 실행 흔적을 점검한 뒤, 올바른 권한으로 공식 정리 스크립트를 실행합니다. 정리 결과의 범위를 확인하고 접근 가능했던 인증 정보를 폐기한 다음 검증된 출처에서 확장을 다시 설치합니다.
목차

문제의 배포 기간에 Cursor로 Claude Code 확장 2.1.312 또는 2.1.313을 설치했다면 업무를 재개하기 전에 컴퓨터를 점검해야 합니다. 악성 흔적이 발견된 컴퓨터는 격리하고 백도어 관련 파일과 설정을 제거합니다. 그 컴퓨터에서 접근할 수 있었던 인증 정보는 신뢰할 수 있는 다른 기기에서 폐기하고 교체합니다. 확장만 업데이트해도 백도어의 자동 실행 설정까지 없어지는 것은 아닙니다.
영향을 받았나요? 출처, 버전, 플랫폼, 시간을 확인합니다
설치 내역이 아래 범위에 해당하면 조사해야 합니다. 설치 시각이 범위 밖이더라도 악성 지표가 발견되면 조사 대상입니다. 2026-11-02 기준 Cursor의 보안 공지는 영향을 받은 범위를 다음과 같이 명시합니다.
| 확인 항목 | 공지된 범위 |
|---|---|
| 확장 | Cursor VS Code Extension Marketplace에서 배포된 Anthropic.claude-code |
| 버전 | 변조된 2.1.312 및 2.1.313 패키지 |
| 플랫폼 | macOS 및 Windows |
| 설치 또는 업데이트 기간 | 2026-10-29, 약 02:27–13:35 PDT |
| 같은 기간을 UTC로 표시 | 2026-10-29, 약 09:27–20:35 UTC |
Cursor는 이 변조 패키지를 Anthropic이 개발한 것이 아니라고 설명합니다. 설치 내역은 수동 설치와 자동 업데이트를 모두 포함해 확인합니다. 이후 업데이트로 버전이 달라졌을 수 있으므로, 현재 보이는 버전만으로 사고 당시 상태를 판단해서는 안 됩니다. 사고 기간의 설치 기록과 현재 디스크에 있는 확장 정보를 구분해 살펴보고, 당시 사용한 패키지를 확인해야 합니다.
감염이 의심되는 Cursor는 실행하지 않고 닫아 둡니다. 기존 설치 기록을 살펴보거나, 확장을 로드하지 않은 상태에서 디스크에 있는 package.json 등의 메타데이터를 확인합니다. 버전, 플랫폼, 다운로드 출처, 설치 시각을 기록합니다.
claude --version으로 확장 버전을 확인해서는 안 됩니다. Anthropic 문서에 따르면 확장은 자체 CLI, 즉 명령줄 도구를 포함합니다. 터미널에서는 별도로 설치한 다른 사본이 실행될 수 있습니다.
Microsoft의 독립 분석은 Microsoft Visual Studio Marketplace와 npm 배포본이 이번 사고의 영향을 받지 않았다고 확인합니다. 따라서 버전 번호만으로 정식 패키지와 변조된 사본을 구분할 수는 없습니다.
Linux는 별도로 판단해야 합니다. Phorion의 분석에는 Linux용 코드 경로가 있지만, Cursor가 배포 피해를 확인한 플랫폼은 macOS와 Windows입니다. Linux에서도 일치하는 흔적이 발견되면 조사합니다. Linux 배포까지 확인됐다고 가정하거나 Linux에서 macOS용 정리 스크립트를 실행해서는 안 됩니다.
공식 SSH 키 검사 명령을 실행합니다
확장이 실행됐던 사용자 계정으로 검사하고, 결과를 설치 기록 및 자동 실행 흔적과 함께 해석합니다. 해당 표식이 발견되면 svc-telemetry key found가 표시됩니다.
아래는 Cursor가 공개한 명령입니다. 키를 찾지 못했다는 메시지는 컴퓨터가 한 번도 영향을 받지 않았다는 증거가 아닙니다.
macOS: Bash
영향을 받은 사용자 계정의 터미널에서 다음을 실행합니다.
grep -qs svc-telemetry ~/.ssh/authorized_keys && echo "svc-telemetry key found" || echo "No key found; machine not impacted"
이 명령은 파일 하나에서 특정 주석 문자열이 발견됐는지만 확인합니다. 설치 기록 전체나 다른 자동 실행 흔적까지 점검한 결과는 아닙니다. -s 옵션은 파일이 없거나 읽을 수 없을 때 나오는 오류 메시지도 숨깁니다. 따라서 표식이 없는 경우와 파일을 읽지 못한 경우를 구분해야 합니다. 읽기 실패가 의심되면 원인을 해결하고 다시 확인합니다. 미검출 메시지만으로 조사를 끝내지 말고, 설치 이력과 다른 흔적도 함께 검토해야 합니다.
Windows: PowerShell
영향을 받은 사용자의 프로필을 대상으로 Cursor의 검사 명령을 실행합니다.
$files = "$HOME\.ssh\authorized_keys", "C:\ProgramData\ssh\administrators_authorized_keys" | Where-Object { Test-Path $_ }
if ($files -and (Select-String svc-telemetry $files)) { "svc-telemetry key found" } else { "No key found; machine not impacted" }
관리자용 공유 키 파일을 확인할 때 접근 오류가 발생하면 먼저 해결합니다. 다른 계정으로 권한을 높였다면 $HOME이 가리키는 프로필도 달라집니다. 처음 영향을 받은 사용자 프로필을 빠뜨리지 않고 확인해야 합니다.
표식이 발견되면 컴퓨터를 격리하고 실제 키도 대조합니다. Cursor가 공개한 공격자 접속 허용 키의 지문은 다음과 같습니다.
SHA256:0Z6R+DF64Do2nwQic8a7kkfDLNNk4IiK+2U2Rci4htk
macOS에서는 다음 OpenSSH 지문 확인 명령으로 항목을 비교할 수 있습니다. 파일을 변경하지 않고 읽기만 하는 명령입니다.
ssh-keygen -lf "$HOME/.ssh/authorized_keys" -E sha256
파일 해석에 실패하거나 주석이 다르면 공지에 실린 키와 실제 키 내용을 비교합니다. 정리 스크립트는 공격자 키가 기존 줄 끝에 붙은 경우도 고려합니다. 일치하는 줄 전체를 무작정 지우면 정상 키까지 없어질 수 있으므로, 먼저 줄 내용을 확인해야 합니다.
자동 실행 흔적을 확인하고 증거를 보존합니다
컴퓨터 정리가 끝났다고 판단하기 전에 아래 파일과 시작 작업을 점검합니다. 이 목록은 조사할 지표입니다. 이름이 같다는 이유만으로 모든 항목을 삭제해서는 안 됩니다.
| 구분 | Cursor 공지의 지표 |
|---|---|
| macOS 파일 | ~/.config/.smt, ~/.config/.smtk, ~/Library/LaunchAgents/com.apple.sysmond.plist |
| macOS 자동 실행 | 레이블이 com.apple.sysmond인 LaunchAgent |
| Windows 파일 | %USERPROFILE%\.config\smt.cmd, %USERPROFILE%\.config\smtk |
| Windows 자동 실행 | 예약 작업 SysMon; 대체 실행 파일 %APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup\sysmon.cmd |
| 임시 파일 | macOS의 $TMPDIR/.stk_<10 hex>; Windows의 %TEMP%\.stk_<10 hex> |
| 네트워크 | 134[.]209[.]82[.]225 연결, TCP 22의 SSH 및 포트 8099의 HTTP /beacon 포함 |
접미사 <10 hex>는 파일 이름의 패턴을 나타냅니다. 꺾쇠괄호가 실제 파일 이름에 들어간다는 뜻은 아닙니다. 시작 항목을 삭제하기 전에 어떤 동작이 설정돼 있는지, 어떤 파일을 사용하는지 확인합니다.
팀에서 관리하는 컴퓨터라면 사고 대응 절차에 따라 확장 패키지, 관련 키 파일, 자동 실행 설정, 단말 로그를 보존합니다. 악성 코드 실행이나 백도어 설치의 증거가 있는 컴퓨터는 격리합니다. 편집기를 닫는 것만으로 독립적으로 실행되는 스크립트가 제거되지는 않습니다.
Phorion은 Node가 모듈을 로드하는 순간 삽입된 코드가 실행된다고 분석했습니다. 이는 확장의 정상 activate 콜백보다도 앞섭니다. 따라서 Claude에 프롬프트를 보내지 않았더라도 해당 코드가 실행될 수 있습니다.
Cursor는 공격자의 서버를 오프라인으로 전환했다고 보고했습니다. 이 조치는 공지된 연결 경로를 차단하지만 로컬 파일과 설정을 제거하지는 않습니다. SSH 활성화가 실패했다는 사실만으로 키 추가, 자동 실행 파일 생성, 컴퓨터 정보 수집까지 모두 실패했다고 판단해서도 안 됩니다.
Cursor 정리 스크립트를 실행하고 결과의 범위를 확인합니다
필요한 증거를 보존한 뒤 Cursor 공지에서 연결한 스크립트를 사용합니다. 내려받은 파일 내용을 읽고 편집기를 모두 닫은 다음 실행합니다.
스크립트는 변조된 확장 디렉터리, 터널 프로세스, 생성된 파일, 자동 실행 설정, 공격자의 접속 허용 키를 정리 대상으로 삼습니다. API 인증 정보는 별도로 폐기합니다. 스크립트의 정리 결과 외에도 해당 컴퓨터에서 어떤 활동이 있었는지 검토해야 합니다.
macOS 정리
Cursor의 macOS 복구 스크립트를 내려받습니다. 파일을 저장한 폴더에서 영향을 받은 사용자별로 실행합니다. sudo는 사용하지 않습니다.
bash remediate-macos.sh
echo "Exit status: $?"
이 스크립트는 root 실행을 거부합니다. com.apple.sysmond LaunchAgent, 조건에 맞는 프로세스와 파일, svc-telemetry가 포함된 확장 패키지를 대상으로 정리합니다. 공격자 키는 정확히 일치하는 텍스트를 찾아 제거합니다.
Windows 정리
Cursor의 Windows 복구 스크립트를 내려받습니다. Run as Administrator로 PowerShell을 관리자 권한으로 열고, 파일을 저장한 폴더에서 다음을 실행합니다.
powershell -ExecutionPolicy Bypass -File .\remediate-windows.ps1
$LASTEXITCODE
스크립트는 등록된 사용자 프로필을 순회합니다. 악성 동작이 설정된 예약 작업, 조건에 맞는 프로세스, 확장 디렉터리, 생성된 파일, 사용자 프로필의 접속 허용 키를 정리 대상으로 삼습니다.
정리 후에는 C:\ProgramData\ssh\administrators_authorized_keys가 있는 경우 해당 파일을 별도로 다시 확인합니다. 공격자의 키가 남아 있다면 관리자가 그 무단 항목만 정확히 제거해야 합니다. 이때 정상 키는 보존합니다.
종료 코드가 0이 아니거나 incomplete 메시지가 표시되면 후속 조사가 필요합니다. 보고된 실패 원인을 해결하고 해당 검사를 다시 실행합니다.
종료 코드 0은 스크립트가 자신의 검사 범위에서 남아 있는 문제를 보고하지 않았다는 뜻입니다. 정리 대상에서 문제가 보고되지 않았더라도, 그 전에 어떤 활동이 있었는지는 별도로 확인해야 합니다. 확장을 별도 경로에 설치했다면 그 위치의 파일도 공개 지표와 대조합니다. 로컬 SSH 서비스 설정 역시 따로 검토합니다. 정리 결과와 무관하게 실제 설정이 의도한 운영 설정과 일치하는지 확인해야 합니다.
흔적이 다시 나타나거나 예상하지 못한 SSH 접근이 발견되면 격리를 유지합니다. 이후 활동을 설명할 수 없는 경우도 마찬가지입니다. 인증 정보를 다시 넣기 전에 사고 대응 담당자가 시스템 재구축 필요성을 판단하도록 합니다.
영향받은 컴퓨터에서 접근 가능했던 인증 정보를 교체합니다
노출된 인증 정보는 신뢰할 수 있는 다른 기기에서 폐기합니다. Claude Code와 관계없는 인증 정보도 대상에 포함합니다. 정리나 시스템 재구축이 끝나기 전에는 새 인증 정보를 영향받은 컴퓨터에 저장하지 않습니다.
Cursor가 설명한 수집 대상은 환경 변수의 이름입니다. 이것만으로 변수 값이 도난당했다고 단정할 수는 없습니다. 인증 정보 교체 권고는 백도어를 통해 나중에 접근했을 가능성까지 고려한 조치입니다.
아래 목록으로 항목별 담당자를 정하고 완료 여부를 기록합니다.
| 인증 정보 | 필요한 조치 |
|---|---|
| Anthropic API 키 | Claude Console의 API 키 페이지에서 해당 키의 메뉴를 열고 Delete API key를 선택한 뒤 새 키를 만듭니다. |
| OpenAI API 키 | API 키 대시보드에서 영향받은 키를 삭제하고 새 키를 만듭니다. 사용 내역에서 예상하지 못한 활동도 확인합니다. |
| Git 호스팅 서비스 토큰 | 발급 서비스에서 개인 액세스 토큰과 접근 가능했던 다른 인증 정보를 폐기합니다. 정상 자동화 작업에는 새 인증 정보를 적용합니다. |
| SSH 클라이언트 키 | 노출 가능성이 있는 개인 키를 교체합니다. Git 호스팅 서비스와 다른 서버에서 기존 공개 키의 접근 허용도 제거합니다. |
| 클라우드 인증 정보 | 노출된 액세스 키를 폐기하고 임시 세션은 별도로 처리합니다. 무단 리소스, 접근 권한 변경, 사용 내역을 조사합니다. |
| 계정 세션 | 해당 서비스나 계정 관리자를 통해 영향받은 브라우저, CLI, SSO 세션을 폐기합니다. |
Anthropic의 키 유출 대응 안내는 키 삭제와 새 키 생성 방법을 설명합니다. OpenAI의 보안 안내는 API 키 삭제와 사용 내역 검토를 다룹니다.
GitHub에서는 개인 액세스 토큰 설정에서 해당 토큰을 삭제합니다. SSH 키와 활성 세션도 각각 확인합니다.
AWS에서는 액세스 키 노출 대응 절차를 따릅니다. 역할 세션은 별도의 임시 인증 정보 처리 안내에 따라 처리합니다.
게이트웨이 키도 같은 목록에 포함합니다. BetterToken을 사용했다면 BetterToken API 키도 대상입니다. 콘솔에서 새 키를 만들 수 있지만, 새 키를 만들었다는 사실만으로 노출된 기존 키가 폐기되지는 않습니다. 교체 완료로 처리하기 전에 발급 서비스에서 기존 키의 폐기를 확인합니다.
컴퓨터에서 svc-telemetry를 지우는 작업은 그 컴퓨터에 추가된 공격자의 접속 허용 항목을 제거하는 것입니다. 개발자가 다른 서버나 Git 서비스에 접속할 때 쓰는 자신의 개인 키를 폐기하는 작업과는 구분해야 합니다. 그 개인 키가 노출됐을 가능성이 있다면, 관련 원격 서비스에서도 기존 공개 키의 접근 허용을 제거해야 합니다.
API 키도 같은 원칙으로 처리합니다. 로컬 설정 값을 지우거나 새 키로 바꿔 넣는 것만으로 기존 API 키가 무효화되지는 않습니다. 실제로 기존 키가 폐기됐는지는 키를 발급한 서비스에서 확인해야 합니다.
전체 복구 절차에는 인증 정보 폐기 및 감사 체크리스트를 활용합니다. 발급 서비스에서 폐기됐는지 확인하고 정상 사용처에 새 인증 정보를 적용합니다. 신뢰할 수 있는 환경에서 예상한 요청이 정상적으로 처리되는지도 확인합니다.
복구 후 검증된 출처에서 다시 설치합니다
정리가 끝났거나 시스템을 재구축한 컴퓨터에 현재 제공되는 신뢰할 수 있는 배포본을 설치합니다. Cursor는 사고 발표에서 2.1.314로 업데이트하도록 요청했습니다. 이 번호는 해당 사고에서 업데이트 대상으로 지정한 버전입니다.
Anthropic의 설치 안내 페이지를 거쳐 올바른 확장 배포 페이지로 이동합니다. 게시자, Anthropic.claude-code 식별자, 배포 레지스트리, 설치된 버전을 확인합니다. 설치 후 확장 버전은 Extensions 화면에서 볼 수 있습니다.
로그인하거나 재시작한 뒤 공개된 지표를 다시 확인합니다. 자동 실행 등 백도어 흔적이 다시 나타나면 컴퓨터 사용을 중단하고 조사를 재개합니다.
터미널에서만 쓰는 CLI는 별도 패키지로 설치합니다. Claude Code 설치 및 첫 실행 안내로 해당 설치본을 확인할 수 있습니다. 다만 CLI를 설치하는 것만으로 이미 영향받은 컴퓨터가 정리되지는 않습니다.
다음 설치 전에 확장의 출처를 검증합니다
익숙한 확장 이름이라도 개발사의 설치 링크와 실제 배포 레지스트리를 확인합니다. 승인한 패키지는 게시자, 식별자, 버전, 플랫폼, 다운로드 출처를 기록합니다.
Cursor의 확장 문서는 같은 publisher.extension 이름이라도 레지스트리에 따라 게시자나 코드가 다를 수 있다고 설명합니다.
해시를 비교할 때는 같은 파일 유형, 플랫폼, 버전을 대상으로 해야 합니다. VSIX 패키지 해시와 extension.js 해시를 서로 비교해서는 안 됩니다. 알려진 악성 해시 하나와 일치하지 않는다고 정식 패키지임이 입증되는 것도 아닙니다.
2026-11-02 기준 Cursor는 팀 소유자와 관리자에게 Marketplace Install Cooldown (hours) 설정을 안내합니다. Enterprise 팀은 확장 설치 전에 유효한 Open VSX 서명을 요구할 수도 있습니다.
이 제어 기능과 함께 에이전트 지침 및 내려받은 설정도 검토합니다. AGENTS.md와 Claude Code 설정 감사 안내는 실행되는 지침이 유입되는 또 다른 경로를 다룹니다.