Block unsafe Node runtime env overrides [AI]#87308
Conversation
|
Codex review: needs maintainer review before merge. Reviewed May 27, 2026, 10:37 AM ET / 14:37 UTC. Summary PR surface: Source +8, Tests +87, Docs 0, Generated +8. Total +103 across 10 files. Reproducibility: yes. Current main lacks the four Node runtime-control names in the shared policy while sanitizer paths derive blocked inherited and override behavior from that policy, and Node 24.15.0 help confirms the names alter runtime behavior. Review metrics: 1 noteworthy metric.
Merge readiness Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch. Rank-up moves:
Risk before merge
Maintainer options:
Next step before merge Security Review detailsBest possible solution: Land only after a maintainer accepts the stricter Node env policy and CI is green; otherwise narrow the policy scope or document an explicit supported exception path. Do we have a high-confidence way to reproduce the issue? Yes. Current main lacks the four Node runtime-control names in the shared policy while sanitizer paths derive blocked inherited and override behavior from that policy, and Node 24.15.0 help confirms the names alter runtime behavior. Is this the best way to solve the issue? Yes if maintainers want these keys blocked. The PR uses the shared JSON policy so node-host, dotenv, skill env overrides, docs, and generated macOS policy stay aligned; the unresolved part is compatibility acceptance, not a code repair. AGENTS.md: found and applied where relevant. Codex review notes: model gpt-5.5, reasoning high; reviewed against b8cf83aeb3b5. Label changesLabel changes:
Label justifications:
Evidence reviewedPR surface: Source +8, Tests +87, Docs 0, Generated +8. Total +103 across 10 files. View PR surface stats
What I checked:
Likely related people:
What the crustacean ranks mean
Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics. How this review workflow works
|
|
ClawSweeper PR egg ✨ Hatched: 🥚 common Brave Shellbean Hatch commandComment Hatchability rules:
Rarity: 🥚 common. What is this egg doing here?
|
|
@clawsweeper re-review Updated the PR body with real behavior proof and the latest sanitizer scope. |
|
🦞🧹 I asked ClawSweeper to review this item again. Re-review progress:
|
* fix: block unsafe node runtime env overrides * fix: block node env path redirects * docs: add changelog entry for PR merge
…026.5.27) (#698) This PR contains the following updates: | Package | Update | Change | |---|---|---| | [ghcr.io/openclaw/openclaw](https://openclaw.ai) ([source](https://github.com/openclaw/openclaw)) | patch | `2026.5.26` → `2026.5.27` | --- ### Release Notes <details> <summary>openclaw/openclaw (ghcr.io/openclaw/openclaw)</summary> ### [`v2026.5.27`](https://github.com/openclaw/openclaw/blob/HEAD/CHANGELOG.md#2026527) [Compare Source](openclaw/openclaw@v2026.5.26...v2026.5.27) ##### Highlights - Safer local/runtime boundaries: OpenClaw now rejects unsafe command wrappers, malformed CLI numeric options, unsafe Node runtime env overrides, no-auth Tailscale exposure, and non-admin device-role pairing approvals before they can affect live runs. ([#​87308](openclaw/openclaw#87308), [#​87305](openclaw/openclaw#87305), [#​87292](openclaw/openclaw#87292), [#​87146](openclaw/openclaw#87146)) - Matrix and auto-reply delivery are steadier: mention previews stay inert, final mention replies deliver normally, shared-DM notices are awaited, MXID parsing ignores filenames, and reasoning-prefixed `NO_REPLY` responses stay suppressed. - Provider and agent reliability improved across OpenAI-compatible embeddings, cached token usage, Anthropic/Codex/Claude runtime state, unsupported tool-schema quarantine, heartbeat templates, and session fallback errors. ([#​85269](openclaw/openclaw#85269), [#​82062](openclaw/openclaw#82062), [#​85416](openclaw/openclaw#85416), [#​86855](openclaw/openclaw#86855)) - Plugin and package release paths got tighter: Pixverse ships as an external video plugin with region selection, package exclusions and shrinkwrap inventory match the published npm shape, and release/package smoke commands fail bounded instead of hanging. - Gateway hot paths do less rediscovery by reusing current plugin metadata fingerprints, stable plugin index fingerprints, read-only session metadata, active working stores, status fast paths, and auth/env snapshots. ([#​86439](openclaw/openclaw#86439)) ##### Changes - Memory: add a core OpenAI-compatible embedding provider for local and hosted OpenAI-style endpoints, with config, doctor, and docs support. ([#​85269](openclaw/openclaw#85269)) Thanks [@​dutifulbob](https://github.com/dutifulbob). - Plugin SDK: mark memory-specific embedding provider registration as deprecated compatibility and surface non-bundled usage in plugin compatibility diagnostics. ([#​85072](openclaw/openclaw#85072)) Thanks [@​mbelinky](https://github.com/mbelinky). - Pixverse: add video generation provider support, API region selection, and external plugin publishing. - Plugins: expose approval action metadata for plugin-driven approval surfaces. ##### Fixes - Security/CLI/runtime: harden hostname normalization for repeated trailing dots, block side-effecting command wrappers, reject unsafe Node runtime env overrides, reject loose numeric CLI and gateway options, require admin approval for node device-role pairing, and reject no-auth Tailscale exposure. ([#​87305](openclaw/openclaw#87305), [#​87292](openclaw/openclaw#87292), [#​87308](openclaw/openclaw#87308), [#​87146](openclaw/openclaw#87146)) Thanks [@​pgondhi987](https://github.com/pgondhi987). - Doctor: validate runtime tool schemas for every configured embedded agent while skipping ACP-only profiles, so bad non-default plugin or MCP tools are reported before assistant turns. - Telegram: route `sendMessage` action replies through durable outbound delivery so completed agent responses remain retryable when the gateway send path times out. ([#​87261](openclaw/openclaw#87261)) Thanks [@​mbelinky](https://github.com/mbelinky). - Matrix/auto-reply: keep draft previews mention-inert, preserve final mention delivery, send mention finals normally, await shared DM notices, ignore filename-embedded MXIDs, and suppress reasoning-prefixed `NO_REPLY` responses. - Agents/providers: add OpenAI-compatible cache retention, forward cached token usage in chat completions, preserve runtime context before active user turns, strip stale Anthropic thinking, load Claude CLI OAuth for Pi auth profiles, avoid false Codex runtime live switches, and quarantine unsupported tool schemas. ([#​82062](openclaw/openclaw#82062), [#​87167](openclaw/openclaw#87167), [#​86855](openclaw/openclaw#86855)) - Gateway/performance: cache plugin metadata fingerprints and stable plugin index fingerprints, borrow read-only session metadata safely, keep the active session working store hot, keep status on a bounded fast path, and preserve model auth profile suffixes. ([#​86439](openclaw/openclaw#86439)) - Package/install/release: align npm package exclusions and inventory, omit unpacked test helpers, skip Homebrew until macOS packages need it, cap tsdown heap in containers, bound install/release smoke waits, and harden post-publish verification. - Codex/Auth: bound ChatGPT OAuth token exchange and refresh requests, and honor cancellation across Codex and Anthropic OAuth login flows. - QA/E2E/CI: bound Telegram, kitchen-sink, Open WebUI, ClawHub, MCP, Discord, realtime, labeler, and GitHub API waits; fail empty explicit test, live-media, gateway CPU, startup benchmark, plugin gauntlet, and beta-smoke runs instead of false-greening. - Agents/Codex: keep spawned agent bootstrap files rooted in the agent workspace while running task commands, transcripts, and compaction from the requested cwd. ([#​87218](openclaw/openclaw#87218)) Thanks [@​mbelinky](https://github.com/mbelinky). </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xMDEuMSIsInVwZGF0ZWRJblZlciI6IjQzLjEwMS4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJyZW5vdmF0ZS9jb250YWluZXIiLCJ0eXBlL3BhdGNoIl19--> Reviewed-on: https://git.erwanleboucher.dev/eleboucher/homelab/pulls/698
Summary
.env, CLI dotenv loading, and skill env overrides.Linked context
No public auto-closing issue reference in this PR body.
Real behavior proof (required for external PRs)
system.runsanitizer boundary../node_modules/.bin/tsx --eval '<script importing sanitizeEnv from src/node-host/invoke.ts and passing NODE_REDIRECT_WARNINGS, NODE_REPL_EXTERNAL_MODULE, NODE_REPL_HISTORY, NODE_V8_COVERAGE overrides>'{ "proof": "node-host system.run sanitizeEnv override filtering", "safeValue": "kept", "blockedSurvivors": [] }NODE_REDIRECT_WARNINGS,NODE_REPL_EXTERNAL_MODULE,NODE_REPL_HISTORY, andNODE_V8_COVERAGEwere all removed by the OpenClaw node-host sanitizer path.system.run, plus focused tests for sibling sanitizer consumers.Tests and validation
Commands run:
Regression coverage added or updated:
Risk checklist
Did user-visible behavior change? (
Yes/No)Yes. These environment variables are now filtered where dangerous runtime-control env keys are already filtered.
Did config, environment, or migration behavior change? (
Yes/No)Yes. Environment override and dotenv handling rejects additional Node runtime-control names.
Did security, auth, secrets, network, or tool execution behavior change? (
Yes/No)Yes. This changes host child-process environment sanitization.
What is the highest-risk area?
Blocking a legitimate local workflow that intentionally relied on these Node variables through OpenClaw-managed child process env surfaces.
How is that risk mitigated?
The change is limited to the existing dangerous environment policy boundary, keeps trusted global operator dotenv behavior unchanged, documents the new filtered names, and adds focused regression coverage across affected sanitizer consumers.
Current review state
What is the next action?
Wait for CI and fresh automation review on the latest commit.
What is still waiting on author, maintainer, CI, or external proof?
CI is pending. Maintainer review is still needed for the compatibility impact of blocking these Node runtime-control variables.
Which bot or reviewer comments were addressed?
Autoreview requested blocking same-class Node path redirection env variables; this PR now also blocks
NODE_REDIRECT_WARNINGSandNODE_REPL_HISTORYwith matching docs/tests. ClawSweeper requested real behavior proof; this body now includes node-host sanitizer proof output.AI-assisted: yes.