
Security News
Attackers Are Hunting High-Impact Node.js Maintainers in a Coordinated Social Engineering Campaign
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.
@douglance/hotbox
Advanced tools
Run any Node.js project safely in a hardened Docker sandbox with automatic package manager detection via ni.
ni to detect and work with npm/pnpm/yarn/bun--no-networknpm install -g @douglance/hotbox
# or
yarn global add @douglance/hotbox
# or
pnpm add -g @douglance/hotbox
# Run with auto-detected port (app's PORT env or 3000)
hotbox
# Use a specific port (same on host and container)
hotbox -p 8080
# Map different ports (host:container)
hotbox -p 9000:3000
# No network (air-gapped). Requires preinstalled node_modules in your project.
hotbox -n
# Paranoid mode (maximum security: no network, stricter limits)
hotbox --paranoid
# Custom resource limits
hotbox --mem 1g --cpus 1.0 --pids 150
# Allow write access (e.g., for codegen)
hotbox --rw
# Use specific Node version
hotbox --node-version 18
# Auto-detects Node 20 from package.json engines.node field
hotbox
# Custom Docker image (overrides version detection)
hotbox -i node:22-alpine
# Pass environment variables
hotbox --env API_KEY=secret --env DEBUG=true
# See all options
hotbox --help
--rw)ni from lockfiles:
package-lock.json → npmyarn.lock → yarnpnpm-lock.yaml → pnpmbun.lockb → bunni start → ni dev → node index.js fallback/tmpnode user| Feature | Description |
|---|---|
| Read-only mount | Source code mounted as read-only by default |
| Isolated deps | node_modules in ephemeral Docker volume |
| Dropped capabilities | --cap-drop ALL removes all Linux capabilities |
| No new privileges | Prevents privilege escalation |
| Resource limits | CPU, memory, PIDs constraints |
| Network isolation | Optional --no-network for air-gapped execution |
| Non-root user | Runs as node user, not root |
| Seccomp/AppArmor | Supply HOTBOX_SECCOMP/HOTBOX_APPARMOR to enforce syscall/LSM policies |
| Noexec tmpfs | noexec everywhere except workdir to reduce RCE surface |
| IPC/UTS isolation | Container-level IPC and UTS namespaces |
| ulimit controls | File descriptor and process limits enforced |
| Supply chain hardening | SHA256 verification of binaries, pinned ni version |
| Prototype pollution protection | NODE_OPTIONS=--disable-proto=throw by default |
| Alternative runtimes | Support for gVisor/kata via HOTBOX_RUNTIME env var |
| Option | Description | Default |
|---|---|---|
-p, --port | Port number or host:container mapping | Auto-detect (app's port) |
-n, --no-network | Disable networking | false |
--paranoid | Maximum security mode (no network, 256m RAM, 0.25 CPU, 100 PIDs) | false |
--mem | Memory limit | 512m |
--cpus | CPU cores limit | 0.5 |
--pids | Process IDs limit | 200 |
-i, --image | Docker base image (overrides --node-version) | - |
--node-version | Node.js major version (e.g., 18, 20, 22) | Auto-detect from engines.node or 22 |
--env | Environment variables (repeatable) | - |
--rw | Mount project read-write | false (read-only) |
--verbose | Show Docker command | false |
-h, --help | Show help | - |
PORT env or defaults to 3000)-p 8080: Runs on port 8080 (both host and container)-p 9000:3000: Maps host port 9000 to container port 3000hotbox automatically selects the appropriate Node.js version:
--node-version 18): Uses specified versionpackage.json: Reads engines.node field
"node": ">=20.0.0" → Node 20"node": "^18.12.0" → Node 18"node": "18.x" → Node 18--image): Overrides all version detectionAdvanced security and runtime configuration:
| Variable | Description | Example |
|---|---|---|
HOTBOX_ALLOW_RW | Enable --rw flag | HOTBOX_ALLOW_RW=1 hotbox --rw |
HOTBOX_ALLOW_IMAGE | Enable custom --image flag | HOTBOX_ALLOW_IMAGE=1 hotbox -i alpine |
HOTBOX_ALLOW_SHELL | Enable --shell-on-fail flag | HOTBOX_ALLOW_SHELL=1 hotbox --shell-on-fail |
HOTBOX_SECCOMP | Path to custom seccomp profile | HOTBOX_SECCOMP=/path/to/profile.json |
HOTBOX_APPARMOR | AppArmor profile name | HOTBOX_APPARMOR=docker-default |
HOTBOX_RUNTIME | Alternative container runtime | HOTBOX_RUNTIME=runsc (gVisor) |
# Install Bun
curl -fsSL https://bun.sh/install | bash
# Clone and build
git clone https://github.com/dl/hotbox
cd hotbox
bun install
bun run build
# Test the CLI locally
bun run dev
# Build and test the binary
bun run build
./bin/hotbox --help
package.jsongit tag v0.1.0 && git push --tagshotbox (your machine)
↓
docker run (hardened node:22-alpine container)
↓
copy source + lockfiles → /home/node/work
↓
ni (detects lockfile → npm/yarn/pnpm/bun)
↓
install dependencies with detected PM
↓
ni start/dev (run your project)
| Feature | hotbox | Direct node | Docker manually |
|---|---|---|---|
| Zero-config | ✅ | ✅ | ❌ |
| Security isolation | ✅ | ❌ | ✅ |
| Package manager agnostic | ✅ | ❌ | ❌ |
| Resource limits | ✅ | ❌ | ✅ |
| Single binary | ✅ | ✅ | ❌ |
MIT
Contributions welcome! Please:
FAQs
Run any Node project safely in Docker using ni inside the container.
We found that @douglance/hotbox demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.

Security News
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.

Security News
Node.js has paused its bug bounty program after funding ended, removing payouts for vulnerability reports but keeping its security process unchanged.