
「GitHubから突然、globの脆弱性メールが届いたけど…これ何?」
「globってそもそも何をしているライブラリ?」
この記事でわかることは下記のとおり。
- GitHubから届いた「globの脆弱性警告」の正体がわかる
- どのglobバージョンが危険で、どれが安全かが明確になる
- 具体的な修正手順がわかる
この記事では、下記の情報をもとに「globの脆弱性と対処法」を解説します。
結論から言うと、今回のglob脆弱性は「npmパッケージのglob」が対象で、適切にアップデートすれば解決します。
UNIXコマンドのglob自体が危険という話ではありません。
この記事を読めば、 「この警告は無視していいのか?」「どこをどう直せばいいのか?」と悩むことはなくなります。
依存関係にglobが含まれていても、安全な状態に自信をもってアップデートできるようになるでしょう。
GitHubからの脆弱性報告
ある日、GitHubから以下のようなメールが届きました。


翻訳すると下記のようになります。
あなたの GitHub アカウント内の 1 つのリポジトリが、
globで見つかったセキュリティ脆弱性の影響を受けている可能性があります。
globCLI:-c/--cmdオプションでコマンドインジェクション、マッチしたファイル名をshell: trueで実行してしまう脆弱性
globとは?
簡単に言うと 、globとは「ファイル名をパターン(ワイルドカード)でまとめて扱う仕組み/ツール」です。
npmの glob パッケージは何をするもの?
Node.js 向けにこの glob の仕組みを JavaScriptから使えるようにした定番ライブラリが存在します。
npmでインストールしたあと、以下のようにimportすれば使えるでしょう。
import { glob } from "glob";今回の問題は、このNode.js向けのglobパッケージにコマンドインジェクションの脆弱性が見つかったというものです。
どんな問題?
問題の詳細は下記のURLから。


要約すると、globでコマンドインジェクション[1]が発生する問題です。
コマンドインジェクションとは、外部からの入力を介して不正にOSコマンドが実行されてしまう脆弱性です。
今回の問題では、本来は“データ”として扱うはずのファイル名などの文字列が、プログラムの想定を超えて“コマンドとして実行”されてしまいます。
具体的には以下のようなコマンドが問題視されています。
glob -c "echo" "**/*.js"
-c / --cmd- マッチしたファイル名を引数にして 外部コマンドを実行する
ファイル名がそのまま shell に渡される実装だったため、今回の「コマンドインジェクション」脆弱性が発生しました。
問題が起きるglobのバージョン
今回問題があるバージョンは、
- 10.2.0以上で、 10.5.0未満
- 11.0.0以上で、 11.1.0未満
です。安全なバージョンは、
- 10.5.0 以上
- 11.1.0 以上
となります。
globのバージョン確認
npm ls globでバージョンがわかります。
> npm ls glob
vscode-markdown-clip@1.0.7 C:\Users\user\github\vscode-markdown-clip
└─┬ @vscode/test-cli@0.0.12
├─┬ c8@10.1.3
│ └─┬ test-exclude@7.0.1
│ └── glob@10.3.0 deduped
├── glob@10.3.0
└─┬ mocha@11.7.5
└── glob@10.3.0 dedupedこのようにglobが問題あるバージョンの範囲内でした。そのため、バージョン修正が必要となります。
問題解決方法~バージョン修正~
脆弱性問題を解決するために、globのバージョンを修正しましょう。
バージョンを修正するには2つのステップが必要です。
ncu -uでpackage.json更新npm installでインストール
ncuでpackage.jsonを更新
npm-check-updatesを使うと、package.jsonのバージョン更新ができる。
npm install -g npm-check-updatesncu単体だとアップデート情報の確認のみなので、オプション-uをつけることで、package.json が更新される。
ただし、インストールは一切しない。
> ncu -u
Upgrading C:\Users\user\github\vscode-markdown-clip\package.json
[====================] 10/10 100%
@types/mocha ^10.0.6 → ^10.0.10
@types/node 18.x → 25.x
@types/vscode ^1.95.0 → ^1.107.0
@vscode/test-cli ^0.0.4 → ^0.0.12
@vscode/test-electron ^2.3.8 → ^2.5.2
copy-paste ^1.5.3 → ^2.2.0
eslint ^8.56.0 → ^9.39.2
markdown-it-attrs ^4.2.0 → ^4.3.1
typescript ^5.3.3 → ^5.9.3npm install でパッケージを更新
あとは、npm install を実行すると更新されています。
npm ls globで確認してみましょう。
> npm ls glob
vscode-markdown-clip@1.0.7 C:\Users\user\github\vscode-markdown-clip
└─┬ @vscode/test-cli@0.0.12
├─┬ c8@10.1.3
│ └─┬ test-exclude@7.0.1
│ └── glob@10.5.0 deduped
├── glob@10.5.0
└─┬ mocha@11.7.5
└── glob@10.5.0 deduped無事globが安全なバージョンに更新されました。
よくある質問
GitHubから届いた「globの脆弱性警告メール」とは何ですか?
GitHubが、リポジトリ内で使用されている npm パッケージ「glob」に既知のセキュリティ脆弱性が含まれている可能性を検知し、通知してくれる警告メールです。今回の警告は、glob の CLI オプションによりコマンドインジェクションが発生する恐れがある点に関するものです。
出展: https://github.com/advisories/GHSA-5j98-mcp5-4vw2/
globとは何ですか?
glob とは、*.js や **/*.md のようなワイルドカードを使って、複数のファイルやディレクトリをまとめて扱うための仕組み・ツールです。主にファイル検索や一括処理で利用されます。
今回問題になっている glob は UNIX コマンドの glob ですか?
いいえ、今回の脆弱性は Node.js 向けの npm パッケージ「glob」に関する問題です。UNIX シェルに組み込まれている glob 機能そのものが問題になっているわけではありません。
コマンドインジェクションとは何ですか?
本来はデータとして扱うべき入力値が、そのまま OS コマンドとして解釈・実行されてしまう脆弱性です。攻撃者が意図しないコマンドを実行させることで、情報漏えいやシステム侵害につながる恐れがあります。
出展: https://group.gmo/security/cybersecurity/cyberattack/blog/os-command-injection/
脆弱性の影響を受ける glob のバージョンはどれですか?
影響を受けるのは、10.2.0以上〜10.5.0未満、および 11.0.0以上〜11.1.0未満のバージョンです。これらの範囲に該当する場合、修正が必要です。
安全な glob のバージョンはどれですか?
修正済みで安全とされているのは、10.5.0以上、または 11.1.0以上のバージョンです。いずれかにアップデートすることで脆弱性は解消されます。
プロジェクトで使われている glob のバージョンはどうやって確認しますか?
npm ls glob コマンドを実行することで、プロジェクト内で依存している glob のバージョンを確認できます。直接依存・間接依存のどちらも確認可能です。
globの脆弱性への対応方法は何ですか?
npm-check-updates (ncu) を使って package.json の依存関係を更新し、その後 npm install を実行して glob を安全なバージョンへアップデートします。これにより脆弱性の影響を回避できます。
まとめ
この記事では、glob(npmパッケージ)の脆弱性とその対応方法についてまとめました。
- GitHubから「glob にコマンドインジェクションの脆弱性がある」という警告メールが届いた
- globとは、ファイル名をワイルドカードでまとめて扱う仕組み・ツールである
- 今回問題になっているのは Node.js 向けの npm パッケージ「glob」である
-c / --cmdオプションにより、マッチしたファイル名がshell: trueで実行されてしまう実装だった- その結果、ファイル名を通じて OS コマンドインジェクションが発生する可能性があった
- 脆弱性の影響を受けるバージョンは
- 10.2.0以上〜10.5.0未満
- 11.0.0以上〜11.1.0未満
- 安全なバージョンは
- 10.5.0以上
- 11.1.0以上
npm ls globで、プロジェクト内で使われている glob のバージョンを確認できる- 修正方法は、
npm-check-updates (ncu)を使って package.json を更新し、その後npm installを実行する - 実際に更新後、glob が安全なバージョンへ切り替わったことを確認できた
今回の記事では、GitHubからの脆弱性通知をきっかけに、globとは何か、どのような問題があったのか、影響を受けるバージョン範囲、そして具体的な解決手順までを順を追って解説しました。
問題のあるglobには、-c / --cmd オプションを使った場合、マッチしたファイル名を shell: true の状態で外部コマンドとして実行してしまう実装が含まれていました。
そのため本来は単なる文字列として扱われるべきファイル名が、意図せず OS コマンドとして解釈・実行されてしまいます。
結果として ファイル名を経由したOSコマンドインジェクションが発生する可能性がありました。
これが、今回の脆弱性の概要です。
