FlawOpen

flawopen.com/Incidents/tensorlake-npm-install-hook-compromise-october-2026

● Tensorlake · CWE-506 · October 8, 2026 · 緊急
セキュリティ研究 · FlawOpen

Tensorlake npm 0.5.144:悪意あるインストールフック

TensorlakeのAI SDKの悪意あるリリースにpreinstallローダーが追加されました。開発元はmainへの直接変更を確認して公開手順を強化し、GitHubのマルウェア勧告は実行されたホストを侵害済みとして扱うよう求めています。研究者はローダーの構造をChainDrop/Shai-Huludファミリーと関連付けていますが、GitHubの勧告はその帰属を確認していません。[1], [2], [3], [4], [5]

💡 わかりやすい解説 (ELI5)

このパッケージのインストールは、電源につなぐとすぐ動き出す機器のようなものでした。ボタンを押したり実際に使ったりする必要はありません。npmはSDKがimportされる前に、インストールプロセスの権限で悪意あるpreinstallフックを実行しました。[3], [6], [1]

主要な概念と専門用語

preinstallライフサイクルフック
npmがインストール中に実行できるスクリプトです。公開されたTensorlake 0.5.144のmanifestはこのフックからローダーを起動し、SDKのimportは不要でした。[1], [6]
provenance attestation
成果物の出所とビルド方法を示す証拠です。開発元によると悪意ある公開版にはnpm provenanceがありましたが、ソースコードの安全性を証明するものではありません。[2], [3]
インストールスクリプト検査
公開manifestにインストールスクリプトが宣言されている場合にCIを失敗させる検査です。Tensorlakeは事故後、npm ci --ignore-scriptsとともに追加しました。[3]
マルウェアファミリーの帰属
StepSecurityとSocketはローダーの構造をChainDrop/Shai-Huludと関連付けています。GitHubのマルウェア勧告はファミリーを特定していないため、この帰属は研究者によるものとして扱います。[4], [5], [1]

フレームワーク対応

  • このガイドで説明する弱点の CWE 参照: CWE-506

インシデントのタイムライン

2026年10月7日

開発元の対応PRによると、リポジトリ管理者アカウントからmainへ直接commitが行われました。[2], [3]

2026年10月8日

リリースワークフローが悪意あるtensorlake@0.5.144を公開し、開発元によるとnpmは後に削除しました。[1], [2]

2026年10月8日

開発元はPR #1016をmergeし、最後の正常なcommitへ戻し、インストールスクリプト制御を追加して、正常版を0.5.145へ更新しました。[3], [7]

ステップ・バイ・ステップの攻撃フロー

ステップ 1

リポジトリの信頼境界が迂回された

対応PRは、管理者アカウントが通常のpull requestレビューを経ずにmainへ直接commitしたと報告しています。その後、同じリポジトリから手動で公開が開始されました。[2], [3]

ステップ 2

インストール時にパッケージがコードを実行

調査者はtensorlake@0.5.144にローダーを起動するpreinstallフックを確認しました。コードはインストールプロセスの権限を引き継ぎ、SDKを先にimportする必要はありませんでした。[1], [4], [5], [6]

ステップ 3

ホストの認証情報と永続化が危険に

GitHubのマルウェア勧告は、該当ホストを完全に侵害されたものとして扱うよう求めています。StepSecurityとSocketは認証情報の窃取と永続化を報告し、トークン失効に破壊的に反応するmonitorも説明しています。これらは調査者の報告として示し、すべての機能が全ホストで動作したとは断定しません。[1], [4], [5]

ステップ 4

開発元が公開管理を復旧

対応では悪意あるcommitをrevertし、npm ci --ignore-scriptsとmanifest検査を追加、リポジトリと公開保護を強化し、0.5.145で置き換えました。GHSAは通常の脆弱なコード範囲ではなくマルウェアを扱うため、修正版を列挙していません。[3], [7]

ソースコード比較:脆弱 vs 堅牢化

このCI比較は開発元がmergeしたPR #1016に基づき、悪意あるパッケージやexploitは含みません。検査はインストール前に実行され、公開manifestのインストールフックを拒否します。ignore-scriptsはnpm ciによる依存関係のライフサイクルスクリプト実行を防ぎます。開発元はこの設定でテストとSDKビルドが成功したと報告しています。フックを必要とする依存関係には影響する可能性があり、npm testなど明示的に呼び出すコマンドのスクリプトは実行されます。後続のビルド工程を隔離し、provenanceをソースレビューと混同しないでください。このコード例は一部です。メンテナーの検査は、宣言されたインストールフックの確認に加え、typescript/lib/ 内の想定外ファイルも拒否します。[3], [6]

脆弱な実装
steps:
  - run: npm ci
堅牢化されたセキュアパッチ
steps:
  - run: node scripts/check-no-install-scripts.mjs
  - run: npm ci --ignore-scripts

エンジニアリング&システム堅牢化チェックリスト

参考資料