Skip to content

fix(security): clear postcss and brace-expansion high-severity advisories - #720

Closed
seonghobae wants to merge 3 commits into
developfrom
claude/contextualwisdomlab-audit-governance-qyxe67
Closed

fix(security): clear postcss and brace-expansion high-severity advisories#720
seonghobae wants to merge 3 commits into
developfrom
claude/contextualwisdomlab-audit-governance-qyxe67

Conversation

@seonghobae

@seonghobae seonghobae commented Jul 30, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • The security-audit gate (npm audit --workspaces --audit-level=high) fails on develop due to two high-severity advisories in dev-only transitive dependencies:
  • Remediated with npm audit fix --package-lock-only; each is bumped within its parents' semver ranges. Lockfile-only change (package.json unchanged) plus a ### Security CHANGELOG entry.

Verification

  • ./scripts/harness/quickcheck.sh — not run locally (needs the full uv / Rust / vitest toolchain); CI runs it. This change is lockfile-only, so the ESLint / tsc / vitest / build gates that cover code are unaffected.
  • npm audit --workspaces --audit-level=highfound 0 vulnerabilities
  • npm install --package-lock-only re-run is a no-op (lockfile in sync with package.json)
  • python3 scripts/checks/verify_supply_chain.pySupply-chain verification passed

Security Notes

Attack surface

  • Build/test toolchain only: postcss enters via vite, brace-expansion via the lint/test tooling. Neither is on the shipped Tauri desktop runtime path. The postcss flaw discloses arbitrary .map files during source-map auto-loading; brace-expansion is a ReDoS/OOM on adversarial brace patterns.

Trust boundary

  • These packages execute at build/test time on developer and CI machines, not inside the distributed desktop app; there is no runtime or network path to them in shipped binaries.

Mitigations

  • Upgraded to patched releases (postcss 8.5.25, brace-expansion 5.0.8) within existing semver ranges, so the transitive graph is otherwise unchanged.

Test points

  • npm audit --workspaces --audit-level=high (the gate) returns 0 high-severity findings; verify_supply_chain.py passes.

Dependency and Supply Chain

  • No new direct dependency was added
  • If a new dependency was added, this PR explains why it is needed
  • runtime / dev / build / test classification is recorded — both are dev/build/test-only transitives
  • alternatives were considered — a single manual overrides pin was rejected because brace-expansion appears at more than one major; npm audit fix patches each within-range
  • maintainer trust and update health were checked — official patched releases from the same maintainers
  • license fit was checked — unchanged (MIT)
  • known security issues were checked — this PR closes the two listed advisories
  • transitive footprint impact was considered — versions only; no new packages
  • SBOM or supplemental inventory impact was recorded — lockfile version bumps only

i18n impact

  • No user-visible string changed
  • Korean and English locale impact was updated

Reviewer checklist

  • Gitflow target branch is correct — targets develop
  • protected-branch rules were not weakened
  • required checks are expected to stay green

Generated by Claude Code

Summary by CodeRabbit

  • 보안

    • 개발 환경에서 사용되는 간접 의존성의 고위험 보안 취약점을 해결했습니다.
    • 최신 보안 권고 기준을 반영해 관련 구성 요소를 안전한 버전으로 업데이트했습니다.
    • 애플리케이션의 런타임 동작이나 직접적인 기능에는 변경이 없습니다.
  • 문서

    • 이번 보안 업데이트 내역을 변경 로그에 추가했습니다.

…ries

The security-audit gate (npm audit --workspaces --audit-level=high) failed on
two high-severity advisories in dev-only transitive dependencies:

- postcss 8.5.16 -> 8.5.25: GHSA-r28c-9q8g-f849, path traversal in source-map
  auto-loading (sourceMappingURL) leading to arbitrary .map file disclosure.
- brace-expansion -> 5.0.8: GHSA-3jxr-9vmj-r5cp and GHSA-mh99-v99m-4gvg,
  denial of service via exponential-time / unbounded expansion.

Both reach the tree only through the build/test toolchain (vite, eslint), not
the desktop runtime. Remediated with `npm audit fix --package-lock-only`, which
bumps each within its parents' semver ranges; package.json is unchanged, so no
new direct dependency is introduced and no runtime code path changes.

Verification:
- npm audit --workspaces --audit-level=high -> found 0 vulnerabilities
- npm install --package-lock-only re-run is a no-op (lockfile in sync)
- python3 scripts/checks/verify_supply_chain.py -> Supply-chain verification passed
- lockfile-only change; ESLint/tsc/vitest/build gates cover code, untouched here

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Msz8Dni5zRaqPatNCmZJZ8
@coderabbitai

coderabbitai Bot commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Warning

Review limit reached

@seonghobae, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 18 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 18103cc4-c0fb-4d5d-9e17-fcfdee451a07

📥 Commits

Reviewing files that changed from the base of the PR and between a93a2af and 3e2f38a.

⛔ Files ignored due to path filters (1)
  • services/analysis-engine/uv.lock is excluded by !**/*.lock
📒 Files selected for processing (2)
  • CHANGELOG.md
  • services/analysis-engine/pyproject.toml
📝 Walkthrough

Walkthrough

CHANGELOG.md[Unreleased] 섹션에 dev-only 트랜지티브 의존성의 보안 취약점 수정 및 lockfile-only 변경 내용을 기록했습니다.

Changes

보안 감사 변경 기록

Layer / File(s) Summary
보안 변경 기록
CHANGELOG.md
postcssbrace-expansion 관련 취약점 수정이 security-audit 게이트를 통과하기 위한 lockfile-only 변경이며, 런타임 코드와 직접 의존성은 변경되지 않았음을 기록합니다.

Estimated code review effort: 1 (Trivial) | ~2 minutes

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed 제목이 postcss와 brace-expansion의 고위험 보안 취약점 해결이라는 핵심 변경을 정확히 요약합니다.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches 💡 1
🛠️ Fix failing CI checks 💡
  • Fix failing CI checks
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch claude/contextualwisdomlab-audit-governance-qyxe67

Comment @coderabbitai help to get the list of available commands.

claude added 2 commits July 30, 2026 04:45
…lock

The central trivy-fs filesystem scan flagged two advisories in
services/analysis-engine/uv.lock that fail the security gate:

- yt-dlp CVE-2026-55404 (HIGH): bumped 2026.6.9 -> 2026.7.4.
- setuptools CVE-2026-59890 (MEDIUM): bumped 81.0.0 -> 83.0.0, forced via a
  [tool.uv] constraint-dependencies entry (the plain resolver left it at the
  vulnerable pin).

setuptools>=83 is coupled through demucs 4.0.1 to torch>=2.13, so the lock also
advances torch 2.12.1 -> 2.13.0 and cuda-toolkit 13.0.2 -> 13.0.3.0; pinning
torch back makes the resolution unsatisfiable, so the ML runtime moves with the
security bump. All four are minor/patch upgrades validated by the python
(100% coverage) and build-baseline CI gates.

Verification:
- uv lock --upgrade-package setuptools --upgrade-package yt-dlp -> resolves;
  exactly 4 package versions change (yt-dlp, setuptools, torch, cuda-toolkit)
- torch 2.13 behavior is validated by CI (local install is not feasible behind
  the sandbox PyPI proxy)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Msz8Dni5zRaqPatNCmZJZ8
The prior remediation resolved yt-dlp to the patched 2026.7.4 in uv.lock but
left the pyproject floor at >=2026.6.9 — below the CVE-2026-55404 fix — so a
future re-resolution could silently drift back onto a vulnerable version. Raise
the direct-dependency floor to >=2026.7.4 so the constraint itself enforces the
patched release (matching the setuptools>=83.0.0 remediation pattern), and
regenerate uv.lock (resolution unchanged; still yt-dlp 2026.7.4, setuptools
83.0.0).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Msz8Dni5zRaqPatNCmZJZ8
@seonghobae

Copy link
Copy Markdown
Collaborator Author

Closing as closed-duplicate/superseded (security/CVE cluster) by autonomous product-completion loop.

Winner / disposition target: #727

Unique value from this cluster is consolidated there (projectId path guard + npm HIGH CVE pins + Foote novelty kernel sign). Remaining micro-duplicates do not land additional commercial readiness.

@seonghobae

Copy link
Copy Markdown
Collaborator Author

closed-closed-duplicate/superseded (security/CVE cluster) → #727

@seonghobae seonghobae closed this Jul 31, 2026
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.

2 participants