This release includes breaking changes for platform teams planning a safe upgrade.
✓ No known CVEs patched in this version
Topics
Affected surfaces
Summary
AI summaryUpdates 📖 Documentation, 🐛 Bug Fixes, and ✨ Features across a mixed release.
Full changelog
What's New
✨ Features
- Filesystem isolation with bubblewrap (bwrap). New
pkg/isolation/package adds abubblewrap-based filesystem isolation layer for sandbox command execution. Includes anIsolatorinterface, bwrap argv builder, startup probe, upper directory management, and seccomp loading. The bwrap binary is now statically built (musl-gcc) and injected into the execd container image via init container alongside execd itself. Configurable via isolation flags (upper root,max bytes,diff max bytes,allowed writable) with env var overrides. Diff/commit support deferred to Phase 2 (returns 503). Includes a CI smoke test validating static linking and bwrap namespace creation. (#1008)
🐛 Bug Fixes
-
False command failures from global signal interference resolved.
execdcould report a successfully-executed command asCommandExecErrorwhencmd.Wait()returned a spuriousECHILD("waitid: no child processes"). Root cause:signal.Notify(signals)with no signal list captured ALL signals (including SIGCHLD/SIGURG used by Go runtime for child reaping and async preemption), andsignal.Reset()was process-global, racing across concurrent commands. Now uses an explicit signal set withsignal.Stop()for scoped cleanup, and ignores spuriousECHILDfromWait()when the child already ran to completion. (#1042) -
Auto-created parent directories now inherit owner/group. When uploading a file to a path whose parent directories don't exist,
resolveUploadTargetnow propagatesowner/groupmetadata to each newly created parent directory via the newMkdirAllWithOwnershiphelper. Pre-existing directories are left untouched. TheMakeDirAPI also uses this helper for consistent behavior during multi-level directory creation. (#1075)
📖 Documentation
-
DEVELOPMENT.md rewritten. Reduced from 598 to 99 lines — removed generic Go boilerplate and fixed all code examples from Beego to Gin to match the current codebase (migrated in v1.0.3). (#1071)
-
Missing
EXECD_ACCESS_TOKENenv var documented. The README env var table now includesEXECD_ACCESS_TOKEN, whichparser.godefines but was previously undocumented. (#1071) -
Docs site links updated. execd component docs updated as part of the VitePress docs site restructure — fixed broken cross-references and aligned with the new section-based information architecture. (#1090)
👥 Contributors
Thanks to these contributors ❤️
- @LavenderQAQ
- @ninan-nn
- @Pangjiping
- Docker Hub: opensandbox/execd:v1.0.20
- Aliyun Registry: sandbox-registry.cn-zhangjiakou.cr.aliyuncs.com/opensandbox/execd:v1.0.20
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Share this release
Related context
Earlier breaking changes
- vpython/sandbox/v0.1.14 Removes `CredentialMatch.ports`; port now derived from scheme.
- vjava/sandbox/v1.0.16 Removes CredentialMatch.ports; port derived from scheme instead.
- vdocker/egress/v1.1.4 `Match.Ports` field removed from Credential Vault bindings; ports derived from scheme.
- vdocker/egress/v1.1.4 'X-Forwarded-Proto' is trusted only from configured proxy CIDRs.
- vdocker/egress/v1.1.4 Credential Vault requires `dns+nft` enforcement for egress connections.
Beta — feedback welcome: [email protected]