Skip to content

fix(security): fast-uri / brace-expansion の High アドバイザリを override 更新で解消 - #176

Merged
ara-ta3 merged 1 commit into
mainfrom
devin/1785888277-security-fast-uri-brace-expansion
Aug 5, 2026
Merged

fix(security): fast-uri / brace-expansion の High アドバイザリを override 更新で解消#176
ara-ta3 merged 1 commit into
mainfrom
devin/1785888277-security-fast-uri-brace-expansion

Conversation

@devin-ai-integration

Copy link
Copy Markdown
Contributor

Summary

pnpm audit で新たに検出された High 2件 (fast-uri / brace-expansion) を pnpm-workspace.yaml の overrides 更新で解消しました。本リポジトリは記事の Markdown 置き場であり、いずれも textlint / Prisma 系 CLI の推移的依存で、実行時に外部入力が到達する経路はありません。

-  brace-expansion@>=5.0.0 <=5.0.7: '>=5.0.8'
-  fast-uri@<3.1.4: '>=3.1.4'
+  brace-expansion@>=4.0.0 <5.0.9: '>=5.0.9'
+  fast-uri@<4.1.2: '>=4.1.2'

1. 脆弱性の概要

fast-uri

  • バージョン: 4.1.1 → 4.1.2
  • CVE-2026-18446 / GHSA-7p8r-x3mc-p8w7
  • Severity: High / CVSS 3.1: 7.5 (AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N) / CWE-436 (Interpretation Conflict)
  • GHSA-7p8r-x3mc-p8w7
  • 種類: ホスト混同 (SSRF / URL 検証バイパス)。\\evil.com/path のようにバックスラッシュをオーソリティ導入部に使った URI を fast-uri はパスとして扱う一方、Node の WHATWG URL / fetch()\/ と等価に扱うため、検証と実際の接続先がずれる。

brace-expansion

  • バージョン: 5.0.8 → 5.0.9
  • CVE-2026-69152 / GHSA-rgw5-rvv9-x895
  • Severity: High / CVSS 3.1: 7.5 (AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H) / CWE-400, CWE-770
  • GHSA-rgw5-rvv9-x895
  • 種類: DoS (メモリ枯渇 / イベントループ停止)。expand() の中間配列に上限がなく、CVE-2026-14257 に対する 5.0.8 の緩和策を迂回できる。

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

fast-uri

  • 依存経路: textlint > @textlint/linter-formatter > table > ajv > fast-uri
  • 攻撃の入口: textlintmake lint (CI の .github/workflows/lint.yml) から articles 配下の Markdown を検査するために起動される CLI。fast-uri を使うのは ajv がフォーマッタ設定用 JSON Schema の $ref/$id を解決する部分で、渡るのはライブラリ同梱のスキーマ内の静的な URI のみ。リポジトリ内に URL の許可判定や fetch() を行うアプリケーションコードは存在しない (このリポジトリは記事 Markdown と textlint 設定のみ)。
  • 具体的な攻撃手法: 悪用には、攻撃者が制御する URL を fast-uri でパース・検証してから同じ文字列を Node の URL/fetch() に渡す実装が必要。本リポジトリにはその経路が無く、成立しない。
  • 影響度評価: 実質的に影響なし (lint/CI 時のみロードされる)。

brace-expansion

  • 依存経路: textlint > glob > minimatch > brace-expansion
  • 攻撃の入口: textlint がファイル探索を行う際の glob パターン展開。渡るのは Makefilearticles および textlintignore に書かれた静的なパターンのみで、外部入力は無い。
  • 具体的な攻撃手法: expand() に巨大なブレースパターンを渡すことで OOM/CPU 占有を起こせるが、そのパターンは Makefile / textlintignore を書き換えられる者しか注入できず、その権限があれば CI で任意コマンドを実行できる。
  • 影響度評価: 実質的に影響なし (lint/CI 時のみ、入力は信頼できる静的値)。

3. 修正内容

  • pnpm-workspace.yamloverrides を更新 (バージョン強制のみ、直接依存の変更なし)。
    • fast-uri@<3.1.4: >=3.1.4fast-uri@<4.1.2: >=4.1.2
    • brace-expansion@>=5.0.0 <=5.0.7: >=5.0.8brace-expansion@>=4.0.0 <5.0.9: >=5.0.9
  • pnpm-lock.yamlpnpm install --lockfile-only で更新 (fast-uri 4.1.1→4.1.2、brace-expansion 5.0.8→5.0.9)。
  • 破壊的変更: なし (いずれもパッチリリース)。

4. 修正後の確認

  • pnpm auditNo known vulnerabilities found
  • make install / make lint (textlint) 成功。
  • Dependabot alerts に上がっていた High 2件と一致しており、マージ後に解消される見込み。

Link to Devin session: https://app.devin.ai/sessions/0d8c1a634ced40ea94d8ce4cc65de922

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

@devin-ai-integration devin-ai-integration Bot added the dependencies Pull requests that update a dependency file label Aug 5, 2026
@ara-ta3
ara-ta3 merged commit 9597b46 into main Aug 5, 2026
1 check passed
@ara-ta3
ara-ta3 deleted the devin/1785888277-security-fast-uri-brace-expansion branch August 5, 2026 02:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant