Skip to content

fix(security): High 2件 (js-yaml / brace-expansion) を override 更新で解消 - #171

Merged
ara-ta3 merged 1 commit into
mainfrom
devin/1784935158-security
Jul 25, 2026
Merged

fix(security): High 2件 (js-yaml / brace-expansion) を override 更新で解消#171
ara-ta3 merged 1 commit into
mainfrom
devin/1784935158-security

Conversation

@devin-ai-integration

Copy link
Copy Markdown
Contributor

Summary

pnpm audit の High 2 件(js-yaml / brace-expansion)を pnpm-workspace.yaml の overrides 更新のみで解消します。記事(articles/)の変更はありません。

-  brace-expansion@<5.0.7: '>=5.0.7'
+  brace-expansion@>=5.0.0 <=5.0.7: '>=5.0.8'
-  js-yaml@<5.2.1: '>=5.2.1'
+  js-yaml@<5.2.2: '>=5.2.2'

1. 脆弱性の概要

パッケージ 修正前 → 修正後 ID 深刻度 種類
js-yaml 5.2.1 → 5.2.2 GHSA-pm4m-ph32-ghv5 High (CVSS 7.5) DoS(flow collection のパースが指数時間)
brace-expansion 5.0.7 → 5.0.8 GHSA-mh99-v99m-4gvg / CVE-2026-14257 High (CVSS 7.5) DoS(展開長が無制限で OOM クラッシュ)
  • js-yaml: [[[[...]]]] のようにネストした flow collection([] / {})を含む YAML でパース時間が指数的に増加し、CPU を占有できる。
  • brace-expansion: a{1..100000000} のようなレンジ/ネストしたブレース展開に上限が無く、短い文字列で巨大配列を生成してプロセスを OOM で落とせる。

2. このコードベースでの攻撃シナリオ

本リポジトリは Zenn 記事(Markdown)の原稿置き場で、実行されるコードは Makefilemake lint(textlint)と make previewzenn preview のローカルサーバ)だけです。公開されるのは Zenn 側にレンダリングされた記事であり、このリポジトリの Node.js プロセスがインターネットに露出することはありません。

js-yaml(経路: . > textlint > @textlint/linter-formatter > js-yaml

攻撃の入口: textlint がフォーマッタ設定を読む際に js-yaml が使われます。入力は textlintrc.json とリポジトリ内の設定のみで、記事本文(Markdown)が YAML パーサに渡ることはありません(front matter の解釈は Zenn 側の処理で、本リポジトリの lint 経路には含まれません)。

具体的な攻撃手法と成否: 悪意ある YAML を食わせるには textlint 設定ファイル自体を書き換える必要があり、外部からの到達経路はありません。仮に成立しても影響は「ローカル / CI の textlint が CPU を食って遅くなる」だけで、公開記事や閲覧者への影響はありません。

brace-expansion(経路: . > textlint > glob > minimatch@10 > brace-expansion

攻撃の入口: textlint が --ignore-path ./textlintignore や対象ディレクトリ articles を glob 展開する際に使われます。展開されるパターンはリポジトリ内の textlintignore の内容のみで、外部入力はありません。

具体的な攻撃手法と成否: textlintignorea{1..100000000} のような行を仕込めば lint プロセスを OOM で落とせますが、それはリポジトリへの書き込み権限が前提であり攻撃として成立しません(開発 / CI 環境限定・影響は lint ジョブの失敗のみ)。

影響度評価: どちらも 低(開発時のツールチェーンのみ・予防的修正)

3. 修正内容

  • pnpm-workspace.yaml の overrides を更新(js-yaml >=5.2.2brace-expansion は 5.0.x 系の上限を <=5.0.7 に直して >=5.0.8 へ)。
  • pnpm install により pnpm-lock.yaml を更新(差分は該当 2 パッケージのみ)。
  • 破壊的変更なし: いずれもパッチリリース。brace-expansion@5.0.8 を受け取るのは ^5 を要求する minimatch@10 のみで、ブレースパターンの展開が動作することを確認済み(5.0.8 の CJS は { expand, ... } を export するため旧 minimatch には当てない範囲指定にしています)。

4. 確認結果

  • pnpm audit: High 0 件(修正前 2 件)。残るのは moderate 1 件(@hono/node-server GHSA-frvp-7c67-39w9textlint > @modelcontextprotocol/sdk 経由。上流のパッチ待ちのため今回は対象外)。
  • make lint: OK(textlint がエラーなく完走)

Link to Devin session: https://app.devin.ai/sessions/9dc6db5c666e498fa0c0fb4369c8437c

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
@devin-ai-integration

Copy link
Copy Markdown
Contributor Author

🤖 Devin AI Engineer

I'll be helping with this pull request! Here's what you should know:

✅ I will automatically:

  • Address comments on this PR. Add '(aside)' to your comment to have me ignore it.
  • Look at CI failures and help fix them

Note: I can only respond to comments from users who have write access to this repository.

⚙️ Control Options:

  • Disable automatic comment, CI, and merge conflict monitoring

@ara-ta3
ara-ta3 merged commit 6c8059b into main Jul 25, 2026
1 check passed
@ara-ta3
ara-ta3 deleted the devin/1784935158-security branch July 25, 2026 00:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant