Skip to content

fix(deps): update dependency zx to v8.8.5 [security] - #285

Open
renovate[bot] wants to merge 1 commit into
masterfrom
renovate/npm-zx-vulnerability
Open

renovate[bot] wants to merge 1 commit into
masterfrom
renovate/npm-zx-vulnerability

Conversation

@renovate

@renovate renovate Bot commented Nov 21, 2025

Copy link
Copy Markdown
Contributor

This PR contains the following updates:

Package Change Age Adoption Passing Confidence
zx (source) 8.6.28.8.5 age adoption passing confidence

zx Uses Incorrectly-Resolved Name or Reference

CVE-2025-13437 / GHSA-w87r-vg9q-crqm

More information

Details

When zx is invoked with --prefer-local=, the CLI creates a symlink named ./node_modules pointing to /node_modules. Due to a logic error in src/cli.ts (linkNodeModules / cleanup), the function returns the target path instead of the alias (symlink path). The later cleanup routine removes what it received, which deletes the target directory itself. Result: zx can delete an external /node_modules outside the current working directory.

Severity

  • CVSS Score: 5.6 / 10 (Medium)
  • Vector String: CVSS:4.0/AV:L/AC:L/AT:N/PR:N/UI:A/VC:N/VI:H/VA:H/SC:N/SI:H/SA:H/E:U

References

This data is provided by the GitHub Advisory Database (CC-BY 4.0).


Release Notes

google/zx (zx)

v8.8.5: — Temporary Reservoir

Compare Source

This release fixes the issue, when zx flushes external node_modules on linking #​1348 #​1349 #​1355

Also globby@15.0.0 arrives here.

v8.8.4: — Flange Coupling

Compare Source

It's time. This release updates zx internals to make the ps API and related methods ProcessPromise.kill(), kill() work on Windows systems without wmic.
#​1344 webpod/ps#15

  1. WMIC will be missing in Windows 11 25H2 (kernel >= 26000)
  2. The windows-latest label in GitHub Actions will migrate from Windows Server 2022 to Windows Server 2025 beginning September 2, 2025 and finishing by September 30, 2025.

https://github.blog/changelog/2025-07-31-github-actions-new-apis-and-windows-latest-migration-notice/#windows-latest-image-label-migration

v8.8.3: — Sealing Gasket

Compare Source

Continues #​1339 to prevent injections via Proxy input or custom toString() manipulations.

v8.8.2: — Leaking Valve

Compare Source

Fixes potential cmd injection via kill() method for Windows platform. #​1337 #​1339. Affects the versions range 8.7.1...8.8.1.

v8.8.1: — Turbo Flush

Compare Source

We keep improving the projects internal infra to bring more stability, safety and performance for artifacts.

Featfixes

  • Applied flags filtration for CLI-driven deps install #​1308
  • Added kill() event logging #​1312
  • Set SIGTERM as kill() fallback signal #​1313
  • Allowed stdio() arg be an array #​1311
const p = $({halt: true})`cmd`
p.stdio([stream, 'ignore', 'pipe'])

Enhancements

v8.8.0: — Pressure Tested

Compare Source

This release enhances the coherence between the ProcessPromise and the Streams API, eliminating the need for certain script-level workarounds.

✨ New Features

unpipe() — Selectively stop piping

You can now call .unpipe() to stop data transfer from a source to a destination without closing any of the pair. #​1302

const p1 = $`echo foo && sleep 0.1 && echo bar && sleep 0.1 && echo baz && sleep 0.1 && echo qux`
const p2 = $`echo 1 && sleep 0.15 && echo 2 && sleep 0.1 && echo 3`
const p3 = $`cat`

p1.pipe(p3)
p2.pipe(p3)

setTimeout(() => p1.unpipe(p3), 150)

const { stdout } = await p3
// 'foo\n1\nbar\n2\n3\n'
Many-to-one piping

Multiple sources can now stream into a single destination. All sources complete before the destination closes. #​1300

const $h = $({ halt: true })
const p1 = $`echo foo`
const p2 = $h`echo a && sleep 0.1 && echo c && sleep 0.2 && echo e`
const p3 = $h`sleep 0.05 && echo b && sleep 0.1 && echo d`
const p4 = $`sleep 0.4 && echo bar`
const p5 = $h`cat`

await p1
p1.pipe(p5)
p2.pipe(p5)
p3.pipe(p5)
p4.pipe(p5)

const { stdout } = await p5.run()
// 'foo\na\nb\nc\nd\ne\nbar\n'
Piping from rejected processes

Processes that exit with errors can now still pipe their output. The internal recorder retains their stream, status, and exit code. #​1296

const p1 = $({ nothrow: true })`echo foo && exit 1`
await p1

const p2 = p1.pipe($({ nothrow: true })`cat`)
await p2

p1.output.toString() // 'foo\n'
p1.output.ok         // false
p1.output.exitCode   // 1

p2.output.toString() // 'foo\n'
p2.output.ok         // false
p2.output.exitCode   // 1
Components versions

Since zx bundles third-party libraries without their package.jsons, their versions weren’t previously visible. You can now access them via the versions static map — including zx itself. #​1298 #​1295

import { versions } from 'zx'

versions.zx     // 8.7.2
versions.chalk  // 5.4.1

v8.7.2: — Copper Crafter

Compare Source

Stability and customizability improvements

  • Handle nothrow option on ProcessPromise init stage #​1288
const o = await $({ nothrow: true })`\033`
o.ok      // false
o.cause   // Error
  • Handle _snapshot.killSignal value on kill() #​1287
const p = $({killSignal: 'SIGKILL'})`sleep 10`
await p.kill()
p.signal  // 'SIGKILL'
import { Fail } from 'zx'

Fail.EXIT_CODES['2'] = 'Custom error message'
Fail.formatErrorMessage = (err: Error, from: string): string =>
  `${err.message} (${from})`
import type { $, Options } from 'zx'

const custom$: $ = (pieces: TemplateStringsArray | Partial<Options>, ...args: any[]) => {
  // ... custom implementation
}

v8.7.1: — Pipe Whisperer

Compare Source

Continues v8.7.0: handles new ps() corner case and improves $.kill mechanics on Windows #​1266 #​1267 #​1269 webpod/ps#14

v8.7.0: — Solder Savior

Compare Source

Important fixes for annoying flaky bugs

kill() 🐞

We've found an interesting case #​1262

const p = $`sleep 1000`
const {pid} = p // 12345
await p.kill()

If we kill the process again, the result might be unexpected:

await ps({pid}) // {pid: 12345, ppid: 67890, command: 'another command', ...}
p.kill()

This happens because the pid may be reused by the system for another process, so we've added extra assertions to prevent indeterminacy:

p.kill()  // Error: Too late to kill the process.
p.abort() // Error: Too late to abort the process.

ps() 🐛

  • ps() uses wmic internally on Windows, it relies on fragile heuristics to parse the output. We have improved this logic to handle more format variants, but over time (in v9 maybe) we're planning to change the approach.

#​1256 #​1263 webpod/ps#12 webpod/ingrid#6

const [root] = await ps.lookup({ pid: process.pid })
assert.equal(root.pid, process.pid)

Configuration

📅 Schedule: (in timezone Asia/Shanghai)

  • Branch creation
    • At any time (no schedule defined)
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update again.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

@renovate renovate Bot added the renovate label Nov 21, 2025
@safedep

safedep Bot commented Nov 21, 2025

Copy link
Copy Markdown

SafeDep Report Summary

Green Malicious Packages Badge Green Vulnerable Packages Badge Green Risky License Badge

Package Details
Package Malware Vulnerability Risky License Report
icon @alloc/quick-lru @ 5.3.0
pnpm-lock.yaml
ok icon
ok icon
ok icon
🔗
icon @jridgewell/gen-mapping @ 0.3.13
pnpm-lock.yaml
ok icon
ok icon
ok icon
🔗
icon @jridgewell/sourcemap-codec @ 1.6.0
pnpm-lock.yaml
ok icon
ok icon
ok icon
🔗
icon @jridgewell/trace-mapping @ 0.3.31
pnpm-lock.yaml
ok icon
ok icon
ok icon
🔗
icon es-errors @ 1.3.0
pnpm-lock.yaml
ok icon
ok icon
ok icon
🔗
icon fast-glob @ 3.3.3
pnpm-lock.yaml
ok icon
ok icon
ok icon
🔗
icon fdir @ 6.5.0
pnpm-lock.yaml
ok icon
ok icon
ok icon
🔗
icon hasown @ 2.0.4
pnpm-lock.yaml
ok icon
ok icon
ok icon
🔗
icon is-core-module @ 2.16.2
pnpm-lock.yaml
ok icon
ok icon
ok icon
🔗
icon nanoid @ 3.3.19
pnpm-lock.yaml
ok icon
ok icon
ok icon
🔗
icon picomatch @ 4.0.7
pnpm-lock.yaml
ok icon
ok icon
ok icon
🔗
icon picomatch @ 2.3.2
pnpm-lock.yaml
ok icon
ok icon
ok icon
🔗
icon pirates @ 4.0.7
pnpm-lock.yaml
ok icon
ok icon
ok icon
🔗
icon postcss @ 8.5.28
pnpm-lock.yaml
ok icon
ok icon
ok icon
🔗
icon postcss-js @ 4.1.0
pnpm-lock.yaml
ok icon
ok icon
ok icon
🔗
icon postcss-selector-parser @ 6.1.4
pnpm-lock.yaml
ok icon
ok icon
ok icon
🔗
icon read-cache @ 1.0.2
pnpm-lock.yaml
ok icon
ok icon
ok icon
🔗
icon resolve @ 1.22.12
pnpm-lock.yaml
ok icon
ok icon
ok icon
🔗
icon sucrase @ 3.35.1
pnpm-lock.yaml
ok icon
ok icon
ok icon
🔗
icon tinyglobby @ 0.2.17
pnpm-lock.yaml
ok icon
ok icon
ok icon
🔗
icon yaml @ 2.9.1
pnpm-lock.yaml
ok icon
ok icon
ok icon
🔗
icon zx @ 8.8.5
pnpm-lock.yaml
ok icon
ok icon
ok icon
🔗

View complete scan results →

This report is generated by SafeDep GitHub App

@renovate
renovate Bot force-pushed the renovate/npm-zx-vulnerability branch from 7d037c4 to 0e392cc Compare December 3, 2025 18:45
@renovate
renovate Bot force-pushed the renovate/npm-zx-vulnerability branch from 0e392cc to 2c166c2 Compare February 12, 2026 11:51
@renovate
renovate Bot force-pushed the renovate/npm-zx-vulnerability branch from 2c166c2 to 4c88a4f Compare March 5, 2026 19:48
@renovate renovate Bot changed the title fix(deps): update dependency zx to v8.8.5 [security] fix(deps): update dependency zx to v8.8.5 [security] - autoclosed Mar 27, 2026
@renovate renovate Bot closed this Mar 27, 2026
@renovate
renovate Bot deleted the renovate/npm-zx-vulnerability branch March 27, 2026 00:54
@renovate renovate Bot changed the title fix(deps): update dependency zx to v8.8.5 [security] - autoclosed fix(deps): update dependency zx to v8.8.5 [security] Mar 30, 2026
@renovate renovate Bot reopened this Mar 30, 2026
@renovate
renovate Bot force-pushed the renovate/npm-zx-vulnerability branch 2 times, most recently from 4c88a4f to fc415a1 Compare March 30, 2026 22:13
@renovate
renovate Bot force-pushed the renovate/npm-zx-vulnerability branch from fc415a1 to ce96281 Compare April 8, 2026 14:41
@renovate renovate Bot changed the title fix(deps): update dependency zx to v8.8.5 [security] fix(deps): update dependency zx to v8.8.5 [security] - autoclosed Apr 27, 2026
@renovate renovate Bot closed this Apr 27, 2026
@renovate renovate Bot changed the title fix(deps): update dependency zx to v8.8.5 [security] - autoclosed fix(deps): update dependency zx to v8.8.5 [security] Apr 28, 2026
@renovate renovate Bot reopened this Apr 28, 2026
@renovate
renovate Bot force-pushed the renovate/npm-zx-vulnerability branch 2 times, most recently from ce96281 to f984706 Compare April 28, 2026 06:46
@renovate renovate Bot changed the title fix(deps): update dependency zx to v8.8.5 [security] fix(deps): update dependency zx to v8.8.5 [security] - autoclosed Apr 29, 2026
@renovate renovate Bot closed this Apr 29, 2026
@renovate renovate Bot changed the title fix(deps): update dependency zx to v8.8.5 [security] - autoclosed fix(deps): update dependency zx to v8.8.5 [security] Apr 29, 2026
@renovate renovate Bot reopened this Apr 29, 2026
@renovate
renovate Bot force-pushed the renovate/npm-zx-vulnerability branch 2 times, most recently from f984706 to c40317f Compare April 29, 2026 22:11
@renovate
renovate Bot force-pushed the renovate/npm-zx-vulnerability branch from c40317f to 0967a1b Compare May 12, 2026 17:43
@renovate
renovate Bot force-pushed the renovate/npm-zx-vulnerability branch from 0967a1b to fdeafb9 Compare May 28, 2026 18:36
@renovate
renovate Bot force-pushed the renovate/npm-zx-vulnerability branch 3 times, most recently from 6afbdac to cbed6e9 Compare July 30, 2026 17:44
@renovate
renovate Bot force-pushed the renovate/npm-zx-vulnerability branch from cbed6e9 to 5b78451 Compare August 11, 2026 22:42
@renovate
renovate Bot force-pushed the renovate/npm-zx-vulnerability branch from 5b78451 to 1c75497 Compare August 26, 2026 20:43
@renovate
renovate Bot force-pushed the renovate/npm-zx-vulnerability branch 3 times, most recently from 164947b to c914d97 Compare September 3, 2026 21:39
@renovate
renovate Bot force-pushed the renovate/npm-zx-vulnerability branch from c914d97 to 901feb9 Compare September 10, 2026 21:34
@renovate
renovate Bot force-pushed the renovate/npm-zx-vulnerability branch from 901feb9 to c0cb9b2 Compare September 15, 2026 20:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants