Skip to content

fix: require approval for project-level sandbox config (C-1)#51

Merged
jkyberneees merged 3 commits into
mainfrom
fix/c1-project-sandbox-approval
Jul 18, 2026
Merged

fix: require approval for project-level sandbox config (C-1)#51
jkyberneees merged 3 commits into
mainfrom
fix/c1-project-sandbox-approval

Conversation

@jkyberneees

Copy link
Copy Markdown
Contributor

Mitigates C-1 from the security audit in sec_findings.md.

Problem

Project-level ./odek.json could set sandbox_env, sandbox_image, sandbox_network, and sandbox_volumes to:

  • Exfiltrate host secrets via ${VAR} expansion in sandbox_env.
  • Pull an attacker-controlled Docker image.
  • Widen the container network beyond the operator's global setting.

All of this happened before the first LLM call, with no approval.

Fix

Adds a manual approval gate for project-level sandbox config, mirroring the existing MCP-server approval pattern:

  • internal/config/loader.go records project sandbox overrides in ResolvedConfig.ProjectSandboxOverride.
  • cmd/odek/project_sandbox_approval.go provides:
    • TTY prompt: y = once, t = trust this project, N = deny.
    • Persistent per-project approvals in ~/.odek/project_sandbox_approvals.json (0600).
    • ODEK_APPROVE_PROJECT_SANDBOX=1 bypass for CI/non-interactive use.
    • Fail-closed in non-interactive mode without the bypass.
  • Wired into every command that loads config: run, repl, serve, subagent, mcp, telegram, schedule.

Tests

  • TestLoadConfig_ProjectSandboxOverride / TestLoadConfig_NoProjectSandboxOverride
  • 8 new approval tests in cmd/odek/project_sandbox_approval_test.go
  • Regression bar: TestReport_ProjectSandboxRequiresApproval
  • Full suite: go test ./... -count=1 and go test -race ./internal/config/ ./cmd/odek/ -count=1 pass.

Notes

sec_findings.md is intentionally left gitignored/uncommitted per project convention.

Project ./odek.json could set sandbox_env, sandbox_image, sandbox_network,
and sandbox_volumes to exfiltrate host secrets (via ${VAR} expansion), pull
an attacker-controlled image, or widen network access.

This change adds a manual approval gate:
- LoadConfig records project sandbox overrides in ResolvedConfig.
- New approveProjectSandbox mirrors the MCP approval pattern:
  TTY prompt, persisted per-project trust, and ODEK_APPROVE_PROJECT_SANDBOX=1.
- Wired into run, repl, serve, subagent, mcp, telegram, schedule.

Fixes C-1 in sec_findings.md.
@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Jul 18, 2026

Copy link
Copy Markdown

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

Status Name Latest Commit Preview URL Updated (UTC)
✅ Deployment successful!
View logs
odek 656cd5e Commit Preview URL

Branch Preview URL
Jul 18 2026, 09:09 AM

@jkyberneees
jkyberneees merged commit cd1845d into main Jul 18, 2026
8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant