Skip to content

fix: patch vulnerable website dependencies - #2788

Merged
Rana Singh (ranadeepsingh) merged 1 commit into
microsoft:masterfrom
ranadeepsingh:fix/dependency-vulnerabilities-20261023
Oct 23, 2026
Merged

Rana Singh (ranadeepsingh) merged 1 commit into
microsoft:masterfrom
ranadeepsingh:fix/dependency-vulnerabilities-20261023

Conversation

@ranadeepsingh

@ranadeepsingh Rana Singh (ranadeepsingh) commented Oct 23, 2026 •

Copy link
Copy Markdown
Collaborator

The website dependency graph includes packages with command-injection, credential-leak, and denial-of-service advisories. This PR upgrades 11 affected packages, addressing 22 of the 23 open Dependabot alerts, without changing Docusaurus or the Python/Spark environment.

Agreed residual risk: retain braces@3.0.3, which has no published fix for GHSA-vfj7-8cjw-p6xm. The requested scope explicitly accepts leaving it unchanged. This PR does not suppress that alert or claim a clean audit.

Related Issues/PRs

Dependency graph. No linked issue is closed by this PR.

What changes are proposed in this pull request?

  • Apply targeted security overrides and regenerate the npm lockfile, retaining Docusaurus 3.10.2.
  • Bundle KaTeX CSS from the same installed package as the math renderer instead of loading an older CDN stylesheet.
  • Add regressions for shell quoting and inherited math-rendering options, plus CSS optimization and Tinypool worker-data compatibility checks.
  • Document the unresolved braces advisory. environment.yml, JVM dependencies, and CI workflows are unchanged.

How is this patch tested?

  • I have written tests (not required for typo or doc fix) and confirmed the proposed feature/bug-fix/change works.

Commands run from website unless noted:

  • Baseline npm ci --ignore-scripts --no-fund --no-audit and npm test: passed, 37 tests.
  • Baseline node --test test/dependencySecurity.test.js: shell-quote and KaTeX assertions failed as expected on the original dependencies; CSS compatibility passed.
  • npm ci --no-audit --no-fund: passed with the updated lockfile.
  • npm test: passed, 41 tests, zero skips. Includes direct worker-thread execution using the Docusaurus worker-data contract.
  • npm ls --all --json: passed; no invalid or unmet dependencies.
  • npm audit --json: initially 56 affected dependency nodes (17 critical, 20 high, 15 moderate, 4 low). After updates, only GHSA-vfj7-8cjw-p6xm remains, propagated through 29 high-severity dependency nodes; exit status remains nonzero.
  • git diff --check from the repository root: passed.
  • Website documentation generation: passed using the repository docgen WebsiteChannel.
  • npm run build: passed, 1,988 generated HTML pages. Rendered math, bundled KaTeX CSS, and bundled WOFF2 fonts are present. The initial Windows run failed on three generated MDX pages; each parses successfully with LF instead of CRLF line endings. Only untracked generated docs were normalized to match Linux CI.
  • Full Azure Pipelines build 242350922: passed, all 59 jobs succeeded, against refs/pull/2788/merge, reason=pullRequest. Published results: 3,738 passed, 22 skipped, zero failures/incomplete tests across 377 completed test runs. All 22 skipped test identities and outcomes match the successful exact-base build 242290625.
  • The base build has 54 additional Databricks/Fabric notebook tests. The PR's impact-selection log explicitly sets all notebook E2E flags to false for these five website-only files; these are not hidden test failures or unvalidated website paths.
  • GitHub Website Deploy build, Dependency Review, CodeQL language analyses, dead-link scan, and title check: passed on 80bde771c1327a6de40d6872a053d49760725145. Website deployment itself is correctly skipped for a PR.
  • Copilot review: covers the exact head, zero open findings and zero suppressed findings. Both requested evidence items (production build and CI) are now complete.
  • Get-PrReadiness.ps1 -PullRequest 2788 -WaitForReview -TimeoutMinutes 5: passed; automated review covers the head and no unresolved/suppressed findings remain.
  • Get-PrReadiness.ps1 -PullRequest 2788 -RunPipeline -ExpectedHeadSha 80bde771c1327a6de40d6872a053d49760725145 -ExpectedBaseSha 71346cf992d489007d133a1a9f83c325e7694373: passed; evidence complete and remote engineering gates clear, zero failed/pending/missing checks. The current script requires review-wait and pipeline switches in separate invocations.

Final integration/provenance: head 80bde771c1327a6de40d6872a053d49760725145 is one commit ahead and zero behind current master 71346cf992d489007d133a1a9f83c325e7694373. Azure tested merge 367bbe650b1c4818a9af5a6e77d6b1b309818b6f, whose parents are exactly those base/head SHAs. Required check issuers are Azure Pipelines and GitHub Actions. Engineering validation is complete for the agreed scope; human approval is still required.

Scala/Python compilation, codegen, and port-runtime replay are not applicable to this website-only change. The complete authenticated Dependabot export contains 23 open alerts, all in website/package-lock.json. Every installed version in the updated lockfile was compared with those affected ranges: 22 alerts are addressed, and only alert 207 (braces) remains.

Does this PR change any dependencies?

  • No. You can skip this section.
  • Yes. Make sure the dependencies are resolved correctly, and list changes here.
Package Before After Advisory coverage
tinypool 1.1.1 2.1.2 GHSA-5gmw-xhrv-c9v3, GHSA-85c8-ppgw-ccpr
shell-quote 1.10.0 1.12.0 GHSA-pqg4-j6r4-53mv
fast-uri 3.1.5 3.1.8 GHSA-5jgf-p345-68v8, GHSA-f65p-4m7j-42xc, GHSA-fph4-wmhf-6fwf, GHSA-jqff-g426-hqxp, GHSA-qw65-cvwx-89v3, GHSA-hrr3-gc8f-f4qj
brace-expansion 1.1.18 1.1.21 GHSA-q2hr-2g5m-vwhr, GHSA-qhr7-859c-m2p7, GHSA-6j4f-fj2g-mc7p
follow-redirects 1.16.0 1.16.1 GHSA-q3jh-wrc6-jgq8, GHSA-8r9p-f939-6h3c
http-cache-semantics 4.2.0 4.3.0 GHSA-ch52-4w7c-c8xp
js-yaml 4.3.1 4.3.2 GHSA-2883-xcg3-v3hh
svgo 3.3.4 3.3.5 GHSA-w27v-7q3p-w38r, GHSA-4vpr-x523-8j87
qs 6.15.3 / 6.16.0 6.16.1 GHSA-x5fp-wj9c-mxmx, GHSA-4mjr-xmp4-gh2g
postcss-selector-parser 6.1.4 / 7.1.4 7.1.6 GHSA-rj75-hqrm-r3gf
katex 0.16.47 0.18.10 GHSA-238p-pmpm-9mq7

braces@3.0.3 is intentionally listed as unresolved, not fixed or waived. Replacing its glob-parser API or maintaining a private fork is not a safe drop-in dependency update.

Does this PR add a new feature? If so, have you added samples on website?

  • No. You can skip this section.
  • Yes. Make sure you have added samples following below steps.
  1. Find the corresponding markdown file for your new feature in website/docs/documentation folder.
    Make sure you choose the correct class estimators/transformers and namespace.
  2. Follow the pattern in markdown file and add another section for your new API, including pyspark, scala (and .NET potentially) samples.
  3. Make sure the DocTable points to correct API link.
  4. Navigate to website folder, and run npm start to make sure the website renders correctly.
  5. Don't forget to add <!--pytest-codeblocks:cont--> before each python code blocks to enable auto-tests for python samples.
  6. Make sure the WebsiteSamplesTests job pass in the pipeline.

## Summary
Update eleven website dependencies to patched releases and add security and
compatibility regressions. Bundle KaTeX CSS from the renderer package.

## Prompting Intent
Fix vulnerabilities shown in the SynapseML GitHub dependency graph, create a
PR, and validate it through the SynapseML PR loop. The user explicitly scoped
the work to the website dependency list and excluded environment.yml.

## Linked Sources
- https://github.com/microsoft/SynapseML/network/dependencies
- GHSA-pqg4-j6r4-53mv
- GHSA-238p-pmpm-9mq7
- GHSA-5gmw-xhrv-c9v3
- GHSA-85c8-ppgw-ccpr
- GHSA-vfj7-8cjw-p6xm
- Remaining advisory identifiers are recorded in the PR's dependency table.

## Rationale
Retain Docusaurus 3.10.2 and use targeted npm overrides instead of the
downgrades proposed by npm audit fix --force. Exercise the existing CSS
pipeline and worker-data contract where patched versions cross major lines.
The shell-quote and KaTeX regressions fail with the original lockfile.
Do not suppress the remaining braces advisory: no patched release exists.
Dependency-only change; no ADO feature task applies.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: ceb8ba3c-97f0-4fcf-ae29-a2c9a40c103d
@ranadeepsingh Rana Singh (ranadeepsingh) added the dependencies Pull requests that update a dependency file label Oct 23, 2026
Copilot AI balanced review requested due to automatic review settings October 23, 2026 07:04
@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
There may be pipelines that require an authorized user to comment /azp run to run.

@github-actions

Copy link
Copy Markdown

Hey Rana Singh (@ranadeepsingh) 👋!
Thank you so much for contributing to our repository 🙌.
Someone from SynapseML Team will be reviewing this pull request soon.

We use semantic commit messages to streamline the release process.
Before your pull request can be merged, you should make sure your first commit and PR title start with a semantic prefix.
This helps us to create release messages and credit you for your hard work!

Examples of commit messages with semantic prefixes:

  • fix: Fix LightGBM crashes with empty partitions
  • feat: Make HTTP on Spark back-offs configurable
  • docs: Update Spark Serving usage
  • build: Add codecov support
  • perf: improve LightGBM memory usage
  • refactor: make python code generation rely on classes
  • style: Remove nulls from CNTKModel
  • test: Add test coverage for CNTKModel

To test your commit locally, please follow our guild on building from source.
Check out the developer guide for additional guidance on testing your change.

@ranadeepsingh

Copy link
Copy Markdown
Collaborator Author

/azp run

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 1 pipeline(s).

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

Cross-major dependency overrides require human review supported by a completed production website build and successful CI evidence, neither of which is supplied yet.

No open issues 🎉

1 file not reviewed
  • website/package-lock.json: Generated file
What changed in this PR

This PR updates vulnerable dependencies in SynapseML’s documentation website while retaining Docusaurus 3.10.2 and leaving Python/Spark dependencies unchanged.

Changes:

  • Updates 11 affected packages through targeted overrides and lockfile regeneration.
  • Bundles KaTeX CSS with the installed renderer and adds security and compatibility regression tests.
  • Documents the unresolved braces advisory without claiming a clean audit.
File Description
website/​test/​dependencySecurity.test.js Adds shell-quoting, math-rendering, CSS, and worker-pool regression checks.
website/​README.md Documents security validation and the remaining upstream advisory.
website/​package.json Adds KaTeX directly and updates security overrides.
website/​package-lock.json Locks patched dependencies and consolidates overridden packages.
website/​docusaurus.config.js Replaces CDN KaTeX CSS with the installed package’s stylesheet.

Review effort: Balanced

@ranadeepsingh

Copy link
Copy Markdown
Collaborator Author

Current-head validation update (80bde77): npm ci, npm ls --all, and all 41 website tests passed. The complete production build passed and generated 1,988 HTML pages; rendered math, bundled KaTeX CSS, and WOFF2 fonts were verified. The cross-major compatibility checks cover the Docusaurus CSS preset and real Tinypool worker execution. All 23 authenticated Dependabot alerts were reconciled against the new lockfile: 22 are addressed; alert 207 (braces, GHSA-vfj7-8cjw-p6xm) remains because no patched release exists. Azure build 242350922 is running against refs/pull/2788/merge. No environment.yml or CI workflow changes.

@ranadeepsingh

Copy link
Copy Markdown
Collaborator Author

Final validation for 80bde77: Azure build 242350922 passed all 59 jobs. Published results are 3,738 passed and 22 skipped; every skipped test identity/outcome matches the successful exact-base build. Notebook E2E was explicitly excluded by the existing website-only impact rules. All 41 website tests, the local 1,988-page production build, and the GitHub website build passed. The exact-head Copilot review has no open or suppressed findings, and the final readiness snapshot has no failed, pending, or missing checks. The branch is current with master; merge provenance and check issuers were verified. As agreed, braces@3.0.3 remains unchanged and its advisory remains visible. All other requested minimums are met. Engineering validation is complete for this scope; required human approval remains.

@ranadeepsingh
Rana Singh (ranadeepsingh) merged commit acd6a8c into microsoft:master Oct 23, 2026
74 checks passed
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.

3 participants