toshiki

TanStackのnpm乗っ取り事件: ポストモーテムから学ぶ

· TanStack Blog #130

TanStackがpull_request_targetとActionsキャッシュ汚染を連鎖されnpmを乗っ取られた事件のポストモーテム。Rustでもsupply chainは他人事ではない。

  • #supply-chain
  • #security
  • #npm
  • #github-actions
  • #engineering

#なぜ今日これを選んだか

Rustの学習を進めるほどcargoエコシステムにも依存していく。今回TanStackが受けたのはCI設定とキャッシュの隙を突いた連鎖攻撃で、言語問わず同じ穴がどこにでもある。自分のCIを見直す日を作るきっかけにしたい。

#要点

  • 攻撃チェーン: pull_request_target の Pwn Request → GitHub Actions キャッシュ汚染 → fork↔base 間でビルド成果物が混入 → npm 公開トークンが奪われ悪意あるバージョンが publish された
  • 影響は TanStack だけでなく Mistral など 160+ パッケージに波及(Mini Shai-Hulud と呼ばれる worm が同日復活)
  • TanStack 側の即時対応: 公開済みトークンの revoke、影響バージョンの deprecate、trusted publishing への移行を加速

#自分にとっての示唆

エンジニアとしてレベルアップ(#130)の文脈で言えば、Rust や 組み込みの世界でも結局は cargo や CI が動く前提で開発する。今日の Rust学習30分のあとに、自分の触っている GitHub リポジトリで pull_request_target を使っている箇所がないか1つだけ確認する。トークンを長期固定で持っている CI があれば、OIDC ベース(trusted publishing 相当)に置き換える計画をメモしておく。学習だけでなく「守る側の習慣」を1日1個積むのが、これからの差になる。