Skip to content

chore(security): patch 1 Dependabot alert#1578

Closed
PMerlet wants to merge 1 commit into
mainfrom
security/2026-05-07
Closed

chore(security): patch 1 Dependabot alert#1578
PMerlet wants to merge 1 commit into
mainfrom
security/2026-05-07

Conversation

@PMerlet
Copy link
Copy Markdown
Member

@PMerlet PMerlet commented May 7, 2026

Summary

1 fixed, 6 ignored, 6 deferred, 1 resolution added, 6 resolutions removed. | label: 🔒 security applied

Fixed

Alert Package Ecosystem From → To Severity What was bumped
#340 fast-xml-parser npm 5.5.8 → 5.7.3 medium Yarn resolution **/fast-xml-parser: ">=5.7.0" (transitive via @aws-sdk/client-s3 → @aws-sdk/core → @aws-sdk/xml-builder); xml-builder pins fast-xml-parser exactly so a parent bump alone wouldn't close the alert

Ignored

Deferred

Skipped by the 7-day age gate (will be picked up next run): #344, #345, #346, #347, #348 (all uuid, 2 days old), #349 (ip-address, 0 days).

Resolutions added

  • feat: add collection hooks #340 fast-xml-parser → >=5.7.0 — placed at root package.json under resolutions, unconditional **/ form.
    • Parent chains tried: bumping @aws-sdk/client-s3 (^3.750.0 → latest 3.1044.0) would not deterministically close the alert because xml-builder pins fast-xml-parser to an exact version — only the latest xml-builder builds use 5.7.x. A parent bump is therefore non-deterministic; a resolution is required.
    • Workspace-level placement isn't applicable for Yarn classic in this repo (workspace-level resolutions aren't honored by Yarn 1).
    • Scoped form "@aws-sdk/xml-builder/fast-xml-parser": ">=5.7.0" was tried first and did not override the xml-builder request (Yarn 1 oddity with scoped-package paths). Fell back to the **/ form, which only matches one chain in this repo so the blast radius is narrow.

Resolutions removed

Audited every entry in root resolutions by temporarily removing it, running yarn install, and checking whether the natural resolution still satisfied the original pin. Removed when redundant (parent packages now pull a satisfying version on their own).

File Pinned package + version Reason
package.json axios: ^1.15.0 Redundant — natural resolution is 1.15.2
package.json follow-redirects: ^1.16.0 Redundant — natural resolution is 1.16.0
package.json hono: ^4.12.12 Redundant — natural resolution is 4.12.14
package.json @hono/node-server: ^1.19.13 Redundant — natural resolution is 1.19.14
package.json langsmith: ^0.5.18 Redundant — natural resolution is 0.5.21
package.json lodash-es: ^4.18.0 Redundant — natural resolution is 4.18.1

Pins kept (still needed): tar, lerna/**/glob, micromatch, semantic-release, qs, lodash. Removing semantic-release triggered a Yarn 1 Invariant Violation during install regardless of resolved version, so the pin was kept on stability grounds rather than vulnerability grounds.

Risks

  • fast-xml-parser 5.5.8 → 5.7.3: per the upstream changelog (5.6.x–5.7.x), the bump introduces strnum/@nodable/entities/path-expression-matcher runtime deps and tightens the XML escaping rules used by the builder (the patched code path). The parser API surface used by @aws-sdk/xml-builder for response parsing in @aws-sdk/client-s3 is unchanged. No expected behavior change beyond the patched vuln.
  • Removed redundant resolutions: no behavior change — every removed pin's natural resolution already satisfied the original constraint.

Manual testing

Covered by CI.

Validation

✅ CI green

- Bump fast-xml-parser to >=5.7.0 via Yarn resolution to address
  GHSA-gh4j-gqv2-49f6 (XML Comment/CDATA Injection in XMLBuilder).
  Pulled transitively via @aws-sdk/xml-builder in plugin-aws-s3.
- Remove 6 redundant root resolutions (axios, follow-redirects, hono,
  @hono/node-server, langsmith, lodash-es) whose natural resolutions
  now satisfy the original pin.
@qltysh
Copy link
Copy Markdown

qltysh Bot commented May 7, 2026

Qlty


Coverage Impact

This PR will not change total coverage.

🚦 See full report on Qlty Cloud »

🛟 Help
  • Diff Coverage: Coverage for added or modified lines of code (excludes deleted files). Learn more.

  • Total Coverage: Coverage for the whole repository, calculated as the sum of all File Coverage. Learn more.

  • File Coverage: Covered Lines divided by Covered Lines plus Missed Lines. (Excludes non-executable lines including blank lines and comments.)

    • Indirect Changes: Changes to File Coverage for files that were not modified in this PR. Learn more.

@PMerlet PMerlet closed this May 7, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants