Node’s Permission Model Is a Seat Belt, Not an AI Code Sandbox
AccessAllGPT source review and bounded local experiment, first run 2026-08-16 and refreshed 2026-08-21. We cloned Node.js tag v24.10.0 at immutable commit 9b72b88f4c4565687e3a8c4d8e1232f63a501e15, inspected its permission documentation, security threat model, environment initialization and 44 permission-named tests, and checked the official release index. We then downloaded Node.js v26.7.0 for Darwin arm64, verified its SHA256 against SHASUMS256.txt, reviewed the release note and permissions docs, and reran the local probe under both --permission-audit and --permission. The script creates only temporary fixture files, starts a loopback-only Python HTTP server, runs asserted scenarios in child Node processes, kills the server and removes the fixture. It tests direct filesystem reads and writes, relative-symlink traversal, loopback fetch, default child-process denial, an explicitly allowed non-Node child, an inherited file descriptor and the new audit-mode diagnostics path. We did not execute model-generated code, test a container or VM, probe Linux or Windows, attempt undisclosed bypasses, benchmark overhead, or perform a production security assessment. Node.js project statements, source observations, local results, independent NIST context and AccessAllGPT guidance are labeled separately.
Node.js v26.7.0 release note
Node.js project · RetrievedReviewed: Release headline and changelog bullet documenting --permission-audit audit mode behavior
Supports: The v26.7.0 release note records the documentation change that introduced audit-mode behavior for the permission model.
Permissions — Node.js v26.7.0 documentation
Node.js project · RetrievedReviewed: Operational modes, runtime API, audit-mode diagnostics-channel mapping and known issues
Supports: The v26.7.0 docs define enforce mode and audit mode, explain that audit mode logs violations without denying access, enumerate the diagnostics-channel names, and retain the symlink and existing-descriptor limitations.
SHASUMS256.txt for Node.js v26.7.0
Node.js project · RetrievedReviewed: node-v26.7.0-darwin-arm64.tar.gz checksum row
Supports: The downloaded Darwin arm64 binary was verified against the official SHA256 before local execution.
Scripts | npm Docs
npm · RetrievedReviewed: How npm handles the scripts field; shell execution behavior on POSIX and Windows
Supports: npm documents that scripts run through /bin/sh on POSIX systems and cmd.exe on Windows, which makes shell policy part of the agent boundary whenever an agent is allowed to invoke package scripts.
Permissions — Node.js v24.10.0 documentation
Node.js project · RetrievedReviewed: Scope and threat statement; stable status; restricted resources; filesystem allowlists; runtime API; npx behavior; constraints; symlink and inherited-file-descriptor limitations
Supports: The pinned documentation calls the permission model a seat belt for trusted code, explicitly says it does not protect against malicious code, lists the resources it restricts, says node:sqlite can access files outside node:fs checks, and documents relative-symlink and inherited-file-descriptor bypass paths.
Node.js security policy and threat model at v24.10.0
Node.js project · RetrievedReviewed: Responsible testing; trusted and untrusted elements; treatment of code Node.js is asked to run; inherited execution-user privileges
Supports: The project threat model trusts JavaScript, WASM, native code and dependencies that Node.js is asked to run and says that code inherits the privileges of the execution user. This is incompatible with treating the runtime alone as a hostile-code security boundary.
src,lib: stabilize permission model — pull request 56201
Node.js project on GitHub · RetrievedReviewed: Title; merge date; release lines; linked documentation history
Supports: The permission model moved to stable through a change merged on December 12, 2024 and documented for Node.js 22.13.0 and 23.5.0. Stable API status describes support maturity; it does not revise the project’s malicious-code exclusion.
Node.js v24.10.0 source tree at commit 9b72b88
Node.js project on GitHub · RetrievedReviewed: Permission initialization in src/env.cc; permission implementation; CLI documentation; permission tests for filesystem, symlinks, children, workers, addons, WASI, inspector, sqlite and file descriptors
Supports: AccessAllGPT cloned the immutable v24.10.0 source commit. Environment initialization denies addons, inspector, child processes, workers and WASI unless explicitly allowed, then applies filesystem read and write allowlists. The test inventory exercises those controls and known symlink behavior; it does not implement a network permission boundary.
Node.js release index
Node.js project · RetrievedReviewed: v24.10.0 release metadata and current release rows at retrieval
Supports: The official index dates v24.10.0 to October 8, 2025. AccessAllGPT used that exact installed runtime; this is a version-pinned result rather than a claim about every supported or future Node.js release.
Artificial Intelligence Risk Management Framework: Generative Artificial Intelligence Profile (NIST AI 600-1)
National Institute of Standards and Technology · RetrievedReviewed: Publication scope; generative-AI risk-management framing; risk mapping, measurement and management context
Supports: NIST presents the profile as voluntary, cross-sector guidance for incorporating trustworthiness considerations into design, development, use and evaluation. It supplies independent governance context for layered, measured controls; it does not evaluate Node.js or certify a sandbox architecture.