짙은 네이비 배경 위의 추상적인 기술 일러스트레이션: 중앙 왼쪽에 작은 플랫 벡터 패키지 큐브가 있고, 가느다란 앰버색 선이 아래로 갈고리처럼 이어져 개발자 워크스테이션을 간결하게 표현한 형태로 들어간다. 워크스테이션에서 오른쪽으로 가느다란 시안색과 스틸 블루 필라멘트 부채꼴이 펼쳐져 느슨한 격자 위의 많은 작은 원형 노드를 향하고, 그중 두 개는 패키지 큐브 쪽으로 다시 위로 휘어져 올라가며, 맨 오른쪽의 한 노드는 홀로 떨어져 연결되지 않은 채 있다. 사람, 로고, 텍스트는 나타나지 않는다. OrcaRouter 로고가 오른쪽 아래 모서리에 합성되어 있다.
AI Safety Incidents

Tensorlake의 npm SDK가 AI 에이전트 자격 증명을 탈취하고, 토큰을 폐기하면 홈 디렉터리를 삭제하도록 오염됐다

작성자

Alistair Wren

게시일

최신 모델 · 20모든 모델 보기 →
벤치마크: Artificial Analysis · 매일 업데이트
모든 게시물로 돌아가기

2026년 10월 8일, tensorlake의 오염된 릴리스 — 신뢰할 수 없는 LLM 생성 코드를 격리된 샌드박스 안에서 실행하는 Tensorlake 플랫폼용 npm SDK — 가 npm 레지스트리에 도달했습니다. 버전 0.12.07게시된 시각은 01:12:07; Socket의 연구원들은 약 11분 후에 이 패키지를 발견해 알렸다고 밝혔습니다. 이는 승인된 릴리스가 아니었습니다. Tensorlake 측은 공격자가 회사 GitHub 저장소에 코드를 직접 푸시하고 프로젝트 자체의 릴리스 워크플로를 통해 게시했기 때문에, 패키지가 유효한 npm 출처 증명 — 이미 오염된 소스에 대해 어디에서 빌드되었는지를 보여주는 서명된 증명 — 을 갖추고 있었다고 설명했습니다. 회사 측은 해당 버전이 약 1시간 40분, 01:12부터 02:54 UTC까지, npm이 이를 제거하기 전까지 공개된 상태였다고 밝혔습니다.

이 페이로드는 임포트도, 실행 중인 에이전트도 필요하지 않았다. 하나의 preinstall 훅이 패키지 매니페스트에서 실행한 것은 node lib/setup.mjs이다. 이는 난독화된 로더로, 머신에 Bun 런타임을 떨어뜨리고 이를 사용해 실행한 것은 lib/Math_Symbol.js, 856,501바이트의 자격 증명 탈취기이자 자기 전파하는 웜이다. 그 한 버전을 일반 설치한 사람은 누구나 그것을 실행했다. 그 버전은 패키지의 latest 태그였기 때문에, 그 버전이 바로 라이브 상태일 때 기본 설치가 선택하게 되는 버전이었다.

이 기록이 보존할 가치가 있는 이유는 페이로드의 크기가 아니라 표적 목록입니다. Shai-Hulud 패밀리는 이전에 문서화된 적이 있습니다. npm 및 GitHub 토큰, AWS 자격 증명, Kubernetes 및 Vault 시크릿, SSH 키, .env 파일, 브라우저 비밀번호 및 암호화폐 지갑과 함께, 이 빌드는 특히 다음을 수집했습니다: AI 개발 도구 구성 및 MCP 파일 — 즉, 다음 도구들과 관련된: Claude Code, Cursor, Kiro, Windsurf 및 Zed, Socket에 따르면. 또한 자체 .claude/settings.json 및 .vscode/tasks.json을 도달할 수 있는 저장소에 작성하여, 개발자가 다음에 해당 프로젝트를 Claude Code 또는 VS Code에서 열 때 코드가 다시 실행되도록 했습니다. 이는 사람들이 에이전트를 구축하는 머신을 정조준한 공급망 공격입니다.

릴리스가 메인테이너 계정에서 어떻게 유출되었는가

Socket, SafeDep, Aikido는 각각 10월 8일에 자체 분석을 발표했으며, 메커니즘에 대한 이들의 설명은 일치한다. 이 기록에 대한 아카이브의 신뢰도 등급은 A이며, 분쟁 중으로 표시되지 않았고, 출처에서 발견된 어떤 것도 이들 중 어느 설명과도 모순되지 않는다.

SafeDep의 분석 글은 저장소의 main 브랜치에서 01:20과 03:57 UTC 사이에 10월 7일, 저장소 관리자 계정에 귀속되며 GitHub 웹 인터페이스를 통해 이루어진 8개의 커밋을 추적한다. 아카이브가 최초의 악성 커밋으로 지목하는 커밋은 41b38f0, 10월 7일 03:44:48 UTC 기준으로 4개 파일을 수정한 리비전이며 메시지는 "Add files via upload"이고 GitHub의 verified 서명이 붙어 있다 — GitHub는 자체 웹 편집기에서 만들어진 커밋에 서명하므로, "verified"는 사람이 아니라 편집 경로를 기록할 뿐이다. 그 커밋이 건드린 파일은 typescript/lib/Math_Symbol.js와 typescript/lib/setup.mjs 외에는 없으며, GitHub API에 따르면 페이로드뿐이고 그 외에는 아무것도 아니다.

SafeDep는 운영자의 행동에 대한 해석을 제시하며 이를 자체적인 추론이라고 표시한다. preinstall 훅의 첫 번째 편집으로 해당 파일의 JSON 구문이 깨졌고 19분 후 수정 커밋이 뒤따랐는데, SafeDep는 이를 스크립트화된 파이프라인이라기보다 사람이 브라우저에서 파일을 편집하는 것과 일치한다고 설명한다. Socket, SafeDep, Aikido, StepSecurity 또는 Tensorlake가 공개한 어떤 자료도 유지관리자의 계정이 탈취된 방법을 밝히지 않는다.

공격자는 npm 토큰이 필요하지 않았습니다. SafeDep에 따르면 해당 계정은 10월 8일 00:08 UTC에 프로젝트의 publish_npm.yaml 워크플로를 수동으로 시작했습니다. 빌드 로그에는 게시된 tarball 안에 페이로드 파일들이 나타나 있습니다. 릴리스는 npm trusted publishing을 사용했으며, 같은 실행에서 게시된 형제 tensorlake-native-* 패키지들은 유효한 SLSA 출처 증명을 갖추고 있습니다 — 오염된 소스의 빌드에 대해 진정으로 유효한 출처 증명입니다. 릴리스는 워크플로가 시작된 지 12분 후에 게시되었습니다.

아카이브에는 저장소가 약 20시간 동안 침해된 상태였다는 기록이 있다 — 아래 타임라인이 커밋별로 제시하는, 게시가 실행되기 전까지의 그 간극 — 이는 공격자가 "자체 릴리스 워크플로를 통해" 게시했다는 Tensorlake의 자체 성명과 일치한다.

페이로드가 실행된 후 수행한 작업

A screenshot of a card titled 'A credential stealer with an AI-tooling list', kicked 'tensorlake@0.5.144 · what the payload collected', subtitled 'Per Socket, SafeDep and Tensorlake's advisory — grouped by what each collector reached for'. Three columns of paired labels sit side by side. 'Publishing and source control' lists npm tokens from .npmrc, the token API and the OIDC exchange; GitHub tokens with a repository and workflow permission check; GitHub Actions secrets read from Runner.Worker memory; and cryptocurrency browser wallets across 14 extensions. 'AI agent tooling' lists ~/.claude.json for Claude Code settings; ~/.kiro/settings/mcp.json for Kiro MCP config; .cursor, Windsurf and Zed config and MCP files; and .claude/settings.json and .vscode/tasks.json written back into reachable repositories. 'Cloud, cluster and endpoint' lists AWS via STS, SSM Parameter Store and Secrets Manager; Kubernetes service-account tokens and kubeconfigs; HashiCorp Vault at 127.0.0.1:8200; SSH and GPG keys, .env files and Docker and CLI files; the Wallets row, wallet.dat, Exodus, Electrum and MetaMask; and saved passwords via a downloaded HackBrowserData binary. A footer reads 'Collector list per Socket's initial assessment, SafeDep's decoded payload analysis and the Tensorlake advisory (GHSA-8g63-53c9-65j2). Socket flags AI development tooling for Claude Code, Cursor, Kiro, Windsurf and Zed by name.'

Socket의 평가는 로컬 파일, CI 환경, Kubernetes 및 Vault 소스 전반에 걸친 수집과 함께 유출, 지속성, 원격으로 제공된 코드의 실행을 식별합니다. SafeDep은 디코딩된 페이로드를 재현했습니다: lib/setup.mjs는 공식 GitHub 릴리스에서 Bun 1.3.13을 다운로드하고 이를 사용해 웜을 실행하며, CI 러너에서는 종료됩니다 — 대상은 빌드 에이전트가 아니라 개발자 머신입니다. SafeDep은 또한 해당 페이로드가 동일한 로더의 단순 복사본을 포함하고 있으며, 이를 다른 패키지와 저장소에 심는다는 점도 발견했습니다.

이 페이로드는 세 개의 난독화 계층을 사용하며, SafeDep은 샘플을 실행하지 않고 이를 디코딩했습니다: 난독화기 문자열 배열, 솔트를 사용하는 사용자 지정 암호, 즉 svksjrhjkcejg — keyv 침해에서 보고된 것과 동일하며 — 그리고 스크립트, 후크 및 두 개의 RSA 공개 키를 포함한 11개의 내장 파일에 적용된 AES-256-GCM입니다. 첫 줄에는 빌드 태그 WORMTAG='tensrlake'가 있는데, 철자가 틀렸으며, 이것이 SafeDep이 이 빌드를 진행 중인 재감염과 구별하는 방식입니다.

AI 도구 구성 외에도 수집 목록은 광범위하고 구체적입니다: ~/.claude.json 및 ~/.kiro/settings/mcp.json은 에이전트 설정용이고, SSH 키, 클라우드 CLI 파일, .npmrc, .env, Docker 및 Kubernetes 파일, 셸 기록; wallet.dat와 Exodus, Electrum, Ledger Live 데이터 및 MetaMask, Phantom과 같은 브라우저 지갑 확장 프로그램; AWS STS, SSM Parameter Store, Secrets Manager; Runner.Worker 프로세스 메모리에서 읽어낸 GitHub Actions 시크릿; 그리고 Kubernetes 서비스 계정 토큰과 Vault 토큰입니다. 이 악성코드는 iseekaigogo[.]com/hbd/<platform>에서 플랫폼별 바이너리를 가져와 "dump -b all -c password -f json" 인수로 실행했습니다. 이 인수는 HackBrowserData 도구와 일치하지만, SafeDep은 바이너리 자체는 복구되지 않았다고 밝히며 이를 추정으로 표시합니다. SafeDep은 또한 이 웜이 러시아어 로캘에서는 종료된다고 덧붙입니다.

A screenshot of a card titled 'Persistence, resolution, and the wipe trigger', kicked 'tensorlake@0.5.144 · staying power', subtitled 'The release was removed in under two hours; the implant it installed was built to outlive that.' Three columns sit side by side. 'Persistence: gh-token-monitor' lists a systemd user service on Linux, a LaunchAgent com.user.gh-token-monitor on macOS, a scheduled task with a PowerShell monitor on Windows, and files left behind in ~/.local/bin, ~/.config and %LOCALAPPDATA%. 'Endpoint resolution order' lists, in numbered order, the primary endpoint iseekaigogo[.]com:443/router; an Ethereum contract 0xb614155Fd88...1Df091B9; the public RPC endpoints that contract is read through, given as ~30 by Socket and 35 by SafeDep; signed GitHub commits found by the string thebeautifulmarchoftime; and public dead-drop repositories described as 'Shai-Hulud: Here We Go Again'. 'The dead-man switch' lists a poll of api.github.com/user every 60s, for 24 hours, firing on a 40x response to that token, with the effect rm -rf ~/ (advisory: home dir), armed only if the account has no orgs, and the order that matters: remove monitor, then revoke. A footer reads 'Per Socket's blog and SafeDep's analysis, with the C2 endpoint, the contract and the gh-token-monitor service confirmed in Tensorlake's advisory. Socket and SafeDep give different counts of the public RPC endpoints the contract is read through.'

지속성은 의도적이다. Socket은 페이로드에 대해 "그 조합은 위험을 단일 도난당한 API 키 이상으로 확장한다"라고 썼고, "지속성은 영향을 받은 종속성이 제거된 후에도 공격자의 접근 권한을 유지할 수 있다"라고 덧붙였다. SafeDep에 따르면 이 웜은 git 작성자 claude 명의로 Claude Code와 VS Code 훅 파일을 커밋하고, 모든 저장소 시크릿을 덤프한 다음 실행과 브랜치를 삭제하는 "Run Copilot" 워크플로를 심는다. Tensorlake 권고는 로그를 확인하는 개발자들에게 dependabot/github_actions/format/setup-formatter라는 이름의 브랜치와 동일한 신원으로 작성된 커밋을 찾으라고 알려준다.

확산은 두 번째 취약점이 아니라 탈취한 토큰을 통해 이루어집니다. Socket에 따르면 이 웜은 피해자의 퍼블리싱 아이덴티티와 연결된 패키지들을 열거하고, Sigstore 출처 증명을 생성한 뒤 오염된 버전을 다시 게시합니다. SafeDep은 내부에서 의존성을 추가하고 Fulcio와 Rekor로 자신의 출력에 서명한다는 세부 사항을 덧붙입니다 — 따라서 그다음에 게시하는 패키지의 출처 증명은 0.5.144에 있던 출처 증명만큼이나 유효합니다.

퍼블리시 전의 20시간

첫 번째 악성 커밋과 릴리스 사이의 간격은 오염된 패키지가 어떻게 유효한 출처 증명을 갖게 되었는지 설명하는 타임라인의 한 부분입니다. 모든 시간은 UTC 기준이며, 커밋 시간은 SafeDep과 GitHub API의 것이고, 게시, 제거 및 권고 시간은 Tensorlake의 것입니다.

A screenshot of a card titled 'Compromised source in the repo, then one manual publish', kicked 'tensorlake@0.5.144 · the ~20-hour window', subtitled 'All times UTC. Commit times per SafeDep's timeline and the GitHub API; publish and removal times per the Tensorlake advisory.' Three columns sit side by side. '7 October 2026 — source, main branch' lists 01:20 setup.mjs and Math_Symbol.js added; 01:24 the preinstall script added; 01:43 package.json JSON repaired; 02:13 to 03:44 four loader and payload revisions; 03:44 commit 41b38f0, the payload commit; 03:57 the version set to 0.5.144. '8 October 2026 — release and removal' lists 00:08 publish_npm.yaml started by hand; 01:12:07 version 0.5.144 published to npm; 01:22:02 issue #1014 opened by StepSecurity; 01:23:10 flagged by Socket, about eleven minutes in; 02:54 the version removed, after roughly 1h 40m live; 20:24 version 0.5.145 published next. '9 October 2026 — disclosure closed' lists advisory GHSA-8g63-53c9-65j2; pull request #1016, source reverted and 0.5.145 cut; issue #1014 closed as completed; 0.5.143 as the last version stated unaffected; and no usage seen, per Tensorlake's user-agent telemetry. A footer reads 'The ~20-hour gap between the first rogue commit and the publish is SafeDep's commit timeline, and matches the archive's own upstream record.'

전체를 종합해 보면: 페이로드 파일들은 10월 7일 저장소의 메인 브랜치에 들어왔고, 그날 새벽 03:57에 버전이 0.5.144로 설정되었으며, 다음 날 00:08에 한 계정이 릴리스 워크플로를 수동으로 시작할 때까지 아무것도 게시되지 않았다. 침해된 소스는 프로젝트 자체 파이프라인이 그것을 빌드하기 전까지 약 20시간 동안 브랜치에 남아 있었다. 그것이 릴리스 경로에 대한 공격의 전부였다 — 위조된 증명도, 재게시된 타르볼도 없었다. 출처 정보는 브랜치에 절대 있어서는 안 되었던 코드의 빌드에 관해 정확했다.

데드맨 스위치

이 사건에서 이전 npm 침해 사례들에는 전례가 없는 부분은 피해자가 올바르게 대응한 뒤에 벌어지는 일이다. 탈취된 GitHub 토큰이 조직이 없는 계정의 것이라면, SafeDep에 따르면, 웜은 gh-token-monitor를 설치한다: api.github.com/user를 해당 탈취된 토큰으로 24시간 동안 60초마다 폴링하는 서비스. GitHub가 40x를 반환하면 — 토큰이 폐기되는 순간 그렇게 하듯이 — 모니터는 공격자가 제공한 핸들러를 실행하고 사용자의 홈 디렉터리를 삭제한다.

Socket은 PowerShell 모니터를 사용하는 것으로 동일한 구성 요소를 설명합니다. 이 모니터는 ONLOGON 예약 작업을 통해 지속되며, 공격자가 제공한 핸들러를 실행하는 Invoke-Expression을 통해, 그리고 코드에는 이전 Shai-Hulud 웨이브에서 보였던 "IfYouRevokeThisTokenItWillWipeTheComputerOfTheOwner"라는 리터럴 문자열이 포함되어 있다고 언급합니다. SafeDep은 해당 핸들러를 rm -rf ~/라고 부릅니다. Socket의 표현은 해지가 어디에서 발생하든 이 코드가 실행된다는 점을 분명히 합니다; 모니터는 로컬이고, 해지는 그렇지 않습니다. 네 가지 출처 — Socket, SafeDep, StepSecurity 및 Tensorlake 자체 권고 — 는 동일한 작업 순서를 제시합니다: 먼저 모니터를 제거한 다음 해지하십시오.

무엇이 확립되어 있고, 무엇이 단지 추론되는가

기록보관소는 다음을 기록합니다: 확인된 피해가 없음이 항목에 대해서는, 그리고 출처들은 단지 그것을 반박하지 못하는 데 그치지 않고 이를 뒷받침합니다.

• Tensorlake는 해당 버전이 사용된 사례가 없다고 밝혔다. 이 회사의 권고문에 따르면, 회사는 사용자 에이전트 헤더를 통해 SDK 사용을 모니터링하고 있으며 "이 버전이 출시된 이후 사용된 사례를 확인하지 못했다"고 한다. 이는 자사 텔레메트리에 관한 벤더의 진술일 뿐, 감사를 거친 수치가 아니다.

• 다운로드 수치는 감염 건수가 아닙니다. Socket은 이 패키지의 다운로드가 대략 주당 12,000회라고 보고하며, 이는 악성 버전의 다운로드가 아니라 패키지의 전반적인 사용량을 나타낸다고 설명합니다. SafeDep은 같은 패키지에서 약 월간 다운로드 106,000회를 인용합니다. 둘 다 0.5.144가 어디에서도 실행되었다는 증거는 아닙니다. Socket의 플래그된 릴리스 기간과 Tensorlake의 2시간 기간은 이 버전이 확산되기 전에 제거되었다는 점과 일치합니다.

• 페이로드 자체의 버그가 확산 범위를 제한했을 수 있습니다. SafeDep은 두 가지를 발견했습니다. npm 전파 경로는 디스크에 ./dist/Math_init.js가 있어야 하고 그것이 없으면 중단되며, 심어진 로더는 ai_init.js를 찾지만 웜은 math_init.js를 기록합니다. SafeDep은 이러한 발견을 확산의 한계로 규정하며, 기사는 이를 코드에 대한 한 분석의 해석으로 다룰 뿐, 아무것도 전파되지 않았다는 보장으로 다루지는 않습니다.

• 프로버넌스 증명은 사실입니다. 이것은 논란이 되는 주장이 아닙니다: npm 프로버넌스는 패키지가 어디에서, 어떤 워크플로로 빌드되었는지를 기록하며, 이 경우에는 진실을 기록했습니다 — 프로젝트 자체의 릴리스 워크플로가 오염된 소스를 빌드한 것입니다. Tensorlake의 권고문은 이를 그대로 명시합니다: "이 패키지는 유효한 npm 프로버넌스를 갖추고 있습니다". Socket은 프로버넌스가 "패키지가 어디에서 빌드되었는지를 말해줍니다. 코드가 안전하다고 말해주지는 않습니다"라고 지적하며 같은 요점을 분명히 합니다.

회자되는 몇몇 세부 사항은 단일 분석에 기반한 주장이며, 그렇게 읽어야 한다. 공격자가 메인테이너의 계정을 획득한 구체적인 메커니즘은 어떤 조사 기관이나 Tensorlake에 의해서도 공개되지 않았다. 이더리움 컨트랙트 주소와 엔드포인트를 확인하는 데 있어 그 역할은 SafeDep과 Socket의 설명에 등장한다 — Socket은 페이로드가 GitHub 폴백을 사용하는 약 30개의 퍼블릭 RPC 엔드포인트를 이용하는 이더리움 컨트랙트를 통해 자신의 엔드포인트를 확인한다고 말하는 반면, SafeDep은 RPC 개수를 35개로 보고 10월 8일에 해당 컨트랙트가 iseekaigogo.com을 반환했다고 보고한다 — 그리고 Tensorlake는 자사 권고문에서 엔드포인트와 컨트랙트를 확인해 준다. 정확한 RPC 개수는 두 보고서 간에 다르다; 설계는 다르지 않다.

공개 기록에 남아 있는 한 가지 공백은 분명히 짚고 넘어갈 가치가 있다. 이 글을 위해 검토한 어떤 출처도 확인된 다운스트림 감염, 즉 이 패키지에서 탈취한 자격 증명을 이용해 웜이 다른 패키지나 저장소를 오염시킨 사례를 보고하지 않았다. 전파 코드는 존재하며 SafeDep가 그것을 검토했다. 다만 그것이 두 번째 피해자를 만들어냈는지는 알 수 없다.

그 후 무엇이 바뀌었나요?

대응은 사건보다 더 빨랐고 더 잘 조율되었다.

• 해당 버전은 사라졌다. Tensorlake에 따르면 이 버전은 10월 8일 01:12부터 02:54(UTC)까지 게시되어 있었다. SafeDep은 npm이 이를 삭제했다고 보고한다. 이 기사 작성을 위해 10월 10일 npm 레지스트리를 직접 조회한 결과, 0.5.144는 더 이상 해당 패키지의 게시된 버전 목록에 나타나지 않았으며, 패키지의 최신 태그는 0.5.148이다. Tensorlake의 권고는 개발자들에게 0.5.143을 마지막으로 영향을 받지 않은 버전으로 지목한다.

• 권고문이 수정 사항과 함께 게시되었습니다. Tensorlake의 GHSA-8g63-53c9-65j2 권고문에 따르면 PyPI 및 crates.io tensorlake 패키지와 tensorlake CLI는 영향을 받지 않았으며 — 영향을 받은 것은 npm 패키지뿐이었고 — 0.5.143 및 이전 버전도 영향을 받지 않는다고 밝혔습니다. SafeDep은 유지관리자가 풀 리퀘스트 #1016에서 소스를 되돌리고 0.5.145.

• 이 공개 스레드는 이례적으로 완전하다. StepSecurity의 연구원 Ashish Kurmi가 GitHub 이슈 #1014를 10월 8일 01:22:02 UTC에 열었습니다 — 게시 후 약 10분 뒤 — StepSecurity가 "hostage token" 웜이라고 부르는 것에 대한 자체 분석을 가리키면서. Aikido의 Oliver Smith는 페이로드가 커밋 41b38f0에서 도입되었다고 논평했고, 이를 새로운 Shai-Hulud 정보 탈취기로 식별했습니다. 메인테이너 David Lorenzo는 — npm 패키지에 calavera로 기재된 메인테이너 신원 — 10월 9일에 보안 권고를 확인하고 같은 날 이슈를 완료로 닫으며 답했습니다. 이슈 제목 자체는 증거를 따라갑니다: "possibly malicious" 보고서로 시작했고, 닫힐 무렵에는 페이로드를 아무런 단서 없이 악성이라고 설명하도록 이름이 바뀌었습니다.

• 이 패키지가 속한 캠페인은 이 패키지 자체보다 규모가 더 큽니다. Socket, SafeDep, Aikido는 모두 Tensorlake 릴리스를 2026년 8월 초에 처음 문서화된 ChainDrop / Mini Shai-Hulud 웨이브에 분류합니다. 해당 웨이브의 npm 피해 패키지에는 keyv, cacheable 및 관련 패키지가 포함되었습니다. Tensorlake의 권고문도 Socket, SafeDep, Aikido를 인용하며 같은 내용을 전합니다.

해당 버전을 설치한 모든 사람을 향한 Socket의 지침은 호스트를 침해된 것으로 취급해야 한다는 것입니다. 해당 버전에 대한 잠금 파일, 매니페스트 및 빌드 로그를 확인하고, gh-token-monitor 서비스를 어떤 토큰이든 폐기하기 전에 제거한 다음, 깨끗한 머신에서 자격 증명을 교체하십시오. Tensorlake의 권고도 동일한 순서를 덧붙이며, 노출된 토큰이 기록할 수 있는 패키지 레지스트리와 저장소에서 예상치 못한 릴리스가 있는지 확인하라고 제안합니다. Aikido의 글은 설치 훅을 차단하기 위해 ignore-scripts=true를 .npmrc에 설정하고, 훅이 실행된 모든 머신을 완전히 침해된 것으로 취급하라고 조언합니다.

이것은 다른 이들이 보고했으며 여기서 그들을 출처로 밝혀 인용하는 하나의 기록이다. 각기 고유한 출처와 심각도, 신뢰도 등급, 이의 제기 플래그를 지닌 다른 문서화된 에이전트 사건들은 다음에 실려 있다: AI 사건 아카이브 — 따라서 에이전트 도구를 겨냥한 공급망 침해를 실제로 일어난 나머지 사건들과 나란히 읽을 수 있다.