npmサプライチェーン汚染(@tanstack/Nx事件)後にlockfileを監査する具体手順
2026年に入り、npm レジストリへ正規の発行経路を悪用して悪意あるバージョンが公開される事件が相次いだ。5月には42個の @tanstack/* パッケージに84の悪意あるバージョンが GitHub Actions の OIDC トークン経由で公開され(CVE-2026-45321)、Nx Console でも短時間だけ悪意ある版が出回った(CVE-2026-48027)。いずれも資格情報を盗む挙動を持つ。
こうした事件で怖いのは、npm install を一度でも回していれば package-lock.json に汚染バージョンが固定されている可能性があることだ。「うちは大丈夫か」を勘で判断せず、手元で機械的に確かめる手順をまとめる。
何を確認するか
- 問題のパッケージが依存ツリーに入っているか、入っているならどのバージョンか
- lockfile に固定された版が、公開が確認された悪意あるバージョンに一致しないか
- パッケージの署名(provenance/signature)が検証できるか
実際に試す
前提: Node.js 18以上・npm 9以上。まず対象パッケージが入っているかを確認する。
1 | |
次に、インストール済みパッケージの署名を検証する。npm 公式のコマンドで、レジストリの署名とローカルの内容が一致するかを一括チェックできる。
1 | |
期待される出力は次のような形だ。署名が検証できないパッケージが列挙されたら要調査になる。
1 | |
既知の悪意あるバージョンに固定されていないかを機械的に照合するなら、疑わしいバージョンのリストと突き合わせる小さなスクリプトが有効だ。
1 | |
混入が疑われたら
- 該当バージョンを削除し、クリーンな正規版へ固定して
npm ciをクリーン環境で再実行する。 - CI/開発端末で露出し得たシークレット(クラウドキー・npm/GitHubトークン・SSH鍵)を失効・ローテーションする。盗まれた資格情報の悪用が本丸なので、パッケージ入れ替えだけで終わらせない。
- 今後は
npm install時に--ignore-scriptsを検討し、package-lock.jsonの差分をレビュー対象にする。
各CVEの影響範囲・クラウド別の対応状況は「脆弱性対応ウォッチ」に整理している。パッケージ側の対応と、盗まれ得た資格情報の失効を両輪で進めるのが、この種の事件の定石だ。
npmサプライチェーン汚染(@tanstack/Nx事件)後にlockfileを監査する具体手順
https://blog.hashito.biz/2026/07/13/npm-supply-chain-lockfile-audit-tanstack-nx/