Skip to content

fix(policy): remove telegram + discord from base sandbox policy#2415

Open
latenighthackathon wants to merge 1 commit intoNVIDIA:mainfrom
latenighthackathon:fix/baseline-messaging-policy-leak
Open

fix(policy): remove telegram + discord from base sandbox policy#2415
latenighthackathon wants to merge 1 commit intoNVIDIA:mainfrom
latenighthackathon:fix/baseline-messaging-policy-leak

Conversation

@latenighthackathon
Copy link
Copy Markdown
Contributor

@latenighthackathon latenighthackathon commented Apr 24, 2026

Summary

The base sandbox policy (nemoclaw-blueprint/policies/openclaw-sandbox.yaml) was silently granting every sandbox egress to api.telegram.org, discord.com, gateway.discord.gg, and cdn.discordapp.com — regardless of whether the user enabled the telegram/discord messaging channel in step [5/8] or ticked the preset in step [8/8] of onboard. This is a regression of a previously-fixed behavior.

After a fresh onboard that explicitly skipped messaging channels and did not tick Discord in the Balanced-tier preset picker, nemoclaw <name> policy-list reports:

● discord — Discord API, gateway, and CDN access (active on gateway, missing from local state)

Problem

Regression history:

Once discord exists as a key in the gateway's loaded policy, policies.getGatewayPresets() detects the Discord preset as active (it matches on key presence). nemoclaw policy-list then renders the misleading "active on gateway, missing from local state" line for a preset the user never selected — and the egress is actually enforced, so it's a real capability grant, not just a display bug.

Test plan

  • npx vitest run test/validate-blueprint.test.ts test/policies.test.ts — 124 tests pass, including the three new regression tests that guard against this specific re-add pattern for telegram, discord, and slack.
  • npx vitest run test/validate-configs-dangerous-hosts.test.ts test/onboard.test.ts — 160 tests pass. No onboard-flow regressions.
  • Manually verified that users who enable a messaging channel in step [5/8] and apply the corresponding preset in step [8/8] still get identical endpoint access via presets/{telegram,discord}.yaml (no preset YAML changes in this PR).
  • openclaw-sandbox-permissive.yaml (used for --dangerously-skip-permissions) unchanged — permissive users still get pre-allowed messaging as before.

Fixes #2180.

Signed-off-by: latenighthackathon latenighthackathon@users.noreply.github.com

…NVIDIA#2180)

## Problem

After a fresh `nemoclaw onboard` with Balanced tier defaults, where the
user explicitly skipped messaging channels in step [5/8] and did not
tick Discord in step [8/8], `nemoclaw <name> policy-list` reports:

    ● discord — Discord API, gateway, and CDN access
      (active on gateway, missing from local state)

The sandbox can reach `discord.com`, `gateway.discord.gg`, and
`cdn.discordapp.com` without the user having opted in — the base
sandbox policy's own header says "deny by default, allow only what's
needed for core functionality," which messaging to third-party IM
platforms is not. Same story for `api.telegram.org`.

## Root cause

This is a regression, not a new bug:

- NVIDIA#1705 (2026-04-09, 77051cc) removed pre-allowed `telegram` and
  `discord` from `nemoclaw-blueprint/policies/openclaw-sandbox.yaml`
  for exactly this reason.
- NVIDIA#1700 (2026-04-14, 855924f), an unrelated npm_registry PR, was
  rebased on a branch that predated NVIDIA#1705 and re-added both entries
  during conflict resolution. The CodeRabbit release notes on NVIDIA#1700
  even called this out as "Added network policy entries to enable
  controlled Telegram and Discord messaging access" — it landed along
  with the legitimate npm_registry tightening and has been in the
  baseline since.

Once a key like `discord` exists in the gateway's loaded policy,
`policies.getGatewayPresets()` detects the Discord preset as active
(it matches on key presence), and `policy-list` then renders the
misleading "active on gateway, missing from local state" line.

## Fix

- Re-remove `telegram` and `discord` entries from
  `nemoclaw-blueprint/policies/openclaw-sandbox.yaml`. Messaging
  endpoints are only reachable if the user selects the matching
  channel in step [5/8] and the corresponding preset is applied on
  top of the baseline in step [8/8]. Leave a comment block at the
  removed location referencing NVIDIA#1705, NVIDIA#2180, and the preset path so
  the next merge-conflict resolution does not casually re-add them.
- Add three regression tests in `test/validate-blueprint.test.ts`
  mirroring the existing `NVIDIA#1583` GitHub pattern:
  - `regression NVIDIA#2180: base policy does not silently grant Telegram access`
  - `regression NVIDIA#2180: base policy does not silently grant Discord access`
  - `regression NVIDIA#2180: base policy does not silently grant Slack access`
    (guard against the same merge pattern re-adding Slack even though
    it was never in the baseline historically)
  Each asserts both the key absence in `network_policies` and the
  absence of any host-matching endpoint anywhere in the base policy,
  so a rename can't smuggle the grant back in.

## Test plan

- `npx vitest run test/validate-blueprint.test.ts test/policies.test.ts`
  — 124 tests pass including the 3 new regressions.
- `npx vitest run test/validate-configs-dangerous-hosts.test.ts test/onboard.test.ts`
  — 160 tests pass, no onboard flow regressions.

## Scope

Touches only the base policy YAML and the blueprint validator. Does
not modify any preset (presets/telegram.yaml, presets/discord.yaml,
presets/slack.yaml) — users who enabled messaging via onboard still
get the same preset applied on top of baseline and retain the same
endpoint access. The permissive variant
(openclaw-sandbox-permissive.yaml), used for
`--dangerously-skip-permissions`, is intentionally unchanged.

Fixes NVIDIA#2180.

Signed-off-by: latenighthackathon <latenighthackathon@users.noreply.github.com>
@copy-pr-bot
Copy link
Copy Markdown

copy-pr-bot Bot commented Apr 24, 2026

This pull request requires additional validation before any workflows can run on NVIDIA's runners.

Pull request vetters can view their responsibilities here.

Contributors can view more details about this message here.

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Apr 24, 2026

📝 Walkthrough

Walkthrough

The OpenClaw sandbox baseline policy removes network egress rules for messaging providers (telegram, discord) and replaces them with documentation, while new regression tests prevent accidental reintroduction of messaging provider access.

Changes

Cohort / File(s) Summary
Messaging Provider Network Policy Removal
nemoclaw-blueprint/policies/openclaw-sandbox.yaml
Deleted telegram and discord network policy entries (46 lines removed) including endpoint allow rules and node-binary restrictions. Replaced with explanatory comment indicating messaging providers are intentionally excluded from baseline and available through opt-in preset configuration.
Regression Test Coverage
test/validate-blueprint.test.ts
Added 53 lines of test assertions within the base sandbox policy test suite to prevent reintroduction of messaging provider network access. Tests verify absence of telegram, discord, and slack top-level network policy entries and validate no endpoints resolve to associated hostnames (including Slack subdomains and websocket hosts).

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~12 minutes

Poem

🐰 With whiskers twitching, I hop with glee,
Messaging endpoints removed with care—you see?
No telegram, no discord in the baseline's way,
Opt-in it shall be! Tests keep strays at bay! ✨

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Title check ✅ Passed The title accurately describes the main change: removing Telegram and Discord network policies from the base sandbox policy file, which is the primary purpose of the PR.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Comment @coderabbitai help to get the list of available commands and usage tips.

@latenighthackathon latenighthackathon changed the title fix(policy): remove telegram + discord from base sandbox policy (fixes #2180) fix(policy): remove telegram + discord from base sandbox policy Apr 24, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant