PJR-7GAK docs-lint の依存の脆弱性への対応
1. 概要
docs-lint に残る high 6 件・moderate 3 件(markdownlint-cli 0.48 経由の markdown-it・smol-toml・js-yaml、remark-lint-frontmatter-schema 経由の json-schema-ref-parser・ajv・minimatch・yaml)を、markdownlint-cli 0.49 への更新と上流の対応状況の確認で解消する(v0.3.0)
2. 完了条件
- docs-lint(
packages/docs-lint)のnpm audit --omit=dev --package-lock-onlyが報告する 9 件(high 6 件、moderate 3 件)について、脆弱な版を持ち込む依存の経路、修正版の有無、解消に必要な変更を 1 件ずつ調べ、対応結果に表で記録する。 markdownlint-cliを 0.49 以降に上げると解消するものと、その場合に docs-lint の設定・コード・出力に変更が要るかを、変更履歴(CHANGELOG・リリースノート)から確かめて記録する。remark-lint-frontmatter-schema経由のもの(@apidevtools/json-schema-ref-parser、ajv、minimatch、yamlなど)について、新しい版や代替で解消できるか、上流の対応待ちかを記録する。package.jsonとpackage-lock.jsonは agent が変更できない設定のため変更しない。必要な依存の変更(パッケージ名・版の範囲・理由)は result の申し送りに書き、orchestrator が反映して検証する。- 依存の更新に合わせてコードや設定の変更が必要な場合は、その変更を行い、既存の単体テストが通る。
- 上流の対応待ちで残るものは、
CHANGELOG.mdの v0.3.0 の「既知の問題」に追記されている。
3. 作業内容
| No | 作業 | 担当 | 状態 | メモ |
|---|---|---|---|---|
| 1 | 9 件の経路・修正版・解消方法の調査と記録 | DEV | done | 対応結果に記録 |
| 2 | 必要なコード・設定の変更と CHANGELOG の既知の問題 | DEV | done | 変更不要(対応結果を参照) |
| 3 | package.json・lockfile の更新と検証 | orchestrator | done | 43dc9ef8 で反映した |
4. 対応結果
4.1. 調査の前提
- 対象は
packages/docs-lintでnpm audit --omit=dev --package-lock-onlyを実行した結果の 9 件(high 6 件、moderate 3 件)である(2026-10-01 実行)。 - 直接依存は
markdownlint-cli(0.48.0)とremark-lint-frontmatter-schema(3.15.4)の 2 つで、残る 7 件はいずれもこの 2 つの配下にある。 - ルートの
package.jsonにも同じ 2 つの依存(markdownlint-cli^0.48.0、remark-lint-frontmatter-schema^3.15.4)がある。
4.2. 9 件の経路と解消方法
| パッケージ | 深刻度 | lockfile の版 | 経路 | 修正版 | 解消に必要な変更 |
|---|---|---|---|---|---|
markdownlint-cli | high | 0.48.0 | 直接依存 | 0.49.1 | markdownlint-cli を ^0.49.1 に上げる |
js-yaml | high | 4.1.1 | markdownlint-cli(~4.1.1 固定) | 4.3.2 以上 | markdownlint-cli 0.49.1(js-yaml ~5.2.1)へ更新 |
smol-toml | high | 1.6.1 | markdownlint-cli(~1.6.0) | 1.7.1 以上 | markdownlint-cli 0.49.1(smol-toml ~1.7.0)へ更新 |
markdown-it | moderate | 14.1.1 | markdownlint-cli(~14.1.1) | 14.2.0 以上 | markdownlint-cli 0.49.1(markdown-it ~14.3.0)へ更新 |
remark-lint-frontmatter-schema | high | 3.15.4 | 直接依存 | なし(3.15.4 が最新) | 依存から削除する(未使用) |
@apidevtools/json-schema-ref-parser | high | 11.1.0 | remark-lint-frontmatter-schema(11.1.0 固定) | 11.1.0 より後 | remark-lint-frontmatter-schema の削除で消える |
minimatch | high | 9.0.3 | remark-lint-frontmatter-schema(9.0.3 固定) | 9.0.7 以上 | remark-lint-frontmatter-schema の削除で消える |
ajv | moderate | 8.12.0 | remark-lint-frontmatter-schema(8.12.0 固定) | 8.18.0 以上 | remark-lint-frontmatter-schema の削除で消える |
yaml | moderate | 2.3.3 | remark-lint-frontmatter-schema(2.3.3 固定)が版を決定 | 2.8.3 以上 | 削除後は unified-engine(^2.0.0)が最新の 2.x を解決する |
smol-tomlの~1.7.0は脆弱な 1.7.0 も許容するため、lockfile では 1.7.1 以上(現時点の 1.7.x 最新は 1.7.2)に解決されていることを確認する必要がある。markdown-itの脆弱性はtypographer有効時の smartquotes に限られ、markdownlint はtypographerを使わないため実害は小さいが、更新で解消する。
4.3. markdownlint-cli 0.49 の変更点と docs-lint への影響
- 変更履歴(https://github.com/igorshubovych/markdownlint-cli/releases)によると、0.49.0 は
markdownlint0.41.0 への更新(MD022 / MD028 / MD035 / MD042 / MD051 / MD060 の改善、インラインのディレクティブ記法の扱いの削除)と Node 20 の対応終了、0.49.1 はmarkdownlint0.41.1 への更新(MD029 の改善)と依存の更新である。0.49.1 のenginesはnode >=22。 - docs-lint は
enginesがnode >=22.13のため、Node の要件は影響しない。 - docs-lint は
markdownlint-cliをbin/specdojo-docs-lint.jsから CLI として起動するだけで API を使っていないため、コードの変更は不要である。 - 設定(
.markdownlint.yaml)の書式に破壊的変更はないため、設定の変更も不要である。ただし MD022 などの判定が変わるため、既存文書に新たな指摘が出る可能性がある。更新後にnpm run lint:mdで確認する。
4.4. remark-lint-frontmatter-schema 経由のものの扱い
remark-lint-frontmatter-schemaの最新は 3.15.4(2023-10-15 公開)で、それ以降のリリースがない。依存を完全一致の版で固定しているため、上流の新しい版では解消できない。npm auditが示す修正候補の 3.15.3 は古い版への変更で、同じく脆弱な版を固定している。- docs-lint とリポジトリでは、frontmatter の検証を自前の
packages/docs-lint/src/remark-frontmatter-ajv2020.cjs(ajv8.20.0 とajv-formatsを直接使用)で行っている。.remarkrc.yamlの plugins とソースのどこからもremark-lint-frontmatter-schemaは参照されていない。 - このため代替への置き換えは済んでおり、依存から削除すれば 4 件(
remark-lint-frontmatter-schemaを含めて 5 件)が解消する。上流の対応待ちで残るものはない。
4.5. 実施内容と残課題
- コード・設定の変更は不要と判断した。依存の更新で 9 件すべてが解消する見込みのため、
CHANGELOG.mdの v0.3.0 の「既知の問題」への追記は行っていない。 package.jsonとpackage-lock.jsonは agent が変更できないため、次の変更を orchestrator が反映して検証する(作業内容の No 3)。packages/docs-lint/package.json:markdownlint-cliを^0.49.1に上げ、remark-lint-frontmatter-schemaを削除する。- ルートの
package.json: 同じくmarkdownlint-cliを^0.49.1に上げ、remark-lint-frontmatter-schemaを削除する。 - 両方の lockfile を更新し、
smol-tomlが 1.7.1 以上、yamlが 2.8.3 以上に解決されていることと、npm audit --omit=dev --package-lock-onlyが 0 件であることを確認する。 npm run lint:mdとnpm run lint:fmを実行し、markdownlint0.41 の判定変更で新たな指摘が出た場合は対応する。
- 反映後に脆弱性が残った場合は、
CHANGELOG.mdの v0.3.0 の「既知の問題」へ追記する。
4.6. orchestrator による反映と検証(2026-10-01)
remark-lint-frontmatter-schemaがpackage.json以外から参照されていないことを grep で確かめた。- ルートと
packages/docs-lintのpackage.jsonでmarkdownlint-cliを^0.49.1に上げ、remark-lint-frontmatter-schemaを削除した。lockfile はnpm update yaml js-yaml smol-tomlで範囲内の最新にそろえた(43dc9ef8)。smol-tomlは 1.7.2 に解決された。 - ルートの
npm audit --omit=devは 0 件になった。docs-lint のnpm audit --omit=dev --package-lock-onlyは、9 件のうち 8 件が解消した。 - 調査の見込みと異なり、
markdownlint-cli0.49.1 がjs-yamlを~5.2.1に固定するため、js-yaml5.2 系の moderate 1 件(修正版は 5.4.1)が残った。markdownlint-cliの最新は 0.49.1 のため上流の対応待ちとし、CHANGELOG.mdの「既知の問題」に追記した。 - markdownlint 0.41 の判定の変更による新たな指摘はなく、
npm run lint:md・npm run lint:fm・npm run check(1865 件)が通過した。 - ルートの開発用の依存に残る 4 件(
ajv-cli経由のfast-json-patchなど)は配布物に入らないため、prj-0001:pjr-q3f0-dev-dependencies-major-update で扱う。