---
title: ソフトウェアサプライチェーンアタック
tags:  #セキュリティ  
author: [ashphy](https://www.docswell.com/user/ashphy)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/VJPK8G2NE8.jpg?width=480
description: 2026年6月5日
published: June 05, 26
canonical: https://www.docswell.com/s/ashphy/57NJWW-software-supply-chain-attack
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/VJPK8G2NE8.jpg)

ソフトウェア
サプライチェーンアタック
SOFTWARE
SUPPLY
CHAIN
ashphy
@ashphy@mstdn.nere9.help
ATTACKS
2026年6月5日


# Page. 2

![Page Image](https://bcdn.docswell.com/page/2EVVN6DYEQ.jpg)

DEFINITION
サプライチェーン
アタックとは
正規の配布物そのものに悪意を仕込み、
信頼ごと利用者のもとへ届ける攻撃。
出典：Committee on National
Security Systems (CNSS) Glossary
“
インストール前に 悪意のある第三
者によって挿入されたバックドア
や脆弱性 を悪用し、データへの侵
入や、ハードウェア・ソフトウェア・
OS・周辺機器・サービスを ライフ
サイクルのどの段階においても操
作可能 にする攻撃手法。
02


# Page. 3

![Page Image](https://bcdn.docswell.com/page/57GLKNYWEL.jpg)

脆弱性を直接突かない
① 正面から突く
② 周囲から忍び込む
ATTACKER
攻撃者
↓
直接攻撃
ATTACKER
YOUR APP
DEPENDENCY
アプリ本体
強固なセキュリティ
攻撃者
↓
依存に侵入
VS
ライブラリ / OS / CI
信頼されている供給元
↓
信頼ごと取り込み
YOUR APP
アプリ本体
防御は健在なのに素通り
✕
堅牢な防御に阻まれる
○ 内側から侵入成功
↓
同じ依存を使う無数のアプリへ波及
正面なら弾ける強固な防御も、依存先を経由されれば正規ルートで内側に通してしまう。
03


# Page. 4

![Page Image](https://bcdn.docswell.com/page/4EQYNQMQJP.jpg)

CASE
01
—
GITHUB
連鎖する侵害
TanStack
→ Nx
→ GitHub
たった一つのPull Requestが、人気ライブラリ・開発ツール・そしてGitHub本体
へと、わずか8日でドミノ倒しのように広がった。


# Page. 5

![Page Image](https://bcdn.docswell.com/page/KJ4WGNVY71.jpg)

CASE
01
—
GITHUB
GitHubの内部リ
ポジトリが流出
犯行声明を出したのは TeamPCP 。
ここに至る引き金は、まったく無関係に見
える一本のPRだった。
は、脆弱性スキャナ Trivy を狙った
攻撃でも知られる同一アクターだ。
約
3,800
GitHub内部リポジトリが流出
TeamPCP
05


# Page. 6

![Page Image](https://bcdn.docswell.com/page/LE1YD53N7G.jpg)

きっかけはTanStack
CASE
11:11
05-11
自動実行
01
—
GITHUB
-
TANSTACK
攻撃者がPRを作成
が pull_request_target で起動し、benchmark-pr ジョブが
をチェックアウトする設定だった。
refs/pull/7378/merge（＝PR側のコード）
bundle-size.yml
本体権限のままPRのコードを実行
と pnpm nx run @benchmarks/bundle-size:build が走り、PR内の
vite_setup.mjs が実行された。
pnpm install
通常のfork PRはシークレット無しの隔離環境で動く。問題は pull_request_target ＋ PRコ
ードのチェックアウトという組み合わせ。本体の権限を持ったまま第三者のコードを実行する誤設
定（Pwn Request）だった。
06


# Page. 7

![Page Image](https://bcdn.docswell.com/page/GEWGY5XMJ2.jpg)

汚染を main のキャッシュに仕込む
CASE
11:29
05-11
11:31
05-11
01
—
GITHUB
-
TANSTACK
checkoutのpostを乗っ取り、共有キャッシュを汚染
が actions/checkout のpostスクリプトを書き換え、ジョブ終了時にランナーのキ
ャッシュ書き込みトークンで依存の共有キャッシュ（pnpmストア）を保存。本来PRスコープのはずが
リリースが次に要求するキーと一致するよう仕込まれた。＝ キャッシュ
refs/heads/main スコープで、
ポイズニング
vite_setup.mjs
証拠を消して隠蔽
Pull Requestの変更を元に戻し、差分を0に戻して痕跡を消す。きれいなコードと、汚染されたキャッシ
ュだけが残る。
でも防げない。キャッシュ書き込みは GITHUB_TOKEN ではなくランナ
ー内部のトークンを使うため、権限設定をすり抜けた。
permissions: read-only
07


# Page. 8

![Page Image](https://bcdn.docswell.com/page/47ZLXN6MJ3.jpg)

リリースプロセスで動き出す
CASE
19:16
05-11
19:20
05-11
01
—
GITHUB
-
TANSTACK
通常のリリースが汚染キャッシュを復元
別の PR#7382 のマージで release.yaml が起動。汚染されたキャッシュが復元され、
リリース権限を持つジョブの中で毒入りコードが動き出した。
OIDCトークンをメモリから抜き取り、汚染公開
Actionsランナーの Runner.Worker プロセスのメモリからOIDCトークンを直接奪取。npmに直接
POSTし、悪意ある42個のパッケージ（84バージョン）を公開。
盗まれたOIDCトークンの有効期限は15分未満。短命でも、リリースが動く間はメモリ上にむき出
しだった。
08


# Page. 9

![Page Image](https://bcdn.docswell.com/page/YJ6W4825JV.jpg)

公開から
検知まで
CASE
01
—
GITHUB
-
TANSTACK
26
分
外部の研究者が気付いて報告
するまで
19:20
05-11
19:46
05-11
20:00
05-11
21:03
05-11
21:30
05-11
23:55
05-11
汚染パッケージがnpmに公開される
外部の研究者が異変に気付きIssueを起
票
TanStackが対応を開始
すべての汚染バージョンを非推奨化
原因を特定
npmがtarballを削除
09


# Page. 10

![Page Image](https://bcdn.docswell.com/page/GJ5MQ92GJ4.jpg)

汚染パッケージが認証情報を吸い上げる
CASE
01
19:20
05-11
20:43:01
05-11
—
GITHUB
CONSOLE
Nxの開発者がpnpm installを実行。GitHub CLIの認証情報が抜かれる。
2
3
05-11
NX
汚染された42個の @tanstack/* が公開状態に
1
20:43:51
-
汚染された @tanstack/zod-adapter@1.166.15 を取り込む
prepare スクリプトが自動で起動する
2.3MBの難読化された収集スクリプトが走り、gh（GitHub CLI）のOAuthトークンを
~/.config/gh/hosts.yml から抜き取る
盗んだトークンで組織のシークレットまで奪う
わずか50秒後。盗んだ gh トークンで nrwl/nx に悪意あるコミットをpushし、組織スコープの
GitHubシークレットを吸い出すワークフローを仕込んだ。
※ Nxとは、複数プロジェクトを一括管理するモノレポ向けのビルドシステム。VS Code拡張「Nx Console」を提供し、多くの開発現場で使われている。
10


# Page. 11

![Page Image](https://bcdn.docswell.com/page/9E29P24D7R.jpg)

被害に気付いたのは7日後
CASE
01
00:12:49
05-12
12:30
05-18
12:36
05-18
12:47
05-18
—
GITHUB
-
NX
CONSOLE
TanStackへの攻撃が公開される
この時点でNx側は自分が被害に遭っていることに気付いていない。
攻撃者が拡張機能の汚染版を公開
盗んだ資格情報でNx Console v18.95.0をマーケットプレイスに公開。正規のコントリビューターと
して振る舞う。
公開通知メールで異常を認識
公開のたびに自動送信される「拡張機能を更新しました」メールが届く。リリース予定がないのに通知が
来たことで、異変に気付く。
拡張機能を非公開化
11


# Page. 12

![Page Image](https://bcdn.docswell.com/page/D7Y45YMMEM.jpg)

そしてGitHub社内へ届く
CASE
05-18
23
時頃
05-19
23:48
05-19
01
—
GITHUB
GitHub社員のVS CodeにNx Consoleが入る
汚染された開発ツールが、ついにGitHub社内の端末に到達した。
TeamPCPが犯行声明を書き込む
GitHubが不正アクセスの調査開始を報告
最初のPRから、わずか8日間の出来事だった。
12


# Page. 13

![Page Image](https://bcdn.docswell.com/page/VENYNPW3J8.jpg)

一本のPRがGitHubに届くまで
CASE
01
—
GITHUB
1
TanStack悪意あるPRをCIが自動実行 → mainのキャッシュを汚染
2
TanStackリリース時にキャッシュ復元 → OIDC奪取 → 42パッケージを汚染公開
3
Nx Console開発者が毒入り @tanstack/* をinstall → 認証情報が流出
4
Nx Console盗まれた資格情報で拡張機能が汚染公開される
5
GitHub社員のVS Codeに着弾 → 内部リポジトリ約3,800件が流出
どの組織も「自分のコード」は安全だった。信頼していた外部の供給元が、次々と踏み台にされた。
13


# Page. 14

![Page Image](https://bcdn.docswell.com/page/Y79PR3XPE3.jpg)

Mini Shai-Hulud
CASE
01
—
GITHUB
-
CAMPAIGN
GitHubへの侵害は、攻撃グループ TeamPCP が展開する大規模キャンペーンMini
Shai-Huludの、ひとつの波に過ぎなかった。
自己増殖するワーム
盗んだトークンでアクセスできる全パッケージを列
挙し、人手を介さずパッチ版を汚染公開する。感染し
たCI/CDが、そのまま次の拡散経路になる。
指数関数的に広がる
タイポスクワッティングや一度きりの汚染とは異な
り、ひとつの認証情報の流出が、エコシステム全体へ
の連鎖に繋がる。
14


# Page. 15

![Page Image](https://bcdn.docswell.com/page/G78DWM2X7D.jpg)

同じ手口が次々と
月 Trivy（脆弱性スキャナ）を侵害
CASE
3
2026
5/19
2026
6/1
2026
01
—
GITHUB
-
CAMPAIGN
セキュリティツール自身が踏み台に。自己増殖ワーム
CanisterWormが拡散し、Microsoftが検知・防
御のガイダンスを公表した。
AntV ＝ 過去最大の波
わずか約22分で323パッケージに639版を自動公
開。npmに留まらずPyPI・GitHub Actions・VS
Code拡張へと広がった。
Red Hatのnpmを侵害
類似ワームMiasmaが
の32パッケージを汚
染。手口は今も使い回されている。
@redhat-cloud-services
npm + PyPI
500+
汚染パッケージ（各波の累計）
最大の波だけで5.18億超の
ダウンロード。AWS・Vault・
GitHubの認証情報がCI/CD
から抜かれた。
15


# Page. 16

![Page Image](https://bcdn.docswell.com/page/L7LMN32NJR.jpg)

CASE
02
—
XZ
UTILS
人を欺く、長期潜入
XZ Utils
コードではなく、人の信頼を攻撃する。3年がかりでメンテナの座を奪い、世界中の
Linuxに手をかけた事件。


# Page. 17

![Page Image](https://bcdn.docswell.com/page/4EMYXD8QEW.jpg)

CASE
02
—
XZ
UTILS
圧縮ライブラリ経
由でsshdに穴が
空く
広く使われる圧縮ソフトウェア
XZ Utils にバックドアが仕込まれた。
問題は仕込まれた先で、このライブラリ
は多くのLinuxで sshd に取り込まれ
ていた。
IMPACT
認証を突破し、リモートからサー
バーを乗っ取れる
攻撃者だけが開けられる「裏口」を
鍵もパスワードも要らずに、外
sshd に。
部から任意コードを実行できる状態だっ
た。
※ sshd 自身は XZ Utils に依存していない。一部ディストリが systemd 連携のため sshd に当てていたパッチ経由で libsystemd がリンクされ、その依存
先である liblzma（XZ Utils）が sshd のプロセスに読み込まれていた。
17


# Page. 18

![Page Image](https://bcdn.docswell.com/page/PER9N45KJ9.jpg)

CASE
02
—
XZ
UTILS
バレた理由は、
わずかな遅さ。
DETECTED BY
パフォーマンスの異常
~0.5
秒
ある開発者がベンチマークを取っていた
SSHログインに生じた、わずかな
ところ、予想外にCPUを消費しているこ
とに気付いた。その違和感を放置せず追
いかけたことで、巧妙なバックドアが暴か
れた。
遅延
もし誰も気付かなければ、世界規模の侵
害になっていた。発覚はほぼ偶然だっ
た。
18


# Page. 19

![Page Image](https://bcdn.docswell.com/page/P7XQN2K5EX.jpg)

CASE
02
—
XZ
UTILS
Jia Tan
2021.11
2022
2023.03
2024.02
が信頼を積み上げた3年
Jia Tan（@JiaT75）がGitHubに登録
1年以上にわたり、複数のオープンソースプロジェクトで地道に活動を続ける。
XZ Utilsへ定期的な貢献を開始
小さく無害な修正を積み重ね、常連のコントリビューターとして信頼を築く。
XZ Utilsの主要メンテナの座を獲得
信頼を勝ち取った裏では、複数の偽アカウントが原作者に「更新が遅い」と圧力をかけ続けた。その後押し
もあり、中枢に入り込んだ。
バックドアを仕込むことに成功
正規メンテナの権限で、誰にも怪しまれずに「裏口」を本体へ。
脆弱性ではなく「信頼される人間」そのものが攻撃ベクトルになった。
19


# Page. 20

![Page Image](https://bcdn.docswell.com/page/37K9NM5R7D.jpg)

CASE
03
—
AXIOS
信頼そのものを乗っ取る
・ 標的型ソーシャルエンジニアリング
Axios
コードもCIも関係ない。メンテナという「人」を直接だまし、アカウントごと奪う。


# Page. 21

![Page Image](https://bcdn.docswell.com/page/LJ3WVYKGJ5.jpg)

CASE
03
-
AXIOS
メンテナーの
アカウントを奪う
はJavaScript用のHTTPクラ
イアントライブラリ。膨大なプロジェクト
が依存する定番だ。そのメンテナーのア
カウントが乗っ取られ、悪意のあるアッ
プデートが公開された。
Axios
WHAT IS AXIOS
JavaScript用
HTTPクライアント
ATTACK
正規メンテナの権限で、毒入り更
新をそのまま配布
21


# Page. 22

![Page Image](https://bcdn.docswell.com/page/8JDK853NEG.jpg)

企業ごと偽装
CASE
03
-
AXIOS
1
実在企業の創業者になりすまして接触。人
物像も企業も丸ごと複製
2
CIに合わせてブランディングした偽
Slackへ招待。LinkedIn共有や偽プロフ
ィール多数
3
MS Teamsでミーティング。複数の関係
者がいるように演出
4
「システムが古い」表示 → 不足項目をイン
ストール → 実体はトロイの木馬
“
何もかもが極めて入念に連携され
ていて、本物らしく見え、プロフェ
ッショナルなやり方で実行されて
いました。
— 標的にされたOSSメンテナー
の証言
22


# Page. 23

![Page Image](https://bcdn.docswell.com/page/VEPK8G4N78.jpg)

CASE
03
-
AXIOS
この一連の工作を行っていたのは
Sapphire
Sleet
北朝鮮と関係のある攻撃アクター
愉快犯でも個人ハッカーでもない。国家が背景にある組織が、時間と資金をかけて
OSSのサプライチェーンを狙っている。
※出典：Mitigating the axios npm supply chain compromise（Microsoft）
23


# Page. 24

![Page Image](https://bcdn.docswell.com/page/27VVN6XY7Q.jpg)

WHAT
YOU
CAN
DO
できる対策
明日から効く、実践チェックリスト


# Page. 25

![Page Image](https://bcdn.docswell.com/page/5JGLKNVW7L.jpg)

リリース直後を、
使わない
できる対 策
＝ 公開から一定期
間が経過したパッケージのみインストー
ルする設定。汚染版が公開されても、多く
は数時間〜数日で削除される。「待つ」だ
けで踏まずに済む。
min-release-age
速報
対応ツール / 設定
npm
pnpm
uv
VS Code
v11.10.0以降
v10.16.0 〜
（v11で既定有効：1日）
v0.9.17以降
拡張機能の自動更新をオフに
VS Code 1.123 から拡張機能の自動更新に2時間の遅延が標準導入
25


# Page. 26

![Page Image](https://bcdn.docswell.com/page/47QYNQ6QEP.jpg)

できる対 策
自動実行スクリプト
をブロック
postinstallスクリプトを既定で実
対応方針
npmには postinstall スクリプトがあ
り、npm install 直後に自動で実行さ
れる。これが認証情報窃取の入口にな
る。
Nxの被害は prepare / installスクリプトが
認証情報収集コードを走らせたことが原因。
pnpm
行しない
npm
同様のブロック機構が提案中
–ignore-scripts も活用
26


# Page. 27

![Page Image](https://bcdn.docswell.com/page/KE4WGN4YJ1.jpg)

できる対 策 — D O C K E R
バージョンを固定する
—
Docker
同じタグ名でも、中身は差し替わりうる。digestまで指定して、中身ごと固定する。
中身が差し替わりうる
FROM node:20-alpine
↓ @sha256 で中身まで固定する
FROM node:20-alpine@sha256:6f3d9…e1c 中身まで一意に固定
確認 imagetools inspect / dockerfile-pin
更新 Renovate / Dependabot
27


# Page. 28

![Page Image](https://bcdn.docswell.com/page/L71YD54NJG.jpg)

できる対 策 — G I T H U B A C T I O N S
バージョンを固定する
—
GitHub
Actions
のようなタグは作者が付け替えられる。フルコミットSHAで固定
@v4
uses: actions/checkout@v4
タグは付け替え可能
↓ コミット SHA で固定する
uses: actions/checkout@08c6903…dd907a8 付け替え不可
自動化 pinact / Dependabot
28


# Page. 29

![Page Image](https://bcdn.docswell.com/page/G7WGY5ZME2.jpg)

できる対 策
入られる前提で監視する
SIEMに集約
でログを集約し、
見覚えのないリリースやアクセスを
検知できる状態にしておく。
GitHub → SIEM
通信を出口で止める
installスクリプトが認証情報を外
部へ送る通信を出口でブロック。依
存パッケージの不審な挙動
（postinstall・難読化・外部通信）も
スキャンして警告する。
socket.dev
Harden-Runner
※ SIEM（Security Information and Event Management）：各所のログやイベントを1か所に集約し、相関分析して異常や攻撃の兆候を検知する仕組み。
29


# Page. 30

![Page Image](https://bcdn.docswell.com/page/4JZLXN1ME3.jpg)

まとめのチェックリスト
RECAP
—
TODAY&#039;S
CHECKLIST
✓ リリース直後を使わない
✓ 自動実行をブロック
✓ バージョンをpinする
✓ 監視・検知する
min-release-age。VS Codeの自
動更新もオフに。
Dockerはdigest、
ActionsはコミットSHAで固定。
postinstallを信用しない。pnpm
採用や --ignore-scripts 。
SIEM・Firewallで異常に気付ける
状態に。
30


# Page. 31

![Page Image](https://bcdn.docswell.com/page/YE6W48L5EV.jpg)

REFERENCES
—
1
/
3
参考情報 トークン奪取と汚染版公開
— CASE 01 連鎖する侵害①
TANSTACK — NPM
01
Postmortem: TanStack npm supply-chain
compromise
02
TanStack公式の事後検証。トークン奪取から汚染版公開までの全経
緯。
03
侵害を受けてTanStackが講じた再発防止の取り組み。
Inside the GitHub Actions Cache Poisoning
vite_setup.mjs
によるActionsキャッシュ汚染の技術詳細。
NX → GITHUB — INSTALL
04
Hardening TanStack After the npm
Compromise
スクリプト悪用と組織への波及
Postmortem: Nx Console v18.95.0 supplychain compromise
installスクリプトが認証情報を収集した事案のNx公式検証。
05
Investigating unauthorized access to
GitHub-owned repositories
GitHub公式のインシデント調査報告。
31


# Page. 32

![Page Image](https://bcdn.docswell.com/page/GE5MQ91GE4.jpg)

REFERENCES
—
2
/
3
参考情報
—
CASE
01②
/
02・03
連鎖する侵害②
の手口分析（
拡張）
CASE 01
06
10
VS CODE
Decoding the GitHub 2026 Breach
TeamPCPによる一連の侵害の流れを解説。
CASE 02
08
— TEAMPCP
07
トロイの木馬化したVS Code拡張の解析。
長期潜入（ X Z ） ／ C A S E 0 3 乗っ取り（ A X I O S ）
Everything I Know About the XZ Backdoor
Jia Tanの正体とXZバックドア全容の総まとめ分析（CASE 02）。
TeamPCP Strikes (again): Trojan VS Code
Extension
09
Post Mortem: axios npm supply chain
compromise
axios汚染版が公開された事案の事後検証（CASE 03・GitHub
issue）。
Mitigating the axios npm supply chain
compromise
Microsoftによるaxios侵害の解析と緩和策。攻撃アクターSapphire
Sleetに言及（CASE 03）。
32


# Page. 33

![Page Image](https://bcdn.docswell.com/page/9729P21DJR.jpg)

REFERENCES
—
3
/
3
参考情報
—
対策
サプライチェーン対策の公式ガイド・リリースノート
11
13
Mitigating supply chain attacks（pnpm）
pnpmが推奨するサプライチェーン対策の公式ガイド。
12
Delayed extension autoupdates（VS Code
1.123）
拡張機能の自動更新に2時間の遅延を標準導入したVS Code公式リ
リースノート（速報）。
Security Best Practices — Supply chain
attacks（Node.js）
Node.js公式のセキュリティベストプラクティス。サプライチェーン攻撃
への対策を解説。
33


