汚染された npm リリース:postinstall ひとつが持ち去るもの

2026 年 10 月、tensorlake の 0.5.144 に Shai-Hulud の資格情報窃取ワームが仕込まれました。狙いは npm、GitHub、クラウド、AI サービスの資格情報です。

依存パッケージを入れることは、公開者のアカウントの安全性も一緒に入れることです。10 月 7 日、TypeScript SDK の tensorlake 0.5.144 が Shai-Hulud の資格情報窃取ワームを含むと確認されました。0.5.143 以前はクリーンと報告されています。

タイムライン

StepSecurity の分析は非常に正確な座標を示しています。最初の悪意あるコミットは 2026-10-07 01:20 UTC に tensorlakeai/tensorlake の main ブランチへ、あるメンテナの名義で入りました。その後数時間で 7 件のコミットが続き、ペイロードを調整し、package.json に preinstall 命令を追加しました。

注目すべきはテンポです。一度注入して終わりではなく、結果を見ながら手を入れています。これはスクリプトが偶然当たったのではなく、継続的な作業に見えます。

ペイロードが狙ったもの

窃取対象は、現代の開発者の持ち物をほぼ網羅しています。

  • npm と GitHub のトークン
  • クラウドの鍵
  • SSH 鍵
  • Vault と Kubernetes の資格情報
  • ブラウザのログイン情報
  • AI ツールの設定

最後の項目は個別に見る価値があります。従来のワームは CI とクラウドを気にしていました。今回はローカルにあって大規模モデルを直接呼べる鍵も対象です。それにはクォータ警告も監査ログもなく、長期間誰も気づきません。

provenance では防げない理由

npm の provenance が証明するのは「どのリポジトリのどのコミットからビルドされたか」です。証明するのはビルドの出所であり、ソースの中身ではありません。

今回の入口はメンテナのアカウントそのものでした。ビルド経路のどの環も本物です。本物のリポジトリ、本物のコミット、本物の CI。サプライチェーン攻撃はとっくに「出所の偽造」ではなく「出所そのものの借用」の段階にあります。

provenance が答えるのは「誰がこのパッケージをビルドしたか」であり、「その人が今も同じ人か」ではありません。

後片付けの罠

直感に反する細部があります。ペイロードにはトークン監視が含まれていました。盗まれた GitHub トークンを先に失効させ、後から監視を外すと、監視が home ディレクトリを消し飛ばす可能性があります。

つまり定番の初動(まず資格情報を失効させる)が、ここではデータ損失を引き起こします。失効させるなという話ではなく、後片付けの順序はマルウェアに関する情報に依存するという話です。

私の判断

個人プロジェクトで複雑なサプライチェーン防御を組むつもりはありません。実際に効くのは 3 つです。

  1. ロックファイルをコミットし、差分をちゃんと読む。package-lock.json に増えた preinstall は目視できます。
  2. 開発機に長期有効なクラウド資格情報を置かない。短期トークンで済むならそうする。
  3. 新しい依存を入れるときは npm install --ignore-scripts でこの種の攻撃を止められる。

3 つ目には明確な代償があります。ビルド手順が本当に必要なパッケージは入らなくなります。ただし「入らなかった」はすぐ気づける問題で、「入って盗まれた」はそうではありません。

← 記事一覧に戻る

コメント

…