Snykのセキュリティ研究者、Cursor.comを狙った悪性NPMパッケージを公開
(sourcecodered.com)- npmに公開された複数のパッケージに、Cursor.comを狙ったとみられるインストールスクリプトが含まれており、インストール時にシステム情報を外部Webサービスへ送信する
- 公開者はnpmユーザー sn4k-s3c で、
cursor-retreival、cursor-always-local、cursor-shadow-workspaceのようにCursorの内部パッケージを想起させる名前を使っていた - パッケージが取得する
envの出力には、AWSキー、npmトークン、GitHub認証情報などの機密性の高い環境変数が含まれる可能性があり、被害範囲が広がり得る - OpenSSF package analysis scannerがパッケージを悪性と判定し、OSVは MAL-2025-27、MAL-2025-28、MAL-2025-29 の3件のアドバイザリを作成した
- npmメタデータでは、Snyk Security Labsの snyk.ioメールアドレス が公開者として表示されており、その後Snykの研究者がパッケージを削除し、Snykがブログで対応した
Cursorを狙ったとみられるnpmパッケージ
- SourceCodeRedによる悪性パッケージ検出の過程で、npmに公開された複数のパッケージが確認された
- パッケージ名はCursor関連の内部パッケージを想起させる形式だった
cursor-retreivalcursor-always-localcursor-shadow-workspace
- 公開者はnpmユーザー sn4k-s3c と表示されている
- パッケージ一覧は
https://www.npmjs.com/~sn4k-s3cで確認できると案内されている
インストール時に実行される動作
- パッケージをインストールすると、システムデータを収集して攻撃者が制御するWebサービスへ送信する
- スクリーンショット上では、パッケージは
envコマンドの出力を取得している envの出力には、システム設定に加えて機密性の高い環境変数が含まれる可能性がある- AWSキー
- npmトークン
- GitHub認証情報
- その他の機密環境変数
- 結果として、インストールするだけでローカル環境情報が外部に流出する可能性がある
依存関係混同の可能性と検出結果
- この種のパッケージは、特定の企業を狙った**依存関係混同(dependency confusion)**攻撃でよく見られる
- Cursor.comにバグバウンティプログラムがあるかどうかや、具体的な背景は確認されていない
- SourceCodeRedは、Cursorに
cursor-always-local、cursor-retrieval、cursor-shadow-workspaceのような非公開npmパッケージが存在する可能性を疑っている - 攻撃者は、Cursorの従業員が誤って公開パッケージをインストールし、データを送信することを期待していた可能性がある
- OpenSSF package analysis scannerがこれらのパッケージを悪性と判定し、OSVは3件のマルウェアアドバイザリを作成した
-
MAL-2025-27
-
MAL-2025-28
- MAL-2025-29
- 関連するOSV一覧は
https://osv.dev/list?q=cursor&ecosystem=npmにある
-
公開者メタデータ
- npmパッケージのメタデータ上、公開者はSnyk Security Labsチームの snyk.ioメールアドレス を使用している
- この公開者メールのメタデータは偽装できない部分だとされている
authorフィールドはSnykの従業員を具体的に挙げているauthorフィールドは偽装可能だが、公開者が検証済みのSnykメールアドレスであるため、実際にSnykから出たものだとする推定が示されている
ユーザー対応とその後の更新
- SourceCodeRedはnpmに通知したが、当時これらのパッケージはまだ悪性として表示されていなかったという
- 多くのソフトウェアサプライチェーンセキュリティツールは、パッケージが悪性であることを把握して初めてブロックできる
- npmパッケージをむやみにインストールしないことが推奨される
- これらのパッケージには
package.jsonとindex.jsまたはmain.jsの2ファイルしか含まれておらず、これは疑わしい兆候の一つと見なせる - 2025年1月15日の更新によると、Snykの研究者はブログ公開の翌日にCursor関連パッケージを削除した
- 2025年1月14日にThe Registerが関連記事を公開した:
https://www.theregister.com/2025/01/14/snyk_npm_deployment_removed/ - 同日、Snykはブログで対応を投稿し、自分たちに非はないという趣旨を主張した:
https://snyk.io/blog/snyk-security-labs-testing-update-cursor-com-ai-code-editor/
1件のコメント
Hacker Newsの意見
[訂正: 下のCursor開発者の回答を見る限り、Cursorが承認したわけではなさそう] Cursor内部に、該当パッケージが存在する非公開NPMレジストリがあり、NPMの動作方式のせいで、攻撃者が公開レジストリから同じパッケージを取得させるようだましやすい状況のように聞こえる
おそらくSnykの社員が、Cursorのビルドの一部がこのように誤設定されていることを見つけた、あるいは疑って、概念実証としてパッケージを公開したのだと思う。パッケージの説明が「for Cursor」だったのを見ると、この目的で雇われたのだと思っていた
そうであれば大きく見るべき点はなく、核心が非公開レジストリを迂回する誤設定を示すことなら、セキュリティ研究者が概念実証に非公開NPMレジストリを使うことはできなかったはず
特に多くのプロキシは、最新パッケージのバージョンがより高い場合、非公開よりも公開レジストリを選ぶ: https://snyk.io/blog/detect-prevent-dependency-confusion-att...
VS Codeと同じ方法で扱っています: https://github.com/microsoft/vscode/tree/main/extensions
私たちはSnykを雇っておらず、この件を見た後に連絡したところ謝罪を受けました。正確に何をしようとしていたのかは確認できていませんが、誰かが依存関係混同の脆弱性を疑ったという説明はもっともらしいです。ただ、公開NPM上で実際に環境変数を送信させたのは、かなり無責任だと思います
envコマンドの出力への完全なアクセスを許すのは、ほとんどの人にとって大問題だろう興味深いことに、Snyk共同創業者がCursorの競合を立ち上げている
https://www.tessl.io/ https://techcrunch.com/2024/11/14/tessl-raises-125m-at-at-50...
不正行為がなかったことを願う
これからは、すべての開発を仮想マシンの中で本気でやるべきなのかもしれない。プロジェクト1つにつきVMを1つ。自分でも気づかないうちにミスをしてセキュリティを台無しにしてしまう巧妙な方法が多すぎる。慰めがあるとすれば、盗まれるような秘密や資産のない無名の存在だということくらい
IDE、プラグイン、開発ユーティリティ、言語ライブラリ、OSパッケージなど、あまりにも多くのコードを盲信している
数年前に働いていたところでは、ノートPCでWebブラウザと開発ツールが禁止されていた。ブラウザが必要ならCitrixで使う必要があり、コーディングが必要ならVDIを使うか、VMの中でツールを実行しなければならなかった
当時はそのやり方がほとんど狂気じみて見えたが、だんだん理解できるようになってきた
NVIDIAは仮想化GPU機能をエンタープライズ向けカードの背後に閉じ込めているため、効果のない命令変換に頼ることになる
他のVMオーバーヘッドはほとんど我慢できるが、途切れて反応の鈍いGUIは思った以上に人間工学的に悪影響があり、妙に他の性能まで引き下げる
Linux上でLinuxを仮想化する場合だけでもこの問題が解決すれば、すべてを仮想化する選択肢はずっと現実的になるはず
具体的には、古いMacからM1のAsahi LinuxへGoとZigの開発環境を移しているところだが、TrueCryptとLittle Snitchの代替を探すところからつまずいている。こうしたVMツールは暗号化されたVMやファイアウォールルールをサポートしているのだろうか? ここではVagrantが言及されていて、ネットワーク隔離はある程度解決してくれそうだが、それ以外に何を勧められるだろう?
VMは自分を守ることはできるが、自分が作るソフトウェアのユーザーを守ることはできない。自分が防護服を着てようやく触れるような製品を顧客に送り、彼らが保護なしで安全に使えるとどう期待できるのか?
自分が望む環境はそういうものではない
現在の解決策は、依存関係を極端に厳しく選ぶことだ。より具体的には、プロジェクトや会社を信じるのではなく、人だけを信じるべきだと思っている。簡単ではないが、今のところこれより良い代案は見えていない
プロジェクトごとの簡単なdotファイルにファイルシステムのバインドを書いておき、作業中に新しいターミナルを開くと、そのdotファイルを基準に自動で隔離される。認知的負荷は非常に低く、ほとんどシームレスに統合されている。多くの開発者が似たようなスクリプトを持っていそうだ。以前こういうプロジェクトを探したが見つからなかった。単純すぎてプロジェクト化するほどのものがないからなのか、それとも他の人たちがこれを何と呼んでいるのか分からないからなのかは分からない。参考になるものがあるとうれしい
ネットワークアクセスは制限していない。すべてのトラフィックを記録し、自動で中間者プロキシを設定する実験はしたが、一般ユーザーとして使うには十分に快適ではなかった。もちろんカーネルの攻撃面は依然として残っている。ただ、主な心配はファイルが読まれたり破壊されたりすることだ
記事で同意できないのは、「NPMパッケージを盲目的にインストールしないほうがよく、パッケージが怪しいかどうかを見るシグナルがある。このパッケージ群は
package.jsonとindex.jsまたはmain.jsの2ファイルしかないので、正常かどうかを判断するフラグの1つだ」というくだりこれはトップレベルのパッケージにはある程度通用するかもしれないが、推移的依存関係まで全部レビューするのはほぼ不可能
依存関係が400個あるパッケージを取り込むなら、その表面積の10%でさえどうやってまともに確認するのか? https://gist.github.com/anvaka/8e8fa57c7ee1350e3491#top-1000...
id_rsaにアクセスできないようにする問題は十分に解決できるSnykは公開鍵をローテーションせず、ただ予告なく変えてしまう会社でもある: https://github.com/snyk/cli/pull/5649
プロジェクトがGitHub以外のリポジトリホスティングに移ると「abandoned」と表示し、npm/PyPIに新しいリリースが出ても、放棄されたプロジェクトのままになる
評判ほど能力は高くないと思う
それに、Snykの営業担当者がメールで私を侮辱してきた。製品購入に興味がないということは、脆弱性だらけのソフトウェアしか使えない無能な開発者だという意味らしい
保険会社がセキュリティチェックリスト項目を埋めろと言うから企業が買う、完全に本末転倒なソフトウェアに見える
Codebergは面白そうだし、保守を引き受けられるならForejoのようなセルフホストの選択肢も良さそう
Snykについてはプライドが高いという程度のこと以外あまり聞いたことがなかったが、かなり興味深い見方だ
文脈がこれ以上ないなら、Snyk 側にとっても見栄えはよくない。社員が NPM で自社サービスを実環境テストしたか、Cursor に対する合法的な監査を行う中で公開リソースを使わないようにするための統制と手順が不足していたということになる
Snyk のテストのホワイトハット監査のように見える。
oastify.comは Burp Collaborator のデフォルトサーバーなので検出されたようだテストには非公開 npm リポジトリを使うべきだったし、ローカルで上書きするのは難しくない。独自の Collaborator サーバーも使うべきだった
console.logを出す、npm installを失敗させる、ペイロードを抽出しない、といった方法でも十分だったNPM がセキュリティ業界の雇用を生み出しているように見える。修正不能な混乱状態で、JSR のような競合が組織に十分な圧力をかけてくれることを願う
むしろ DORA や NSIS のような規制が、サードパーティパッケージの監査をますます求めるようになる可能性が高い。これは重要産業での開発方法の変更を強制することになるだろう。また LLM の時代には、外部パッケージの利用は大幅に減ると見ている。OpenAPI 仕様の生成のようなことをするために、外部パッケージを持ってくる理由が何なのか?LLM なら 1〜2 時間の設定だけで必要な CLI スクリプトを書いてくれる。同様に、コードの退屈な部分を直接自動生成するために LLM を使わなくても、その作業を行う CLI ツールを作らせることができる。そうすれば外部要因に依存しなくて済むし、その CLI ツール群がひどいカウボーイコードである可能性はほぼ確実だが、出力物はツールを磨き込んで望む形にできる
Go のように標準パッケージに必要なものを押し込む言語を見ると、標準ライブラリだけでも非常に簡単に多くのことができる世界が見える
少し話題から外れるが、Snyk 自身のツールとサービスについて、まともなSBOMを受け取ったことがある人はいる?うちの会社に SBOM を作るソリューションを売ろうとしてきたので聞いている
お金をもらってもインストールしないと思う。Unit 8200 が創業者を次々に輩出し、資金を提供していて、NSA のようにすでに足を踏み入れている構造に感じる
Snyk Research Labs は、一般的なソフトウェアパッケージのテストと研究を通じてコミュニティに定期的に貢献している。今回の Cursor 研究は悪意を持ったものではなく、パッケージには Snyk Research Labs と研究者の連絡先が含まれていた。私たちは一部の VS Code 拡張機能における依存関係の混同を非常に具体的に調査しており、当該パッケージは開発者が直接インストールする対象ではなかった
Snyk は責任ある公開ポリシーに従っている。誰もこのパッケージを取得しなかったが、もし誰かが取得していれば、ただちにフォローアップしていただろう
対応としては、撃たれた人の葬式に謝罪文を送ると言っているように聞こえる。「善意」だったとしても、認証情報を侵害すればその人はすでに侵害された状態になり、悪意ある攻撃者にやられた場合とまったく同じ対応が必要になる
これは悪意との差を感じにくいほど近い
付け加えると、Snyk の利害関係者が現在 Cursor の競合製品をリリースしようとしている点も、皆覚えておくべきだ。善意を仮定するのがはるかに難しくなる
env出力を持たせたいとは思わないさらに Cursor の競合製品との利益相反がある以上、より慎重であるべきだった。意思決定も対応もひどい