Peter Steinberger
7066d5e192
refactor: extract shared sandbox and gateway plumbing
2026-03-02 23:16:47 +00:00
Peter Steinberger
02eeb08e04
fix: enforce sandbox workspace mount mode ( #32227 ) (thanks @guanyu-zhang)
2026-03-02 22:59:11 +00:00
Evan
7cbcbbc642
fix(sandbox): same fix for browser.ts - make /workspace bind mount read-only when workspaceAccess is not rw
...
The identical buggy logic from docker.ts also exists in browser.ts.
Applying the same fix here.
2026-03-02 22:58:09 +00:00
Evan
903e4dff35
fix(sandbox): make /workspace bind mount read-only when workspaceAccess is not rw
...
This ensures that when workspaceAccess is set to 'ro' or 'none', the
sandbox workspace (/workspace inside the container) is mounted as
read-only, matching the documented behavior.
Previously, the condition was:
workspaceAccess === 'ro' && workspaceDir === agentWorkspaceDir
This was always false in 'ro' mode because workspaceDir equals
sandboxWorkspaceDir, not agentWorkspaceDir.
Now the logic is simplified:
- 'rw': /workspace is writable
- 'ro': /workspace is read-only
- 'none': /workspace is read-only
2026-03-02 22:58:09 +00:00
Alessandro Rodi
f257818ea5
fix(sandbox): prevent Windows PATH from poisoning docker exec ( #13873 )
...
* fix(sandbox): prevent Windows PATH from poisoning docker exec shell lookup
On Windows hosts, `buildDockerExecArgs` passes the host PATH env var
(containing Windows paths like `C:\Windows\System32`) to `docker exec -e
PATH=...`. Docker uses this PATH to resolve the executable argument
(`sh`), which fails because Windows paths don't exist in the Linux
container — producing `exec: "sh": executable file not found in $PATH`.
Two changes:
- Skip PATH in the `-e` env loop (it's already handled separately via
OPENCLAW_PREPEND_PATH + shell export)
- Use absolute `/bin/sh` instead of bare `sh` to eliminate PATH
dependency entirely
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
* style: add braces around continue to satisfy linter
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
* fix(test): update assertion to match /bin/sh in buildDockerExecArgs
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-02 16:17:33 -06:00
Peter Steinberger
ab8b8dae70
refactor(agents): dedupe model and tool test helpers
2026-03-02 21:31:36 +00:00
Peter Steinberger
9617ac9dd5
refactor: dedupe agent and reply runtimes
2026-03-02 19:57:33 +00:00
Peter Steinberger
d4bf07d075
refactor(security): unify hardened install and fs write flows
2026-03-02 17:23:29 +00:00
Peter Steinberger
104d32bb64
fix(security): unify root-bound write hardening
2026-03-02 17:12:33 +00:00
Peter Steinberger
07b16d5ad0
fix(security): harden workspace bootstrap boundary reads
2026-03-02 17:07:36 +00:00
Artale
1b462ed174
fix(test): use NTFS junctions and platform guards for symlink tests on Windows (openclaw#28747) thanks @arosstale
...
Verified:
- pnpm install --frozen-lockfile
- pnpm test src/agents/apply-patch.test.ts src/agents/sandbox/fs-bridge.test.ts src/agents/sandbox/validate-sandbox-security.test.ts src/infra/archive.test.ts
Co-authored-by: arosstale <117890364+arosstale@users.noreply.github.com >
Co-authored-by: Tak Hoffman <781889+Takhoffman@users.noreply.github.com >
2026-03-02 10:45:19 -06:00
Peter Steinberger
18f8393b6c
fix: harden sandbox writes and centralize atomic file writes
2026-03-02 16:45:12 +00:00
Peter Steinberger
dec2c9e74d
fix(sandbox): allow mkdirp boundary checks on existing directories ( #31547 )
2026-03-02 15:55:00 +00:00
User
6135eb3353
fix(sandbox): allow mkdirp boundary check on existing directories
2026-03-02 15:55:00 +00:00
Tak Hoffman
cd653c55d7
windows: unify non-core spawn handling across acp qmd and docker (openclaw#31750) thanks @Takhoffman
...
Verified:
- pnpm install --frozen-lockfile
- pnpm build
- pnpm check (fails on pre-existing unrelated src/slack/monitor/events/messages.ts typing errors)
- pnpm vitest run src/acp/client.test.ts src/memory/qmd-manager.test.ts src/agents/sandbox/docker.execDockerRaw.enoent.test.ts src/agents/sandbox/docker.windows.test.ts extensions/acpx/src/runtime-internals/process.test.ts
Co-authored-by: Takhoffman <781889+Takhoffman@users.noreply.github.com >
2026-03-02 08:05:39 -06:00
Vincent Koc
22be0c5801
fix(browser): support configurable CDP auto-port range start ( #31352 )
...
* config(browser): add cdpPortRangeStart type
* config(schema): validate browser.cdpPortRangeStart
* config(labels): add browser.cdpPortRangeStart label
* config(help): document browser.cdpPortRangeStart
* browser(config): resolve custom cdp port range start
* browser(profiles): allocate ports from resolved CDP range
* test(browser): cover cdpPortRangeStart config behavior
* test(browser): cover cdpPortRangeStart profile allocation
* test(browser): include CDP range fields in remote tab harness
* test(browser): include CDP range fields in ensure-tab harness
* test(browser): include CDP range fields in bridge auth config
* build(browser): add resolved CDP range metadata
* fix(browser): fallback CDP port allocation to derived range
* test(browser): cover missing resolved CDP range fallback
* fix(browser): remove duplicate resolved CDP range fields
* fix(agents): provide resolved CDP range in sandbox browser config
* chore(browser): format sandbox bridge resolved config
* chore(browser): reformat sandbox imports to satisfy oxfmt
2026-03-01 23:50:50 -08:00
Peter Steinberger
7e29d604ba
test(agents): dedupe agent and cron test scaffolds
2026-03-02 07:13:10 +00:00
AaronWander
366374b4ff
Sandbox: add actionable error when docker missing ( #28547 )
...
Co-authored-by: AaronWander <siralonne@163.com >
2026-03-01 22:14:26 -08:00
Agent
002539c01e
fix(security): harden sandbox novnc observer flow
2026-03-01 22:44:28 +00:00
Agent
dcd19da425
refactor: simplify sandbox boundary open flow
2026-03-01 21:49:42 +00:00
Agent
3be1343e00
fix: tighten sandbox mkdirp boundary checks ( #30610 ) (thanks @glitch418x)
2026-03-01 21:41:47 +00:00
glitch418x
687f5779d1
sandbox: allow directory boundary checks for mkdirp
2026-03-01 21:41:47 +00:00
Ayaan Zaidi
139271ad5a
fix: sandbox browser docker no-sandbox rollout ( #29879 ) (thanks @Lukavyi)
2026-02-28 21:43:56 +05:30
Shakker
f7041fbee3
fix(windows): normalize namespaced path containment checks
2026-02-26 18:49:48 +00:00
Peter Steinberger
46eba86b45
fix: harden workspace boundary path resolution
2026-02-26 13:19:59 +01:00
Peter Steinberger
242188b7b1
refactor: unify boundary-safe reads for bootstrap and includes
2026-02-26 12:42:14 +01:00
Peter Steinberger
de61e9c977
refactor(security): unify path alias guard policies
2026-02-26 03:59:17 +01:00
Peter Steinberger
04d91d0319
fix(security): block workspace hardlink alias escapes
2026-02-26 03:42:54 +01:00
Peter Steinberger
91ae82ae19
refactor(sandbox): centralize dangerous docker override key handling
2026-02-25 02:12:15 +00:00
Peter Steinberger
eb4a93a8db
refactor(sandbox): share container-path utils and tighten fs bridge tests
2026-02-25 01:59:53 +00:00
Peter Steinberger
c7ae4ed04d
fix: harden sandbox fs dash-path regression coverage ( #25891 ) (thanks @albertlieyingadrian)
2026-02-25 01:40:30 +00:00
Albert Lie
5e3502df5f
fix(sandbox): prevent shell option interpretation for paths with leading hyphens
...
Paths starting with "-" (like those containing "---" pattern) can be
interpreted as shell options by the sh shell. This fix adds a helper
function that prepends "./" to paths starting with "-" to prevent
this interpretation.
This fixes the issue where sandbox filesystem operations fail with
"Syntax error: ; unexpected" when file paths contain the "---" pattern
used in auto-generated inbound media filenames like:
file_1095---f00a04a2-99a0-4d98-99b0-dfe61c5a4198.ogg
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com >
2026-02-25 01:40:30 +00:00
Peter Steinberger
58309fd8d9
refactor(matrix,tests): extract helpers and inject send-queue timing
2026-02-24 23:37:50 +00:00
Peter Steinberger
a2529c25ff
test(matrix,discord,sandbox): expand breakage regression coverage
2026-02-24 23:37:50 +00:00
Peter Steinberger
e7a5f9f4d8
fix(channels,sandbox): land hard breakage cluster from reviewed PR bases
...
Lands reviewed fixes based on #25839 (@pewallin), #25841 (@joshjhall), and #25737/@25713 (@DennisGoldfinger/@peteragility), with additional hardening + regression tests for queue cleanup and shell script safety.
Fixes #25836
Fixes #25840
Fixes #25824
Fixes #25868
Co-authored-by: Peter Wallin <pwallin@gmail.com >
Co-authored-by: Joshua Hall <josh@yaplabs.com >
Co-authored-by: Dennis Goldfinger <dennisgoldfinger@gmail.com >
Co-authored-by: peteragility <peteragility@users.noreply.github.com >
2026-02-24 23:27:56 +00:00
Peter Steinberger
5552f9073f
refactor(sandbox): centralize network mode policy helpers
2026-02-24 23:26:46 +00:00
Peter Steinberger
14b6eea6e3
feat(sandbox): block container namespace joins by default
2026-02-24 23:20:34 +00:00
Peter Steinberger
9ef0fc2ff8
fix(sandbox): block @-prefixed workspace path bypass
2026-02-24 17:23:14 +00:00
Peter Steinberger
13bfe7faa6
refactor(sandbox): share bind parsing and host-path policy checks
2026-02-24 15:04:47 +00:00
Peter Steinberger
b5787e4abb
fix(sandbox): harden bind validation for symlink missing-leaf paths
2026-02-24 14:37:35 +00:00
Peter Steinberger
d3ecc234da
test: align flaky CI expectations after main changes ( #24991 ) (thanks @stakeswky)
2026-02-24 04:34:49 +00:00
Peter Steinberger
c070be1bc4
fix(sandbox): harden fs bridge path checks and bind mount policy
2026-02-24 02:21:43 +00:00
Peter Steinberger
8dfa33d373
test(sandbox): add root bind mount regression
2026-02-24 00:17:21 +00:00
Peter Steinberger
a30f9c8673
fix(sandbox): fallback docker user to workspace owner uid/gid
...
Co-authored-by: LucasAIBuilder <LucasAIBuilder@users.noreply.github.com >
2026-02-22 23:33:15 +01:00
Peter Steinberger
6f895eb831
fix(sandbox): honor explicit bind mounts over workspace defaults
...
Co-authored-by: tasaankaeris <tasaankaeris@users.noreply.github.com >
2026-02-22 20:37:22 +01:00
Peter Steinberger
3286791316
refactor(agents): dedupe config and truncation guards
2026-02-22 17:54:51 +00:00
Peter Steinberger
8a0a28763e
test(core): reduce mock reset overhead across unit and e2e specs
2026-02-22 08:22:58 +00:00
Peter Steinberger
dd5774a300
test(agents): use lightweight clears in skills/sandbox setup
2026-02-22 08:06:06 +00:00
Peter Steinberger
751ca08728
test(agents): use lightweight clears in sandbox browser create setup
2026-02-22 08:01:16 +00:00
Peter Steinberger
c9593c4c87
test(sandbox): table-drive bind and network validation cases
2026-02-21 23:28:07 +00:00