2026-10-29 の「2:27am PT」〜「1:35pm PT」(日本時間で 10/29 18:27〜10/30 5:35)、Cursor の拡張マーケットプレイスで、Claude Code 拡張の 2.1.312 と 2.1.313(Windows・macOS 向け)が改ざんされた版に差し替わっていました。Cursor の告知によると、Anthropic が作ったものではなく、SSH の裏口を仕込もうとします。
私は VS Code と Cursor の両方にこの拡張を入れています。自分の PC は大丈夫か。 Windows で、告知の痕跡を読み取りだけで確かめました。
結論: この PC に痕跡はありませんでした。見るところは「どのエディタから入れたか」と「その時間帯にそのエディタを開いていたか」です。両方に入れている人は、両方のフォルダを見ます。
- VS Code から入れた 2.1.312 は、改ざん版と extension.js の中身が違った
- Cursor は2025年10月から開いておらず、拡張は 2.0.1 のままだった
- 2.1.313 は、公式の配布元に無い版番号だった
--- Claude Code extensions in each editor
Editor Version Sha256 Match
------ ------- ------ -----
.vscode 2.1.312-win32-x64 1195816b6ecc False
.vscode 2.1.314-win32-x64 927fe02283d2 False
.cursor 2.0.1-universal d6657903df65 False
--- Indicators on Windows
svc-telemetry key : False
SysMon task : False
Startup sysmon.cmd : False
.config\smt.cmd : False
.config\smtk : False
TEMP\.stk_* : False
検証環境: Windows 10 Home(19045)/ PowerShell 5.1 / 2026-11-02
確かめたスクリプト
告知の Windows の痕跡を並べたものです。何も変えず、何も消しません。 管理者として開いた PowerShell で動かしてください。 administrators_authorized_keys は SYSTEM と Administrators しか読めない決まりで(Microsoft のドキュメント)、普通の PowerShell では読めずに False と出ます。
$bad = 'ecb58cb29078d9646ad1dcdbe51526f2d9cfea06be5fb2ab183e8ecc3ab6bf15' # extension.js of 2.1.312 / 2.1.313
'--- Claude Code extensions in each editor'
$roots = '.vscode', '.cursor', '.windsurf', '.vscode-insiders' |
ForEach-Object { Join-Path $HOME "$_\extensions" } | Where-Object { Test-Path $_ }
Get-ChildItem $roots -Directory -Filter 'anthropic.claude-code-*' | ForEach-Object {
$js = Join-Path $_.FullName 'extension.js'
$h = if (Test-Path $js) { (Get-FileHash $js -Algorithm SHA256).Hash.ToLower() } else { '' }
[pscustomobject]@{
Editor = $_.Parent.Parent.Name
Version = $_.Name -replace '^anthropic\.claude-code-', ''
Sha256 = if ($h) { $h.Substring(0, 12) } else { '(no extension.js)' }
Match = ($h -eq $bad)
}
} | Format-Table -AutoSize
'--- Indicators on Windows'
$keys = "$HOME\.ssh\authorized_keys", 'C:\ProgramData\ssh\administrators_authorized_keys' | Where-Object { Test-Path $_ }
[pscustomobject]@{
'svc-telemetry key' = [bool]($keys -and (Select-String -Path $keys -Pattern 'svc-telemetry' -Quiet))
'SysMon task' = [bool](Get-ScheduledTask -TaskName 'SysMon' -ErrorAction SilentlyContinue)
'Startup sysmon.cmd'= Test-Path "$env:APPDATA\Microsoft\Windows\Start Menu\Programs\Startup\sysmon.cmd"
'.config\smt.cmd' = Test-Path "$HOME\.config\smt.cmd"
'.config\smtk' = Test-Path "$HOME\.config\smtk"
'TEMP\.stk_*' = [bool](Get-ChildItem $env:TEMP -Filter '.stk_*' -Force -ErrorAction SilentlyContinue)
} | Format-List
ハッシュを手元の 2.1.312 のものに差し替えると Match は True に、%TEMP% に空ファイル .stk_selftest00 を置くと TEMP\.stk_* は True になり、検出が働くことも確かめました。
VS Code の 2.1.312 は、改ざん版と違った
VS Code から入れた 2.1.312 の extension.js は 1195816b… で、告知の改ざん版 ecb58cb2… とは違いました。改ざん版は本物と同じ番号なので、版番号だけでは見分けられません。 入れたエディタとハッシュで見ます。
Cursor は開いていなかったので、上がっていなかった
Cursor の拡張は 2.0.1 のままで、最後の起動ログは2025年10月3日でした。自動更新は既定のままで、開いていないので上がる機会が無かったと見ています。Cursor を毎日開く人は、その時間帯に上がっていないかを確かめてください。
2.1.313 は、公式の配布元に無い版番号だった
npm(Claude Code 本体) 2.1.312(10/27)→ 2.1.314(10/30)
VS Code マーケットプレイス 2.1.312(10/27)→ 2.1.314(10/30) 発行元 anthropic(確認済み)
Open VSX 2.1.312 → 2.1.314 → 2.1.316
(2026-11-02 時点。日付は UTC)
手元に 2.1.313 があったら、告知の手順に進んでください。
当てはまったら
Cursor の告知の手順(Windows は remediate-windows.ps1)に従います。告知は「拡張を消すだけでは足りないかもしれない」とし、認証情報や PC の作り直しも勧めています。
言えないこと
- 確かめたのは Windows の1台だけです(管理者ではない PowerShell。
administrators_authorized_keysはこの PC に無い) - ハッシュが違うことは、告知の改ざん版と同じファイルではない、というだけです
- 改ざん版は入手していないので、改ざん版が入った PC での検出は試していません
- 痕跡の一覧は告知(10/30 更新)のもので、増えることがあります
- VS Code マーケットプレイスと Open VSX が安全だったとは言えません(告知の範囲外)
関連記事
- eMudhra の証明書の鍵流出、Windows の curl は止めたが、古い Git for Windows の git はまだ通していた
- 今週の PHP・LiteLLM の脆弱性を Claude Code に探させたら、Web 検索ありで6回中5回見つけた
JQITのエンジニアの95%以上は未経験からの採用です。
よければコーポレートサイトにも遊びに来てください。
エンジニア採用も行っています。もしご興味あれば覗いてみてください。
▶ 採用サイト