Skip to content

fix: upgrade yeoman-environment to v6 to resolve 6 high-severity tar CVEs - #80

Merged
MichaelGoberling merged 1 commit into
adobe:mainfrom
thedoc31:casalino-patch-1
May 21, 2026
Merged

fix: upgrade yeoman-environment to v6 to resolve 6 high-severity tar CVEs#80
MichaelGoberling merged 1 commit into
adobe:mainfrom
thedoc31:casalino-patch-1

Conversation

@thedoc31

Copy link
Copy Markdown
Contributor

Summary

Upgrades yeoman-environment from ^4.2.1 to ^6.1.0 in package.json. This is a one-line dependency change that eliminates all 7 open vulnerability findings (6 high, 1 low) reported by npm audit.

Root cause

The v4 dependency chain pulled in tar <=7.5.10 through:

yeoman-environment@4.x → fly-import@0.4.1 → @npmcli/arborist@7.x → cacache@18.x → tar@6.2.1

tar@6.2.1 carries 6 high-severity path traversal/symlink CVEs. The v6 chain resolves cleanly:

yeoman-environment@6.x → fly-import@1.0.0 → @npmcli/arborist@9.x → cacache@20.x → tar@7.5.15 ✓

CVEs resolved

CVE CVSS Description
CVE-2026-23950 8.8 High Race condition via Unicode ligature (ß/ss) collisions on macOS APFS — symlink poisoning
CVE-2026-23745 8.2 High Arbitrary file overwrite and symlink poisoning via insufficient path sanitization
CVE-2026-24842 8.2 High Arbitrary file creation/overwrite via hardlink path traversal
CVE-2026-29786 8.2 High Hardlink path traversal via drive-relative linkpath (e.g. C:../target.txt)
CVE-2026-31802 8.2 High Symlink path traversal via drive-relative linkpath
CVE-2026-26960 7.1 High Arbitrary file read/write via hardlink target escape through symlink chain
CVE-2026-24001 2.7 Low DoS / infinite loop in diff parsePatch/applyPatch via line break chars in filenames

API compatibility analysis

The three yeoman-environment methods used in src/commands/templates/install.js were verified by direct source inspection of both v4.4.3 and v6.1.0:

  • createEnv() — identical export signature in both versions
  • env.instantiate(constructor, { options: {...} }) — present in both; the { options: {...} } call form is handled by an explicit backward-compatibility branch in v6's getInstantiateOptions, identical logic to v4
  • env.runGenerator(gen) — body is character-for-character identical in both versions
  • env.options property assignment — plain writable property in both versions

Old-style generators (without queueTasks()) run via the compatibilityMode = 'v4' path in both versions, which is identical.

Validation

  • npm audit after upgrade: 0 vulnerabilities (was 17: 2 low, 15 high)
  • Full test suite on Node 24 with NODE_OPTIONS=--experimental-vm-modules: 151/151 tests passing, 100% coverage across all files
  • npm install result: 46 packages added, 110 removed, 110 changed — consistent with the dependency chain swap

Upgrades yeoman-environment from ^4.2.1 to ^6.1.0. The v4 dependency
chain pulled in tar <=7.5.10 (via fly-import → @npmcli/arborist →
cacache), which carried 6 high-severity CVEs. v6 resolves to tar 7.5.15
through an updated arborist/cacache chain, eliminating all findings.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@codecov

codecov Bot commented May 15, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@pru55e11

Copy link
Copy Markdown

/review

@MichaelGoberling

Copy link
Copy Markdown
Contributor

Thanks for the contribution @thedoc31!

Going to merge this, and will look at doing a release shortly

@MichaelGoberling
MichaelGoberling merged commit dec94c7 into adobe:main May 21, 2026
11 checks passed
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.

3 participants