Claude Code 확장을 업데이트했는데도 컴퓨터에 남은 SSH 키와 자동 실행 작업은 사라지지 않을 수 있습니다. 이번 Cursor 사고에서 복구의 단위는 확장 패키지를 넘어 개발자 계정과 운영체제까지 이어집니다.
Cursor 공식 보안 공지는 10월 29일 약 02:27–13:35 PT에 변조 패키지가 배포됐다고 설명합니다. 특히 10월 30일 11:30 PT 수정본은 macOS·Windows의 Anthropic.claude-code 2.1.312와 2.1.313을 모두 명시합니다. 2.1.313만 언급한 초기 브리핑으로 점검 범위를 정하면 놓치는 설치가 생길 수 있습니다. 이 글은 수정본을 읽고 작성했으며, 악성 패키지를 내려받거나 실행하지 않았습니다.
모델의 승인창보다 앞에 있는 신뢰 경계
확장은 모델이 생성한 명령이 아닙니다. 에디터가 로드하는 실행 코드입니다. 모델에게 “SSH 설정을 바꾸지 마라”라고 지시하거나 도구 호출을 승인제로 만들어도, 확장 자체가 변조됐다면 그 규칙을 적용하는 실행 환경부터 신뢰할 수 없게 됩니다.
공지는 호스트 정보 수집, 공격자 SSH 키 추가, 로컬 SSH 서비스 활성화와 역방향 터널 시도, 운영체제의 자동 실행 설정을 설명합니다. 환경변수에 대해서는 이름 수집을 명시합니다. 이를 비밀 값 전체의 유출이 확인됐다는 뜻으로 확대해서도 안 되고, 이후 접근 가능성이 없었다는 근거로 축소해서도 안 됩니다.
여기에는 서로 다른 권한이 걸려 있습니다. 사용자 계정이 쓸 수 있는 파일에 키나 스크립트를 남기는 일과, 관리자 권한으로 SSH 서비스를 켜는 일은 같은 작업이 아닙니다. Cursor는 코드 오류와 권한 문제로 대다수 호스트에서 SSH 연결 단계가 실패했을 것이라고 설명하면서도, 키·지속성·호스트 정보 전송 때문에 복구 절차를 따르라고 안내합니다. “관리자로 실행하지 않았으니 점검할 필요가 없다”는 결론은 공지가 뒷받침하지 않습니다.
무엇을 확인해야 다음 결정을 내릴 수 있나
아래는 공식 공지의 조치를 개발팀의 조사 기록으로 연결한 판단표입니다. CodeBridge가 정리한 운영 해설이며, 포렌식 검증 결과나 공식 복구 스크립트의 대체물이 아닙니다.
| 확보한 사실 | 아직 확정할 수 없는 것 | 다음에 남길 증거와 조치 |
|---|---|---|
| 현재 설치 버전이 바뀌었다 | 문제 시간대에 악성 패키지가 실행되지 않았는가 | 확장 설치·업데이트 이력, 플랫폼, 배포 경로를 확인 |
| 해당 시간대에 두 버전 중 하나가 설치됐다 | 설치만 됐는지, 페이로드까지 실행됐는지 | 패키지·엔드포인트·네트워크 기록을 공지의 IOC와 대조 |
svc-telemetry 키 또는 지속성 흔적이 발견됐다 |
공격자가 실제로 접속했는가, 어디까지 접근했는가 | 실행 증거가 있는 호스트를 격리하고 공식 복구 및 재구축 필요성 평가 |
| 정리 도구가 정상 종료했다 | 과거 자격 증명 접근이나 세션 악용이 없었는가 | 신뢰할 수 있는 별도 시스템에서 접근 가능했던 자격 증명·세션 교체 |
예를 들어 지금 2.1.313이 보이지 않는 노트북도 자동 업데이트 이력에 해당 설치가 있으면 조사 대상에 남습니다. 반대로 버전 문자열 하나만 같다고, 출처와 플랫폼이 다른 모든 설치를 동일한 감염으로 집계해서는 안 됩니다. 공지의 패키지 해시도 플랫폼별로 다르므로 증거 기록에는 버전 + 플랫폼 + 배포 경로 + 설치 시각 + 패키지 해시가 함께 필요합니다. 설치 시각은 PT인지 UTC인지도 남겨야 합니다.
단일 키 문자열이 없다는 관찰 역시 설치 이력과 다른 IOC를 대체하지 않습니다. 현재 파일 상태와 과거 실행 이력은 다른 증거입니다. 공지의 검사 명령만 복사해 “문제없음” 보고서로 삼기보다, 엔드포인트 담당자가 다른 기록과 함께 판단할 수 있게 보존하는 편이 유용합니다.
확장 삭제로 끝나지 않는 이유
패키지 제거는 에디터가 다음에 로드할 코드를 없앱니다. 이미 운영체제에 기록된 자동 실행 파일과 실행 중인 프로세스는 별도로 남을 수 있습니다. 공격자 서버를 중단시킨 조치 역시 통신 경로를 끊는 일이지, 모든 개발자 컴퓨터의 상태를 되돌리는 일은 아닙니다.
복구 명령은 이 글에서 재배포하지 않습니다. 설치 이력이 조건에 해당한다면 공식 공지의 최신 점검·복구 절차를 먼저 확인하세요. 공지는 macOS에서는 영향받은 사용자로, Windows에서는 관리자 PowerShell로 복구 스크립트를 실행하도록 서로 다른 조건을 둡니다. 스크립트와 IOC가 갱신될 수 있으므로 실행 전에 현재 안내와 내용을 검토해야 합니다. 여기서는 개인 컴퓨터 검사나 복구를 수행하지 않았습니다.
초기 브리핑에 인용된 “최대 5,000명”은 실제 원격 접속이나 자격 증명 탈취가 입증된 인원으로 사용할 수 없습니다. 확인한 최신 영문 공지에는 그 추정치가 없으며, 확정 감염 규모를 독립 검증할 데이터도 확보하지 못했습니다. 탐지 건수, 영향받을 수 있는 설치 수, 성공한 침해 건수는 보고서에서 따로 집계해야 합니다.
개발 환경도 배포 산출물로 관리하기
이번 사고에서 팀이 추가할 만한 것은 더 긴 시스템 프롬프트보다 확장 배포 이력입니다. 승인된 확장 ID만 기록하면 동일 ID의 변조 패키지를 구별할 수 없습니다. 설치한 아티팩트의 출처·버전·플랫폼·해시를 남기고, 회수 시 어떤 호스트에 설치됐는지 조회할 수 있어야 합니다.
모델에게 주는 권한과 실행 환경을 설치하는 권한을 함께 검토해야 합니다. 에이전트 샌드박스 해설은 모델이 실행하는 작업의 경계를 다룹니다. 이번 사례는 그 경계를 제공하는 에디터와 확장 배포 경로에도 별도의 검증이 필요하다는 점을 보여줍니다. 사고의 유입 원인이나 침해 범위 전체가 밝혀졌다고 단정할 근거는 아직 없습니다.
Claude Code의 도구·권한·검증 흐름을 정리하고 싶다면 아래 공개 유료 강의를 참고할 수 있습니다. 사고 대응 전문 과정이나 이 사건의 복구 실습을 제공한다는 뜻은 아니며, 아래 링크는 홍보 링크입니다.