# Risk map — nrwl/nx

> Canonical page: https://codevetter.com/unpack/nx/risk-map

# Risk map — nrwl/nx

Scanned commit bedd602304d762fd160b5f2a6a81990aa1903ccb (2026-10-02). Generated by codevetter codevetter 1.15.0 on 2026-10-02.

Source inspection; upstream code and tests were not executed.

The security-sensitive boundaries are workspace-supplied executable code, shell commands, daemon messages, native module loading, and replayed cache artifacts. Several inspected paths contain explicit containment and ownership safeguards. The observations below distinguish implemented behavior from hypotheses; they are not confirmed vulnerabilities. One inspected test contains an ineffective assertion, and native/testing module boundaries require particular care.
- run-commands launches command strings with shell:true and inherited stdin; calculateCwd accepts absolute paths, and processEnv combines process/local environments with executor overrides. Workspace task configuration therefore controls execution beyond the repository directory. — [packages/nx/src/executors/run-commands/running-tasks.ts#L432-454](https://github.com/nrwl/nx/blob/bedd602304d762fd160b5f2a6a81990aa1903ccb/packages/nx/src/executors/run-commands/running-tasks.ts#L432-L454) [packages/nx/src/executors/run-commands/running-tasks.ts#L705-748](https://github.com/nrwl/nx/blob/bedd602304d762fd160b5f2a6a81990aa1903ccb/packages/nx/src/executors/run-commands/running-tasks.ts#L705-L748)
- Generator dry-run still invokes the plugin implementation before skipping flushChanges and the returned callback; FsTree normalization and flushChanges use joined paths. Dry-run is a host-write preview, not an execution sandbox for arbitrary generator code. — [packages/nx/src/command-line/generate/generate.ts#L401-428](https://github.com/nrwl/nx/blob/bedd602304d762fd160b5f2a6a81990aa1903ccb/packages/nx/src/command-line/generate/generate.ts#L401-L428) [packages/nx/src/generators/tree.ts#L376-394](https://github.com/nrwl/nx/blob/bedd602304d762fd160b5f2a6a81990aa1903ccb/packages/nx/src/generators/tree.ts#L376-L394) [packages/nx/src/generators/tree.ts#L438-450](https://github.com/nrwl/nx/blob/bedd602304d762fd160b5f2a6a81990aa1903ccb/packages/nx/src/generators/tree.ts#L438-L450)
- The self-hosted HTTP cache reads a bearer token and server URL from environment variables and explicitly accepts invalid certificates when NODE_TLS_REJECT_UNAUTHORIZED=0; the TypeScript factory emits an insecure-TLS warning for that setting. — [packages/nx/src/native/cache/http_remote_cache.rs#L26-65](https://github.com/nrwl/nx/blob/bedd602304d762fd160b5f2a6a81990aa1903ccb/packages/nx/src/native/cache/http_remote_cache.rs#L26-L65) [packages/nx/src/tasks-runner/cache.ts#L372-388](https://github.com/nrwl/nx/blob/bedd602304d762fd160b5f2a6a81990aa1903ccb/packages/nx/src/tasks-runner/cache.ts#L372-L388)
- Hypothesis: large remote artifacts could create memory or disk pressure because retrieval buffers the full response and extraction accumulates metadata content before returning. The inspected path enforces archive containment, but resource-exhaustion behavior was not measured. (inferred) — [packages/nx/src/native/cache/http_remote_cache.rs#L190-223](https://github.com/nrwl/nx/blob/bedd602304d762fd160b5f2a6a81990aa1903ccb/packages/nx/src/native/cache/http_remote_cache.rs#L190-L223) [packages/nx/src/native/cache/http_remote_cache.rs#L236-275](https://github.com/nrwl/nx/blob/bedd602304d762fd160b5f2a6a81990aa1903ccb/packages/nx/src/native/cache/http_remote_cache.rs#L236-L275)
- Shared artifact/database paths are a replay trust boundary: establishUserRoot checks private owned directories and probes both leaves with exclusive random files; native cache output normalization rejects declared paths outside the workspace. — [packages/nx/src/utils/cache-directory.ts#L135-165](https://github.com/nrwl/nx/blob/bedd602304d762fd160b5f2a6a81990aa1903ccb/packages/nx/src/utils/cache-directory.ts#L135-L165) [packages/nx/src/utils/cache-directory.ts#L179-196](https://github.com/nrwl/nx/blob/bedd602304d762fd160b5f2a6a81990aa1903ccb/packages/nx/src/utils/cache-directory.ts#L179-L196) [packages/nx/src/native/cache/cache.rs#L777-799](https://github.com/nrwl/nx/blob/bedd602304d762fd160b5f2a6a81990aa1903ccb/packages/nx/src/native/cache/cache.rs#L777-L799)
- Daemon input parsing checks workspace identity for recognized messages and closes malformed streams; plugin worker startup refusals can instead move plugins into the main process, with an explicit warning that isolation-dependent plugins may misbehave. — [packages/nx/src/daemon/server/server.ts#L216-232](https://github.com/nrwl/nx/blob/bedd602304d762fd160b5f2a6a81990aa1903ccb/packages/nx/src/daemon/server/server.ts#L216-L232) [packages/nx/src/daemon/server/server.ts#L282-310](https://github.com/nrwl/nx/blob/bedd602304d762fd160b5f2a6a81990aa1903ccb/packages/nx/src/daemon/server/server.ts#L282-L310) [packages/nx/src/project-graph/plugins/get-plugins.ts#L105-152](https://github.com/nrwl/nx/blob/bedd602304d762fd160b5f2a6a81990aa1903ccb/packages/nx/src/project-graph/plugins/get-plugins.ts#L105-L152)
- Native loading hooks Module._load and caches binaries outside their installed location; Vitest configuration explicitly warns that native bindings are unsafe across worker threads and duplicate binding heaps can kill a worker. Preserve loader identity and process-pool assumptions together. — [packages/nx/src/native/index.js#L84-118](https://github.com/nrwl/nx/blob/bedd602304d762fd160b5f2a6a81990aa1903ccb/packages/nx/src/native/index.js#L84-L118) [packages/nx/vitest.config.mts#L35-58](https://github.com/nrwl/nx/blob/bedd602304d762fd160b5f2a6a81990aa1903ccb/packages/nx/vitest.config.mts#L35-L58)
- The cache-size test for multiple decimal points references .toThrow without calling it, so that assertion does not verify rejection; the neighboring invalid-number test correctly calls .toThrow(). This is a source-observed test defect, not an observed runtime failure. — [packages/nx/src/tasks-runner/cache.spec.ts#L36-46](https://github.com/nrwl/nx/blob/bedd602304d762fd160b5f2a6a81990aa1903ccb/packages/nx/src/tasks-runner/cache.spec.ts#L36-L46)

Every claim links to its cited files at the pinned commit. Citations identify source evidence; they do not establish runtime correctness. Independent CodeVetter scan — not reviewed by upstream maintainers.

## Public product links

- [CodeVetter](https://codevetter.com/)
- [Download](https://codevetter.com/download)
- [Documentation](https://codevetter.com/docs/)
- [Source](https://github.com/Codevetter/codevetter)
