You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: SECURITY.md
+2-2Lines changed: 2 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -100,7 +100,7 @@ This control covers cooperating NemoClaw processes, crashes, retries, and recycl
100
100
-**Runtime bind changes.** The probe runs at startup only. A backend that binds loopback at proxy-start time and later rebinds to a public interface is out of scope. Adding a periodic re-probe is a follow-up.
101
101
-**Inference providers this proxy does not front.** The probe covers only what the proxy forwards to: the local Ollama daemon, or a compatible endpoint onboarded without authentication. NIM, the NemoClaw-managed Local vLLM and llama.cpp providers, remote providers, and compatible endpoints onboarded with a credential do not route through this proxy and are not covered. A vLLM server you run yourself and onboard as an unauthenticated compatible endpoint is covered, because that path is the one `noAuthProxy()` fronts.
102
102
103
-
**Enforced by:**`test/ollama-auth-proxy-bind-probe.test.ts` covers the `/proc` and `lsof` loopback classifiers (accepts full 127.0.0.0/8 including IPv4-mapped IPv6, refuses wildcard and LAN-scope, refuses the lsof `*` token) and pins `EXIT_BACKEND_NOT_LOOPBACK = 2`; the host CLI acts on the structured status reason, which the following tests cover. `src/lib/inference/ollama/proxy-status.test.ts` covers Ollama, compatible-endpoint, and unknown-backend remediation. `test/ollama-proxy-startup.test.ts` covers the real startup path (port conflict, spawn failure, slow bind, IPv6-only listener, reclaim of a prior NemoClaw proxy) and proves `noAuthProxy()` keeps the refusal and the endpoint remediation for a compatible endpoint, including one on the Ollama port. `test/ollama-proxy-recovery.test.ts` covers descriptor persistence, legacy migration, cross-gateway adoption, and structured recovery refusals for managed Ollama and a compatible endpoint on the same port.
103
+
**Enforced by:**`test/inference/ollama/ollama-auth-proxy-bind-probe.test.ts` covers the `/proc` and `lsof` loopback classifiers (accepts full 127.0.0.0/8 including IPv4-mapped IPv6, refuses wildcard and LAN-scope, refuses the lsof `*` token) and pins `EXIT_BACKEND_NOT_LOOPBACK = 2`; the host CLI acts on the structured status reason, which the following tests cover. `src/lib/inference/ollama/proxy-status.test.ts` covers Ollama, compatible-endpoint, and unknown-backend remediation. `test/inference/ollama/ollama-proxy-startup.test.ts` covers the real startup path (port conflict, spawn failure, slow bind, IPv6-only listener, reclaim of a prior NemoClaw proxy) and proves `noAuthProxy()` keeps the refusal and the endpoint remediation for a compatible endpoint, including one on the Ollama port. `test/inference/ollama/ollama-proxy-recovery.test.ts` covers descriptor persistence, legacy migration, cross-gateway adoption, and structured recovery refusals for managed Ollama and a compatible endpoint on the same port.
104
104
105
105
## Documented Risk Acceptances
106
106
@@ -112,6 +112,6 @@ The following security-relevant defaults are intentional. Each item names the co
112
112
-**Constraint:**`/tmp/nemoclaw-proxy-env.sh` is sandbox-user-owned convenience state, not an integrity boundary. It is created with mode `0444` so independent login and exec shells can source the same credential-free settings. The Deep Agents Code runtime deliberately runs as the non-root sandbox user, unlike the root-supervised OpenClaw and Hermes startup paths.
113
113
-**Compensating controls:**
114
114
1. The file is credential-free by construction. `prepare_runtime_env` writes normalized proxy config and inherited trust-store paths. It does not persist LangSmith tracing, project, or API key variables.
115
-
2. A regression test in [`test/langchain-deepagents-code-image.test.ts`](test/langchain-deepagents-code-image.test.ts) injects token-shaped values through LangSmith tracing and both project variables, scans the emitted env file against canonical token shapes, and fails CI if any secret-shaped value is present.
115
+
2. A regression test in [`test/agents/deepagents/langchain-deepagents-code-image.test.ts`](test/agents/deepagents/langchain-deepagents-code-image.test.ts) injects token-shaped values through LangSmith tracing and both project variables, scans the emitted env file against canonical token shapes, and fails CI if any secret-shaped value is present.
116
116
3. The root-owned, image-baked proxy host/port files and direct `dcode-launcher.sh` boundary remain the routing source of truth. Focused and live login-shell checks compare the sourced convenience values with that root-owned source; file metadata checks detect accidental drift but do not claim sandbox-owner tamper resistance.
117
117
-**When to revisit:** If a future change adds credential-shaped values to the env-file writer, or if the Deep Agents Code runtime moves back to the root-supervised startup model, revisit the mode and the compensating controls together.
0 commit comments