Skip to content
frontmatter
キー値
specdojo.idprj-0001:pjr-hqkv-fast-glob-braces-vulnerability
specdojo.typeproject
specdojo.statusready
specdojo.rulebookspecdojo:pjr-rulebook
specdojo.part_ofprj-0001:pjr-index
specdojo.item_typeissue
specdojo.item_statusdone
specdojo.priorityhigh
specdojo.ownerDEV
specdojo.registered_at2026-10-08T12:32:42Z
specdojo.completed_at2026-10-08T22:52:55Z
specdojo.conclusion本体の fast-glob を依存なしの再帰走査に、docs-lint を tinyglobby に置き換えた。npm ls braces --omit=dev は空、npm audit --omit=dev は 0 件。

PJR-HQKV 本体の実行時の依存 fast-glob 経由で braces の high の脆弱性が残る ​

1. 課題内容 ​

npm audit --omit=dev で、直接の依存 fast-glob → micromatch → braces のサービス不能攻撃の脆弱性が high 3 件として出る(2026-10-08)。修正版はまだない。CHANGELOG の v0.3.0 は依存の脆弱性に対応したと書いている。fast-glob を別の実装(Node 標準の glob など)に置き換えるか、既知の問題として CHANGELOG に書くかを決める。

2. 影響範囲 ​

観点影響
スコープ本体の src/register.ts(2 か所)と @specdojo/docs-lint の 5 ファイルの glob、両方の package.json の依存
スケジュールv0.3.0 の公開の判定基準 5 に関わる
コスト依存の置き換えと、列挙の結果が変わらないことの確認
品質利用者の環境に high の脆弱性 3 件が入る
関係者SpecDojo と @specdojo/docs-lint の利用者

3. 対応方針 ​

項目内容
原因fast-glob が micromatch 経由で braces に依存し、braces に修正版がない
対応策2026-10-09 に利用者が置き換えを決めた。本体は依存なしの走査、docs-lint は tinyglobby(依存は fdir と picomatch だけ)へ置き換える。下記の「完了条件の詳細」のとおり
依存事項ルートの package.json は保護対象のため、依存の変更は人が develop へ入れる
完了条件下記の「完了条件の詳細」を満たす

3.1. 完了条件の詳細 ​

  • src/register.ts の fast-glob の 2 か所を、node:fs による依存なしの再帰的な走査に置き換える。docs/ja/**/*.md を対象にし、generated ディレクトリを除き、絶対パスを辞書順で返す現在の結果を保つ。Node 標準の fs.globSync は engines(>=22.13)の古い版で試験的な機能の警告が出るため使わない。
  • packages/docs-lint/src/ の 5 ファイルの fast-glob を tinyglobby に置き換える。{yaml,yml} の展開、ignore、onlyFiles、dot: false、重複の排除、結果の辞書順を保つ。
  • ルートと packages/docs-lint の package.json から fast-glob を外し、docs-lint に tinyglobby を加え、package-lock.json を更新する。
  • npm ls braces --omit=dev が空になり、npm audit --omit=dev に braces が出ない。
  • unit test で、置き換えた列挙が対象ファイルと順序を変えないこと(generated の除外、ignore の適用を含む)を確かめる。
  • CHANGELOG の v0.3.0 で、既知の問題から PJR-HQKV の項目を外し、不具合修正の依存の脆弱性の項目へ移す。
  • npm run check が通る。

4. 対応結果 ​

  • src/register.ts の参照更新対象の列挙を node:fs の再帰走査へ置き換え、docs/ja 配下の Markdown だけを絶対パスの辞書順で返し、generated ディレクトリと隠し項目を除外するようにした。
  • docs-lint の 5 つの検証コマンドは、tinyglobby を使う共通ヘルパーへ置き換えた。brace 展開、 ignore、ファイル限定、隠し項目の除外、重複排除、辞書順をヘルパーと unit test で固定した。
  • ルートと docs-lint の依存宣言・lockfile から fast-glob を除き、docs-lint の実行時依存と ルートのテスト用開発依存へ tinyglobby を追加した。fast-glob に依存していた既存テストも tinyglobby へ移行した。
  • CHANGELOG の PJR-HQKV を既知の問題から不具合修正へ移し、依存経路を除去したことを記録した。
  • 再発防止として、本体の走査では generated の除外と返却順、docs-lint の走査では brace・ ignore・ファイル限定・隠し項目・重複排除・返却順を unit test で検証する。
  • npm ls braces --omit=dev --all は空、ルートと docs-lint の npm audit --omit=dev --offline は 0 vulnerabilities になった。オンラインの npm audit --omit=dev は sandbox の DNS 制限(EAI_AGAIN registry.npmjs.org)で実行できないため、ネットワークを利用できる 環境での再確認を申し送る。

5. 関連ドキュメント ​