Skip to main content

publint CVE-2026-16631

| EUVDEUVD-2026-47863 LOW
Command Injection (CWE-77)
2026-07-23 cna@vuldb.com GHSA-vg6g-fgc8-7284
1.9
CVSS 4.0 · Vendor: vuldb

Severity by source

Vendor (vuldb) PRIMARY
1.9 MEDIUM
CVSS:4.0/AV:L/AC:L/AT:N/PR:L/UI:N/VC:L/VI:L/VA:L/SC:N/SI:N/SA:N/E:P/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
vuln.today AI
5.3 MEDIUM

Local-only attack vector and low privileges required because exploitation demands direct control over an internal API parameter in a local developer context; no scope change as impact is confined to the current process.

3.1 AV:L/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:L
4.0 AV:L/AC:L/AT:N/PR:L/UI:N/VC:L/VI:L/VA:L/SC:N/SI:N/SA:N

Primary rating from Vendor (vuldb).

CVSS VectorVendor: vuldb

Attack Vector
Local
Attack Complexity
Low
Privileges Required
Low
User Interaction
None
Scope
X

Lifecycle Timeline

2
Source Code Evidence Fetched
Jul 23, 2026 - 00:28 vuln.today
Analysis Generated
Jul 23, 2026 - 00:28 vuln.today

DescriptionCVE.org

A vulnerability was detected in publint up to 0.1.4. This impacts the function child_process.exec of the file src/node/pack.js of the component package-manager Command Handler. The manipulation results in os command injection. Attacking locally is a requirement. The exploit is now public and may be used. The patch is identified as adf2d9a09945fc98c85a2520a89f441d78b2dbd8. It is advisable to implement a patch to correct this issue. The project maintainer explains: "I think it's very rare for someone to use this package with untrusted input".

AnalysisAI

OS command injection in the @publint/pack component of publint (up to v0.1.4) allows a local attacker who controls the packageManager input to execute arbitrary shell commands via unsanitized string interpolation passed to child_process.exec. The affected functions packAsJson and pack in src/node/pack.js and src/node/pack-as-json.js construct shell command strings by concatenating the packageManager variable directly into template literals before passing them to util.promisify(cp.exec). A proof-of-concept exploit is publicly available (CVSS 4.0 E:P), though the maintainer explicitly states exploitation requires untrusted input usage, which is outside the package's intended use case and not confirmed actively exploited in the wild.

Technical ContextAI

publint is a Node.js npm package linting tool; its @publint/pack sub-package orchestrates invocations of package managers (npm, yarn, pnpm, bun) to produce pack outputs. The vulnerability (CWE-77: Command Injection) arises because pack.js and pack-as-json.js build the shell command via string interpolation - e.g., let command = \${packageManager} pack\`` - and execute it through Node.js's child_process.exec, which spawns a shell that interprets metacharacters. If the packageManager value contains shell metacharacters such as semicolons or pipes, the shell interprets them as command delimiters and executes the injected payload. The fix replaces child_process.exec string-based invocation with the tinyexec library using argument arrays (exec(command[0], command.slice(1), ...)), which bypasses shell interpretation entirely, and adds an allowlist validation restricting packageManager to the set ['npm', 'yarn', 'pnpm', 'bun']. No CPE strings are provided in source data; the package is an npm module for Node.js developer environments.

RemediationAI

Upgrade @publint/pack to the version incorporating commit adf2d9a09945fc98c85a2520a89f441d78b2dbd8, available via the upstream repository at https://github.com/publint/publint/commit/adf2d9a09945fc98c85a2520a89f441d78b2dbd8 and tracked in PR #238 (https://github.com/publint/publint/pull/238). The changeset marks this as a patch release for @publint/pack, but no specific tagged release version number is independently confirmed from available data - verify the exact version in the npm registry after the upstream release. If immediate upgrade is not feasible, the primary compensating control is to ensure the packageManager parameter passed to packAsJson or pack is never sourced from untrusted or user-controlled input; the maintainer's advisory confirms this is not the intended usage pattern. Additionally, restricting execution context to sandboxed CI environments limits the blast radius of any injected commands.

Share

CVE-2026-16631 vulnerability details – vuln.today

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy