작성자 주: Cursor 확장 프로그램 마켓플레이스에서 발견된 악성 Claude Code 플러그인 사건을 살펴봐요. 66줄짜리 선행 로더의 실행 방식, 두 쌍의 SSH 키와 역방향 터널의 연계, 확인된 사실과 미확인 사항, 개발자가 점검해야 할 내용을 짚어봅니다.
2026년 10월 29일, Cursor의 VS Code 확장 프로그램 마켓플레이스에 변조된 anthropic.claude-code 확장 프로그램이 등장했어요. 연구진은 extension.js 맨 앞에서 약 66줄짜리 JavaScript 로더를 발견했어요. 에디터가 이 모듈을 불러오기만 하면 로더가 개발자 컴퓨터에 지속적으로 유지되는 SSH 백도어를 심으려고 시도합니다.
근거 없는 소문이 아니에요. Cursor의 공식 보안 공지와 Microsoft Security Research, Phorion, StepSecurity, OpenSourceMalware, Expel이 모두 분석을 발표했어요. Expel은 실제 고객에게 발생한 사건 4건도 조사했습니다. 11월 1일까지 StepSecurity가 정확한 샘플 비교 결과를 추가하면서 기술적인 전모가 대부분 드러났어요.
핵심 내용: 이 66줄의 코드가 무엇을 했는지, 사용자가 위험한 명령을 실행하지 않아도 되는 이유는 무엇인지, 플러그인을 삭제한 뒤에도 안전을 확신할 수 없는 이유는 무엇인지 3분 만에 살펴봅니다.

66줄 JavaScript 백도어 사건 핵심 정보
먼저 사건의 범위를 짚어볼게요. 이번 사건은 개발 도구 소프트웨어 공급망 공격으로, 문제는 Cursor의 확장 프로그램 배포 채널에서 발생했어요. Claude 모델 자체가 뚫린 것은 아니며, Anthropic 내부 시스템이 침해됐다는 증거도 없어요. Microsoft는 Visual Studio Marketplace와 공식 npm 패키지 @anthropic-ai/claude-code가 모두 영향을 받지 않았다고 확인했어요.
| 항목 | 내용 |
|---|---|
| 발생일 | 2026년 10월 29일 |
| 배포 채널 | Cursor VS Code Extension Marketplace |
| 사칭한 식별자 | anthropic.claude-code(Anthropic은 해당 버전을 빌드하거나 배포하지 않았음) |
| 악성 버전 | 2.1.312, 2.1.313 |
| 공식 발표에서 악성 설치 패키지가 확인된 플랫폼 | Windows x64, macOS ARM64 |
| 공개 배포 시간 | 약 11시간 8분 |
| 공식 발표의 영향받은 사용자 수 상한 | 5,000명(상한일 뿐, 5,000대가 장악됐다는 뜻은 아님) |
| 삽입된 코드 | extension.js 1–66행의 선행 로더 |
| 후속 수정 버전 | Anthropic이 2.1.314 배포 |
66줄 JavaScript 백도어 사건 타임라인
아래 시간은 모두 베이징 시간으로 변환했어요. 설치 패키지를 다운로드할 수 있었던 시간과 다운로드한 패키지가 실제로 실행된 시간은 구분해야 해요. 실제 실행은 다운로드보다 훨씬 늦을 수 있어요.
| 베이징 시간 | 사건 |
|---|---|
| 10월 29일 17:27 | Cursor 마켓에서 악성 확장 프로그램 다운로드 시작 |
| 10월 30일 04:35 | Cursor가 배포를 중단하고 노출 기간 종료 |
| 10월 30일 | Cursor가 보안 공지를 발표하고, Phorion, OpenSourceMalware, Microsoft가 차례로 분석 결과 발표 |
| 10월 30일 12:45 | Expel이 고객사 Mac 한 대에서 악성 코드가 처음 실행된 것을 관찰. 배포 중단 후 약 8시간이 지난 시점 |
| 10월 31일 02:30 | Cursor가 공지를 업데이트해 2.1.312를 영향받은 버전에 추가하고 침해 지표 수정 |
| 11월 1일 | StepSecurity가 MalwareBazaar 샘플을 바탕으로 정밀 정적 비교 완료 |
사건이 알려진 뒤 Cursor는 악성 버전을 제거하고 확장 프로그램 마켓 전체를 일시적으로 폐쇄했어요. 아울러 접근 기록을 감사하고, 키를 교체하고, 마켓을 재구축했으며, 클라우드 서비스 제공업체와 협력해 공격자 서버를 폐쇄했어요.
현재 공개된 자료에는 공격자가 Cursor 마켓에 빌드를 게시할 권한을 어떻게 얻었는지 설명되어 있지 않아요. 조사 결과가 나오기 전까지는 Anthropic 계정이 탈취됐다거나 Cursor에 특정 취약점이 있었다고 단정해서는 안 돼요.
JavaScript 66줄은 어떻게 Claude Code 플러그인 백도어를 실행했을까요?
“66줄”이라는 말은 플러그인 전체가 66줄뿐이라는 뜻으로 오해하기 쉬워요. 실제 정상 extension.js는 용량이 큰 압축 파일이에요. 공격자는 파일 맨 앞에 악성 로더만 삽입했는데, 이 코드는 1행부터 66행까지 이어져요.
이 코드는 즉시 실행 함수 표현식(IIFE)을 사용해요. 사용자가 Claude에 메시지를 보내거나 다른 조건이 충족될 때까지 기다릴 필요가 없어요. Cursor가 Node.js 런타임에서 확장 프로그램의 메인 파일을 로드하면, 이 로직이 정상 기능 코드보다 먼저 실행돼요.
7,386바이트의 변경: 샘플 정밀 비교
StepSecurity는 11월 1일 MalwareBazaar에서 샘플을 확보하고 SHA-256을 확인한 뒤 정적 비교를 진행했어요. 그 결과, 공격자가 플러그인을 통째로 다시 작성할 필요는 없었다는 사실이 드러났어요.
| 비교 항목 | 수치 |
|---|---|
정상 extension.js |
3,685,536바이트 |
악성 extension.js |
3,692,922바이트 |
| 추가된 로더 | 7,386바이트 |
| 추가된 내용의 비율 | 약 0.20% |
| 외부 매니페스트 버전 | 2.1.313 |
| 기능 코드 내부에 표시된 버전 | 2.1.312 |
마지막 두 행도 주목할 만해요. 공격자는 정상 빌드인 2.1.312를 바탕으로 다시 패키징하면서 외부 버전 정보만 수정했어요. 표시된 버전 번호가 코드의 실제 출처와 반드시 일치하는 것은 아니므로 버전 번호만으로 판단하기는 어려워요. StepSecurity 본문의 다른 부분에 나오는 “남은 바이트 수”에도 산술적 불일치가 있으므로, 인용할 때는 위 표의 전체 크기와 증가분을 기준으로 삼아야 해요.
사용자가 위험한 명령을 실행하지 않아도 되는 이유
이번 공격은 프롬프트 인젝션과 관계가 없어요. 연구진은 전체 과정에 다음과 같은 특징이 있음을 확인했어요.
- 사용자가 Claude와 대화를 시작하거나 모델이 고위험 명령 실행에 동의할 필요가 없어요.
- 악성 프롬프트나 npm 설치 라이프사이클 스크립트에 의존하지 않아요.
- 초기 공격에 추가 실행 파일을 다운로드할 필요가 없어요.
실제 위험은 개발자 컴퓨터에서 IDE 확장 프로그램이 가진 실행 권한에서 비롯돼요. 확장 프로그램은 Node.js에서 실행되므로 파일 시스템에 접근하고, 시스템 정보를 읽고, 자식 프로세스를 생성하고, 시스템 명령을 실행하고, HTTP 요청을 보내고, 로컬 SSH 도구를 호출할 수 있어요.

Claude Code 플러그인의 SSH 백도어가 사용하는 두 종류의 키
이 66줄짜리 코드의 교묘한 점은 시스템에 기본으로 설치된 SSH만으로 백도어를 구축했다는 데 있어요. 공격자는 별도의 원격 제어 프로그램을 개발할 필요 없이, 용도가 다른 두 종류의 SSH 키를 함께 사용하면 돼요.
첫 번째는 피해 컴퓨터의 인증을 위한 키예요. 악성 프로그램은 사용자의 authorized_keys에 공격자의 공개키를 추가해요. 공개키에는 svc-telemetry라는 표시가 붙어 있어요. 로컬 SSH 서비스가 실행 중이라면, 해당 비밀키를 가진 사람이 그 사용자로 로그인할 가능성이 생겨요.
두 번째는 외부 서버에 연결하기 위한 키예요. 악성 프로그램은 피해 기기가 공격자의 서버에 먼저 연결할 수 있도록 별도의 비밀키를 저장해요. 이 키는 사용자가 원래 보유한 비밀키가 아니에요. 간단히 말해, 첫 번째 키는 ‘공격자가 인증을 통과할 수 있는가’를, 두 번째 키는 ‘피해 컴퓨터가 먼저 외부에 연결할 수 있는가’를 해결해요.
역방향 SSH 터널을 주의해야 하는 이유
많은 기업과 가정의 네트워크는 인터넷에서 개인 컴퓨터로 직접 접속하는 것을 차단하지만, 컴퓨터가 외부로 연결을 시작하는 것은 대체로 제한하지 않아요. 역방향 터널은 이 점을 이용해요. 피해 컴퓨터가 먼저 공격자의 서버에 연결한 뒤, 서버로 들어온 접속 요청을 로컬의 22번 포트로 전달하는 방식이에요.
하지만 연결이 존재한다고 해서 로그인이 성공하는 것은 아니에요. 최종 로그인 여부는 로컬 SSH의 실행 여부, 인증 설정의 적용 여부, 공격자 서버의 포워딩 설정에 달려 있어요. 로컬 SSH가 실행 중이 아니라면 터널은 만들어질 수 있어도 원격 로그인은 할 수 없어요.
66줄짜리 악성 코드의 은폐 수법과 구현 결함
로더는 발각될 가능성을 낮추기 위해 여러 가지 수법을 사용했어요.
- 정상적인 Claude Code 기능은 계속 로드해요.
- 공격 단계마다 예외를 따로 처리해, 실패해도 알리지 않고 실행을 계속해요.
- 지속성 확보 작업에
SysMon,com.apple.sysmond처럼 시스템 구성 요소를 사칭하는 이름을 사용해요. - 연결에 실패하면 약 60초마다 재시도해요.
- 시작 후 약 1.5초가 지나면 정보 전송을 시도해요.
사용자 인터페이스에서는 아무런 이상이 보이지 않을 수 있어요.
악성 코드 자체에도 뚜렷한 결함이 있어 원격 로그인 성공률이 낮아졌어요.
| 플랫폼 | 구현 결함 | 실제 영향 |
|---|---|---|
| macOS | 일반 권한으로 Remote Login 상태를 조회해 권한 오류가 발생해요. 코드는 명확하게 ‘꺼짐’ 상태로 확인될 때만 활성화를 시도해요 | 원래 SSH가 꺼져 있던 많은 Mac에서 원격 로그인이 자동으로 켜지지 않아요. 이미 SSH가 켜져 있었다면 위험은 여전해요 |
| Windows | PowerShell로 OpenSSH Server를 설치하면서 /bin/sh에 의존하는 보조 함수를 통해 실행해요 |
일반적인 Windows에는 해당 경로가 없어 SSH 서비스 활성화 단계가 실패할 수 있어요 |
| Linux | crontab @reboot로 지속성을 확보하는데, Phorion은 crontab 검사에 결함이 있음을 발견했어요 |
반복 실행 시 사용자의 기존 예약 작업에 피해를 줄 수 있어요. Linux에서의 실제 배포 규모는 확인되지 않았어요 |
결함이 있다고 해서 코드가 완전히 무력화되는 것은 아니에요. 사용자 자신의 파일에 쓰거나 사용자 수준의 시작 항목을 만드는 데는 관리자 권한이 필요하지 않은 경우가 많아요. 따라서 원격 로그인 서비스는 시작되지 않았더라도 인증 키가 기록되고, 시작 스크립트가 생성되고, 호스트 정보가 전송되며, 백그라운드 프로세스가 계속 외부 연결을 시도할 수 있어요. “관리자 권한이 없으면 완전히 안전하다”는 생각은 성립하지 않아요.
Claude Code 플러그인 백도어가 개발자에게 미치는 영향
개발자에게 미치는 영향
- API 키 관련 환경변수 이름이 노출됐을 수 있어요: 로더는 이름에
KEY,TOKEN,SECRET,PASS,AWS,GCP가 포함된 환경변수를 최대 40개까지 선별해요. 처음에는 값이 아닌 이름을 전송하지만, 공격자는 이를 통해 어떤 API나 클라우드 플랫폼을 사용하는지 파악할 수 있어요. 백도어가 작동하면 로컬에 저장된 인증 정보도 추가로 읽힐 수 있어요. - 플러그인을 삭제해도 백도어가 사라지는 것은 아니에요: 지속성을 확보하기 위한 파일, 시작 항목, SSH 공개 키는 확장 프로그램을 삭제해도 자동으로 없어지지 않아요. Expel이 조사한 사례에서는 사용자가 플러그인이 마켓에서 내려간 뒤 Cursor를 열자 악성 활동이 시작됐고, 약 10시간 동안 이어졌어요.
- 단일 지표만 확인하면 놓칠 수 있어요: Expel은 악성 터널 프로세스가 있지만
svc-telemetry공개 키 표식은 없는 기기를 발견했어요. 조사할 때는 버전, 파일 해시, 프로세스, 네트워크 연결, 시작 항목을 함께 확인해야 해요.
업계에 미치는 영향
- IDE 확장 프로그램이 중요한 공격 표면으로 떠올랐어요: AI 코딩 도구가 보급되면서 개발자 컴퓨터에는 소스 코드, 클라우드 인증 정보, 모델 API 키가 함께 저장돼 있어요. 3.6MB짜리 압축 파일 앞에 7KB의 코드를 삽입하는 것만으로도 보안 위험이 달라질 수 있어요.
- 타사 확장 프로그램 마켓의 배포 과정을 다시 살펴봐야 해요: 이번 사건은 Cursor 마켓에서만 발생했으며, 다른 경로에서 배포된 같은 이름의 확장 프로그램에는 문제가 없었어요. 이는 ‘게시자 이름이 공식처럼 보인다’는 이유만으로 신뢰해서는 안 된다는 뜻이에요.

위 이미지는 APIYI apiyi.com 기술팀이 공개 연구를 바탕으로 정리했어요. 아래 표는 확인된 사실과 그렇지 않은 내용을 구분한 것으로, 인용하거나 전달할 때 참고해 주세요.
| 결론 | 상태 | 설명 |
|---|---|---|
| Cursor 마켓에서 변조된 Claude Code 확장 프로그램이 배포됨 | 확인됨 | 공식 공지에서 확인 |
| 악성 코드에 정보 수집, 키 삽입, 역방향 터널, 지속성 확보 기능이 있음 | 확인됨 | 여러 기관의 샘플 분석 결과가 일치 |
| 실제 고객 기기에서 악성 활동이 발생함 | 확인됨 | Expel이 4건을 처리했으며 모두 Mac |
| 컴퓨터 5,000대가 완전히 제어됨 | 확인되지 않음 | 5,000대는 영향을 받았을 가능성이 있는 최대치 |
| 사용자 API 키의 실제 값이 도난당함 | 확인되지 않음 | 최초 전송에는 변수 이름만 포함 |
| 전 세계 침입 성공 건수와 경제적 손실 | 공개되지 않음 | 추정해서는 안 됨 |
Claude Code 플러그인의 SSH 백도어 점검 방법
10월 29일부터 30일 사이에 Cursor 마켓플레이스에서 Claude Code 확장 프로그램을 설치하거나 자동 업데이트했다면, 먼저 간단하게 점검해 보세요. 다음 Node.js 스크립트는 공개된 침해 흔적 경로만 읽으며, 파일을 수정하지 않아요.
// 只读排查:检查公开披露的入侵痕迹(不能单独作为结论)
const fs = require("fs"), os = require("os"), path = require("path");
const home = os.homedir();
const checks = [
path.join(home, ".ssh", "authorized_keys"),
path.join(home, ".config", ".smt"),
path.join(home, ".config", ".smtk"),
path.join(home, "Library", "LaunchAgents", "com.apple.sysmond.plist"),
path.join(home, ".config", "smt.cmd"),
path.join(home, ".config", "smtk"),
];
for (const p of checks) {
if (!fs.existsSync(p)) continue;
const hit = p.endsWith("authorized_keys")
? fs.readFileSync(p, "utf8").includes("svc-telemetry")
: true;
if (hit) console.log("⚠️ 发现可疑痕迹:", p);
}
스크립트에서 하나라도 발견되면 파일 해시, SysMon 예약 작업, 프로세스와 네트워크 기록을 추가로 확인해야 해요. 예를 들어 134.209.82[.]225의 22번 또는 8099번 포트에 연결한 기록이 있는지 살펴보세요. Cursor 공식 공지에서도 macOS와 Windows용 점검 및 복구 스크립트를 제공해요. 스크립트에 필요한 권한을 이해한 뒤 실행하는 것이 좋아요.
의심스러운 확장 프로그램 파일이 있다면 대규모 언어 모델을 활용해 보조적인 코드 리뷰를 해볼 수도 있어요. 파일 앞부분에 child_process를 호출하거나, authorized_keys에 쓰거나, SSH 연결을 설정하는 IIFE가 있는지 중점적으로 살펴보세요. 다음은 가장 간단한 호출 예제예요.
import openai
client = openai.OpenAI(
api_key="YOUR_API_KEY",
base_url="https://api.apiyi.com/v1" # APIYI OpenAI 兼容接口
)
head = open("extension.js", encoding="utf-8", errors="ignore").read(10000)
resp = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": "请审查这段 JS 开头是否存在可疑的子进程、SSH、持久化或外连行为:\n" + head}]
)
print(resp.choices[0].message.content)
전체 검토 스크립트 보기(해시 비교 포함)
import hashlib
import sys
import openai
# 公开披露的恶意 extension.js SHA-256
KNOWN_BAD = {
"ecb58cb29078d9646ad1dcdbe51526f2d9cfea06be5fb2ab183e8ecc3ab6bf15",
}
KEYWORDS = ["child_process", "authorized_keys", "svc-telemetry",
"LaunchAgents", "schtasks", "crontab", "8099", "-R"]
client = openai.OpenAI(
api_key="YOUR_API_KEY",
base_url="https://api.apiyi.com/v1" # 使用 APIYI 统一接口
)
def sha256(path: str) -> str:
h = hashlib.sha256()
with open(path, "rb") as f:
for chunk in iter(lambda: f.read(1 << 20), b""):
h.update(chunk)
return h.hexdigest()
def review(path: str, head_size: int = 10000) -> None:
digest = sha256(path)
print("SHA-256:", digest)
if digest in KNOWN_BAD:
print("⚠️ 命中已公布的恶意哈希,请立即隔离设备并按官方指引处置")
head = open(path, encoding="utf-8", errors="ignore").read(head_size)
hits = [k for k in KEYWORDS if k in head]
print("文件开头命中关键词:", hits or "无")
prompt = (
"你是安全审计助手。下面是一个 IDE 扩展入口文件的开头部分,"
"请判断是否存在在模块加载时立即执行的代码,"
"并列出涉及子进程、SSH 密钥、持久化、网络外连的可疑片段。\n\n" + head
)
resp = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": prompt}],
max_tokens=1200,
)
print(resp.choices[0].message.content)
if __name__ == "__main__":
review(sys.argv[1] if len(sys.argv) > 1 else "extension.js")
권장 사항: 모델 검토는 보조 수단일 뿐, EDR 로그 확인과 공식 지표 대조를 대신할 수 없어요. 모델별 코드 검토 성능을 비교하려면 APIYI apiyi.com에서 동일한 키로 모델을 바꿔 호출할 수 있어요. 신규 사용자에게는 무료 테스트 크레딧이 제공돼요. 검토를 요청하기 전에는 코드에 업무상 민감한 정보가 없는지 확인하세요.
악성 확장 프로그램이 실행된 사실을 확인했다면 다음 단계를 순서대로 진행하세요.
- 조사 증거를 보존하고 기기를 격리하세요.
- 악성 파일, 자동 실행 항목, SSH 공개키를 정리하세요.
- 해당 기기에서 접근할 수 있는 저장소, 클라우드 자격 증명, 세션 토큰, API 키에 추가 위험이 있는지 평가하세요.
- 신뢰할 수 있는 상태로 복구할 수 없다면 시스템을 다시 구축하고, 신뢰할 수 있는 기기에서 모든 자격 증명을 교체하세요.
자주 묻는 질문 FAQ
Q1: JavaScript 66줄이 Claude Code 플러그인 전체를 뜻하나요?
아니요. 66줄은 `extension.js` 맨 앞에 삽입된 악성 로더를 뜻해요. 1행부터 66행까지이며 크기는 약 7,386바이트예요. 정상적인 플러그인 코드는 3.6MB 이상으로, 그 뒤에서 평소처럼 실행돼요.
Q2: 프롬프트 인젝션 공격과는 어떻게 다른가요?
프롬프트 인젝션은 모델이 위험한 내용을 출력하거나 작업을 실행하도록 유도하는 공격이에요. 반면 이번에는 확장 프로그램이 로드될 때 악성 코드가 직접 실행돼요. Claude를 거치지 않으므로 대화나 모델의 동의도 필요 없어요. 플러그인의 AI 기능을 한 번도 사용하지 않았더라도 확장 프로그램이 로드되면 코드가 실행될 수 있어요.
Q3: 공식 npm이나 VS Code 마켓플레이스에서 설치한 Claude Code도 영향을 받나요?
Microsoft는 Visual Studio Marketplace와 공식 npm 패키지 `@anthropic-ai/claude-code`가 영향을 받지 않았다고 확인했어요. Open VSX에서도 해당 악성 버전은 발견되지 않았어요. 영향을 받은 것은 Cursor 마켓플레이스에서 배포된 2.1.312와 2.1.313뿐이며, 판단할 때는 출처와 파일 해시도 함께 확인해야 해요.
Q4: 환경 변수에 저장한 API 키를 교체해야 하나요?
최초로 전송된 정보에는 환경 변수 이름만 포함됐고, 변수 값은 포함되지 않았어요. 다만 기기에서 악성 코드가 실행된 사실이 확인됐다면 백도어를 통해 자격 증명을 읽었을 가능성이 있으므로, 신뢰할 수 있는 기기에서 키를 교체하는 것이 안전해요. 환경 변수에 저장한 APIYI apiyi.com 등 플랫폼의 키도 함께 교체하고, 더 안전한 키 관리 방식을 사용하는 것이 좋아요.
Q5: AI 애플리케이션을 개발할 때 이런 위험을 어떻게 줄일 수 있나요?
개발 기기에 높은 권한의 키를 평문 환경 변수로 장기간 저장하지 말고, 프로젝트마다 다른 키를 사용하며, IDE 확장 프로그램을 정기적으로 점검하세요. APIYI apiyi.com 같은 통합 플랫폼을 통해 모델을 호출하면 하나의 키로 여러 모델을 사용할 수 있어 로컬에 흩어진 자격 증명을 줄이고, 문제가 생겼을 때도 한 곳에서만 키를 교체하면 돼요.
66줄 JavaScript 백도어 사건 핵심 요약
- 공격의 본질: Cursor 확장 프로그램 마켓플레이스가 공급망 공격으로 오염된 것이며, Claude 모델 자체가 침해된 것은 아니에요.
- 실행 방식: 66줄의 IIFE 로더가 확장 프로그램을 불러올 때 자동 실행되므로 사용자의 별도 조작이 필요하지 않아요.
- 백도어 구조: 두 쌍의 SSH 키와 리버스 터널을 사용하며, 시스템에 기본으로 탑재된 도구만 활용해요.
- 확인된 사실의 범위: 5,000명은 영향받은 사용자의 상한이며, API 키의 실제 값이 탈취됐는지는 확인되지 않았어요.
- 대응 요점: 플러그인을 삭제해도 백도어가 제거되는 것은 아니에요. 여러 측면에서 점검하고 신뢰할 수 있는 기기에서 인증 정보를 교체해야 해요.
- 보호 습관: 로컬에 평문으로 저장하는 키를 줄이고, APIYI apiyi.com을 통해 모델 호출에 필요한 인증 정보를 통합 관리할 수 있어요.
정리
66줄 JavaScript 백도어 사건은 세 가지를 보여줘요.
- 작은 변경, 큰 피해: 3.6MB 파일의 앞부분에 파일 크기의 0.2%에 해당하는 코드만 삽입해도 신뢰받던 확장 프로그램이 백도어 유포 수단이 될 수 있어요.
- 권한이 위험을 좌우해요: IDE 확장 프로그램은 Node.js 코드를 자유롭게 실행할 수 있어 일반 사용자 권한만으로도 키를 기록하고 지속성을 확보할 수 있어요.
- 마켓플레이스에서 내려갔다고 끝이 아니에요: 이미 설치된 악성 구성 요소는 나중에 실행되거나 외부 연결을 지속할 수 있으므로 별도로 점검하고 제거해야 해요.
위험 노출 기간에 Cursor 마켓플레이스의 Claude Code 확장 프로그램을 사용했다면 공식 침해 지표에 따라 점검하고, 영향을 받았을 수 있는 인증 정보를 교체하세요. 평소에는 로컬 인증 정보의 수를 줄이는 것이 좋아요. 예를 들어 APIYI apiyi.com에서 통합 키 하나로 여러 모델을 호출하면 한 곳에서 발생한 정보 유출의 영향 범위를 줄일 수 있어요.
📚 참고 자료
- Cursor 공식 보안 공지: 사고 발생 시각, 버전, 해시 및 정리 스크립트
- 링크:
cursor.com/blog/claude-code-extension-security-notice -
설명: 조사와 조치를 위한 1차 자료
-
Microsoft Security Research: 전체 공격 체인과 MITRE ATT&CK 매핑
- 링크:
microsoft.com/en-us/security/blog/2026/10/30/inside-malicious-claude-code-branded-cursor-extension-persistent-ssh-backdoor/ -
설명: 공급망 경계, SSH 메커니즘 및 지속성 분석을 다뤄요
-
Phorion: 66줄 로더와 플랫폼별 구현 결함
- 링크:
phorion.io/blog/offical-claude-code-vsx-compromise/ -
설명: 환경 변수 필터링과 Linux crontab 결함의 세부 내용을 담고 있어요
-
StepSecurity: 11월 1일 샘플 정밀 비교
- 링크:
stepsecurity.io/blog/claude-code-extension-trojanized -
설명: 파일 크기 차이와 버전 식별자 위장 증거를 제시해요
-
Expel: 실제 고객 사고 4건 조사
- 링크:
expel.com/blog/blog-fake-claude-code-extension-cursor-ssh-backdoor/ -
설명: 지연 실행과 탐지 누락 사례를 기록했어요
-
OpenSourceMalware: 악성 확장 프로그램의 내부 구조 분석
- 링크:
opensourcemalware.com/blog/trojanized-claude-code-extension-plants-persistent-ssh-backdoor - 설명: 로더의 위치와 실행 방식을 확인했어요
작성자: APIYI 기술팀
기술 교류: APIYI apiyi.com 홈페이지에서 문의해 주세요. 더 많은 자료는 docs.apiyi.com 문서 센터에서 확인할 수 있어요.
