⭐️【緊急】axios がサプライチェーン攻撃 2026.03.31

サプライチェーン攻撃について

「サプライチェーン攻撃」とは、ソフトウェアの部品(ライブラリ)を乗っ取って、そこに悪意あるコードを混ぜ込む攻撃手法。 自分のコードに問題がなくても、使っているライブラリが汚染されていれば被害を受ける。 スーパーで買った弁当に、工場の段階で毒を入れられるようなイメージ。

今回の攻撃の概要

何が起きた?

npmで週間1億DL超のHTTPクライアント「axios」のメンテナーのnpmアカウントが乗っ取られ、マルウェア入りのバージョンが公開された。

項目内容
危険なバージョンaxios@1.14.1, axios@0.30.4
安全なバージョンaxios@1.14.0, axios@0.30.3
マルウェアの種類RAT(遠隔操作型トロイの木馬)
露出時間約2〜3時間(その後npmが削除)

攻撃の手口

  1. 攻撃者がメンテナーの npm アカウントを乗っ取り
  2. 事前に plain-crypto-js@4.2.1 という偽パッケージを公開
  3. axios の package.jsonplain-crypto-js を依存として追加した悪意あるバージョンを npm CLI から直接パブリッシュ(GitHub の CI/CD を完全にバイパス)
  4. npm install すると plain-crypto-jspostinstall スクリプトが自動実行され、OS ごとにRATをダウンロード・配置

ポイントは axios 自体のソースコードには悪意あるコードが一切ない こと。依存パッケージの postinstall だけで攻撃が成立する巧妙な手口。

今すぐやること

# 影響確認: axiosのバージョンチェック
npm list axios
# plain-crypto-jsが存在しないか確認
npm list plain-crypto-js

感染していたら → マシンを隔離し、全シークレット・APIキーをローテーション。安全なバージョンに固定してクリーンインストール。

{
  "dependencies": { "axios": "1.14.0" },
  "overrides": { "axios": "1.14.0" }
}

サプライチェーン攻撃から身を守るために最低限設定しておきたいこと

参考: https://zenn.dev/dely_jp/articles/supply-chain-kowai

2026年3月だけで Trivy → LiteLLM → axios と立て続けにサプライチェーン攻撃が発生。しかし、パッケージマネージャの設定ひとつで防げるケースが多い。調査によると直近の攻撃10件中8件は公開から1週間以内に検出・削除されている

対策1: クールダウン(min-release-age)

公開から一定期間が経過するまでインストールを保留する仕組み。悪意あるバージョンが検出・削除されるまでの「時間差」を利用して自動的にブロックできる。

# .npmrc(npm 11.10+)
min-release-age=7

pnpm, Yarn, Bun, uv でも同等の設定がある。Dependabot や Renovate にも cooldown / minimumReleaseAge 設定がある。

対策2: ロックファイルの厳密な運用

CI/CDでは npm install ではなく npm ci を使う。

package.json"axios": "^1.14.0" と書いてある場合、npm install は「^ の範囲で最新を取ってOK」と判断して、npm レジストリに問い合わせて 1.14.1(悪意あるバージョン)を取得してしまう可能性がある。一方 npm cilockfile に書いてあるバージョンだけをそのままインストール し、矛盾があればエラーで止まる。レジストリに「最新は何?」とは聞かない。

コマンド動き今回の攻撃に対して
npm installlockfile を更新して最新を取ることがある1.14.1(悪意あり)を取得する可能性あり
npm cilockfile の通りにしかインストールしない1.14.0(安全)のまま
npm ci                              # npm
pnpm install --frozen-lockfile      # pnpm
bun install --frozen-lockfile       # Bun

対策3: postinstall スクリプトの無効化

今回の攻撃は postinstall の自動実行がトリガー。デフォルトで無効化しておくのが安全。

# .npmrc
ignore-scripts=true

pnpm v10 と Bun はデフォルトでブロック済み。必要なパッケージだけ許可リストに追加する方式。

対策4: GitHub ActionsのSHA pinning

タグ指定(@v4)だとタグの上書きで別のコードが実行される恐れがある。コミットハッシュで固定する。

# タグ指定(危険)
- uses: actions/checkout@v4
# SHA pinning(安全)
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2

pinact を使えば自動変換できる。

対策5: Dependency Review Action

PRで追加・変更される依存関係をスキャンし、脆弱なパッケージが含まれていたらCIを失敗させる。マージ前にブロックできるのがポイント。