Severity by source
AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:H
Exploitation needs local write access to the backups directory (AV:L, PR:L) with no user interaction; the primitive deletes files, giving high integrity and availability impact but no confidentiality loss.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
4DescriptionCVE.org
Network-AI is a TypeScript/Node.js multi-agent orchestrator. Prior to version 5.12.2, EnvironmentManager.listBackups() reads each backup's _manifest.json and trusts the manifest's path field. EnvironmentManager.pruneBackups() later passes that trusted entry.path directly to rmSync(entry.path, { recursive: true, force: true }). An attacker who can place or modify a manifest inside data/<env>/.backups/<name>/_manifest.json can cause network-ai env backup prune --env <env> --keep <n> or any code path invoking pruneBackups() to recursively delete an arbitrary path accessible to the Network-AI process user. This is fixed in v5.12.2. pruneBackups() no longer passes entry.path from the on-disk manifest to rmSync. The deletion path is recomputed from a format-validated entry.backupId, and a dirname containment check confines deletion to exactly one level under the backups directory. A poisoned manifest (e.g. "path": "/") is now inert.
AnalysisAI
Arbitrary recursive file deletion in Network-AI (npm package network-ai) before v5.12.2 allows a local attacker who can write into an environment's backup directory to delete any path the process user can access. EnvironmentManager.pruneBackups() trusts the path field of an attacker-controllable _manifest.json and feeds it straight into rmSync(..., { recursive: true, force: true }), so a poisoned manifest such as "path": "/" gets deleted when network-ai env backup prune runs. Publicly available exploit code exists (a working PoC ships in the GHSA advisory); there is no public exploit identified as actively exploited and it is not in CISA KEV.
Technical ContextAI
Network-AI is a TypeScript/Node.js multi-agent orchestrator (CPE cpe:2.3:a:jovancoding:network-ai) that persists per-environment state under data/<env>/ and keeps rotating backups in data/<env>/.backups/<name>/, each described by a _manifest.json. The root cause is CWE-22 (Improper Limitation of a Pathname to a Restricted Directory): listBackups() reads each on-disk manifest and deserializes it into a BackupEntry without validating the path field, then pruneBackups() uses that untrusted entry.path as the deletion target rather than deriving the path from a trusted identifier. Because Node's rmSync with { recursive: true, force: true } silently removes whatever path it is given (and errors are swallowed by an empty catch), the manifest's path becomes a direct filesystem-write/delete primitive. The v5.12.2 fix recomputes the deletion path from a format-validated entry.backupId and adds a dirname(...) === backupsDir containment check so deletion is confined to exactly one level under the backups directory.
RemediationAI
Vendor-released patch: upgrade to Network-AI 5.12.2 (npm network-ai@5.12.2), which recomputes the deletion path from a validated backupId and enforces a dirname containment check under the backups directory, rendering a poisoned "path": "/" manifest inert; the fix is delivered in commit a59c13a1f0ce0e8a0779a90343eef92fac5ab4c3 (https://github.com/Jovancoding/Network-AI/commit/a59c13a1f0ce0e8a0779a90343eef92fac5ab4c3) and release v5.12.2 (https://github.com/Jovancoding/Network-AI/releases/tag/v5.12.2). Note that 5.12.2 also bundles four other hardening fixes (GHSA-6x2m-p4xp-wg22, GHSA-48x2-6pr9-2jjf, GHSA-jvcm-f35g-w78p, GHSA-mxjx-28vx-xjjj), so upgrading is the clearly preferred action. If you cannot upgrade immediately, restrict write permissions on data/<env>/.backups/ so only the trusted Network-AI process user can create or modify _manifest.json files (side effect: any tooling that legitimately writes backups must run as that user), avoid running network-ai env backup prune while the backup directory is exposed to other accounts, and run the process under a low-privilege, filesystem-scoped user so an arbitrary-delete cannot reach sensitive paths (trade-off: does not stop deletion of files that user still owns).
A vulnerability in the NuPoint Unified Messaging (NPM) component of Mitel MiCollab through 9.8 SP1 FP2 (9.8.1.201) could
FortiOS and FortiProxy contain an authentication bypass via the Node.js websocket module allowing unauthenticated remote
Denial of service against HTTP/2 server implementations allows remote unauthenticated attackers to exhaust server resour
Eval injection vulnerability in the internals.batch function in lib/batch.js in the bassmaster plugin before 1.5.2 for t
Flowise version 3.0.5 contains a remote code execution vulnerability in the CustomMCP node. The mcpServerConfig paramete
Node.js 8.5.0 before 8.6.0 allows remote attackers to access unintended files, because a change to ".." handling was inc
An issue was discovered in the node-serialize package 0.0.4 for Node.js. Rated critical severity (CVSS 9.8), this vulner
OpenSSL before 0.9.8za, 1.0.0 before 1.0.0m, and 1.0.1 before 1.0.1h does not properly restrict processing of ChangeCiph
Directory traversal vulnerability in the st module before 0.2.5 for Node.js allows remote attackers to read arbitrary fi
Multiple SQL injection vulnerabilities in the Manage Accounts page in the AccountManagement.asmx service in the Solarwin
The JS-YAML module before 2.0.5 for Node.js parses input without properly considering the unsafe !!js/function tag, whic
The AES-NI implementation in OpenSSL before 1.0.1t and 1.0.2 before 1.0.2h does not consider memory allocation during a
Same weakness CWE-22 – Path Traversal
View allSame technique Path Traversal
View allShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-46034