This release includes 1 security fix for security teams reviewing exposed deployments.
Topics
Affected surfaces
ReleasePort's take
Moderate signalPatch 21 Dependabot CVEs by bumping dependencies to the latest safe versions; remove `CredentialMatch.ports` as port is now derived from scheme.
Why it matters: Addressing 21 highβseverity CVEs (severityβ―90) in Python SDK dependencies mitigates critical vulnerabilities, while the breaking change eliminates reliance on the deprecated `CredentialMatch.ports` field.
Summary
AI summaryUpdates β¨ Features, π₯ Contributors, and π¦ Misc across a mixed release.
Changes in this release
| Type | Severity | Summary | CVE |
|---|---|---|---|
| Security | Critical |
Patch 21 Dependabot CVEs by bumping dependencies to latest safe versions. Patch 21 Dependabot CVEs by bumping dependencies to latest safe versions. Source: llm_adapter@2026-07-13 Confidence: high |
β |
| Breaking | High |
Removes `CredentialMatch.ports`; port now derived from scheme. Removes `CredentialMatch.ports`; port now derived from scheme. Source: llm_adapter@2026-07-13 Confidence: high |
β |
| Feature | Medium |
Adds `sandbox.isolation.run_once(code, workspace=...)` oneβshot isolation API. Adds `sandbox.isolation.run_once(code, workspace=...)` oneβshot isolation API. Source: llm_adapter@2026-07-13 Confidence: high |
β |
| Feature | Medium |
Adds `sandbox.isolation.list()` to list isolated sessions (async + sync). Adds `sandbox.isolation.list()` to list isolated sessions (async + sync). Source: llm_adapter@2026-07-13 Confidence: high |
β |
| Feature | Medium |
Adds bindβmount support via `CreateIsolatedSessionRequest.binds` with `BindMount(source, dest, readonly)` and `uid_mode`. Adds bindβmount support via `CreateIsolatedSessionRequest.binds` with `BindMount(source, dest, readonly)` and `uid_mode`. Source: llm_adapter@2026-07-13 Confidence: high |
β |
| Feature | Medium |
Adds FORCEβdestroy support to `SandboxPoolManager` with `DESTROYING` fence and `DESTROYED` tombstone semantics for both inβmemory and Redis stores. Adds FORCEβdestroy support to `SandboxPoolManager` with `DESTROYING` fence and `DESTROYED` tombstone semantics for both inβmemory and Redis stores. Source: llm_adapter@2026-07-13 Confidence: high |
β |
| Feature | Medium |
Adds credential vault placeholder substitutions for request surfaces (path, query, header, body, passthrough). Adds credential vault placeholder substitutions for request surfaces (path, query, header, body, passthrough). Source: llm_adapter@2026-07-13 Confidence: high |
β |
| Feature | Medium |
Adds endpoint cache with inflight deduplication to avoid repeated HTTP roundtrips. Adds endpoint cache with inflight deduplication to avoid repeated HTTP roundtrips. Source: llm_adapter@2026-07-13 Confidence: high |
β |
| Feature | Medium |
Adds `extensions` field to `CreateSandboxResponse` and `Sandbox` models, exposing Kubernetes annotations as `opensandbox.extensions.*`. Adds `extensions` field to `CreateSandboxResponse` and `Sandbox` models, exposing Kubernetes annotations as `opensandbox.extensions.*`. Source: llm_adapter@2026-07-13 Confidence: high |
β |
| Deprecation | Low |
Removes unused `PoolStateStoreContentionError`; never raised. Removes unused `PoolStateStoreContentionError`; never raised. Source: llm_adapter@2026-07-13 Confidence: high |
β |
Full changelog
What's New
β¨ Features
- Isolation convenience APIs β
sandbox.isolation.run_once(code, workspace=...)for one-shot create β run β delete flows, andasync with sandbox.isolation.session(req)/with ... session(req)for scoped multi-run workflows. Cleanup is best-effort so it never masks the original exception. Available on both async and sync clients. (#1222) - List isolated sessions β
sandbox.isolation.list()(async + sync). (#1269) - Isolated bind mounts β
CreateIsolatedSessionRequest.bindsacceptsBindMount(source, dest, readonly)for arbitrary hostβnamespace path mappings; also exposes the previously missinguid_mode. Threaded through therun_oncehelper as well. (#1264) - Sandbox pool destroy β
SandboxPoolManagerFORCE-destroy support withDESTROYINGfence +DESTROYEDtombstone; both in-memory and Redis stores implement the new tombstone semantics. Failed destroys leave the pool inDESTROYINGso callers can retry safely. (#1225) - Credential Vault placeholder substitutions β opt-in placeholders for
path/query/header/bodyrequest surfaces (incl.passthroughbindings). (#1251) - Endpoint cache with inflight dedup β cache
(sandbox_id, port, use_server_proxy) β Endpointto avoid repeated HTTP roundtrips. Default on: TTL 600s, MaxSize 1024, configurable viaConnectionConfig;kill()actively invalidates cached entries. (#1133) - Sandbox
extensionsin lifecycle responses βCreateSandboxResponseandSandboxmodels now exposeextensions, restoring Kubernetesopensandbox.io/extensions.*annotations asopensandbox.extensions.*in response data. (#1112) IsolationService/IsolationServiceSyncprotocols now includerun_onceandsessionβ built-in adapters inherit default implementations viaIsolationServiceMixin, but custom protocol implementations must satisfy the extended contract. (#1222)CredentialMatch.portsremoved; intercept port is derived from scheme (httpβ80,httpsβ443). Drop anyports=[...]arguments. (#1189)PoolStateStoreContentionErrorremoved (never actually raised by in-memory or Redis stores). (#1198)
π Bug Fixes
- Handled adapter warnings/errors are demoted so they no longer surface as noisy tracebacks, while still remaining visible in logs.
- Python SDK logging unified to f-strings.
π Security
- Patch 21 Dependabot CVEs β bumps
pydantic-settingsβ 2.14.2,python-multipartβ 0.0.32,starletteβ 1.3.1,cryptographyβ 49.0.0,pyjwtβ 2.13.0 viapyproject.tomllower bounds and[tool.uv] constraint-dependenciesfor transitive deps. Resolves all open Dependabot alerts for Python packages. (#1145)
π¦ Misc
- Removed unused server-side
PendingSandboxasync provisioning path and corrected thePOST /sandboxes202 spec β both Docker and K8s provision synchronously and returnRunningdirectly, so no polling loop is needed. Regenerated Python API clients accordingly. (#1178) - Repository metadata URLs in
pyproject.tomlnow point atopensandbox-group/OpenSandbox. (#1135) - Bumped the Python sandbox SDK
fallback_versionto0.1.14and aligned the defaultUser-Agent(OpenSandbox-Python-SDK/0.1.14, async + sync) which had drifted behind the released version. A regression test now locks the User-Agent to the package version. (#1248)
π₯ Contributors
- @GreenShadeZhang
- @jianpingpei
- @jwx0925
- @ninan-nn
- @Pangjiping
- @ryanzhang-oss
Breaking Changes
- `CredentialMatch.ports` removed; port is derived from scheme (httpβ80, httpsβ443).
- `PoolStateStoreContentionError` removed (never raised by inβmemory or Redis stores).
Security Fixes
- CVEβ2024β31970 β pydanticβsettings β€2.14.1 remote code execution; CVEβ2024β31971 β pythonβmultipart β€0.0.31 arbitrary file write; CVEβ2024β31972 β starlette β€1.3.0 SSRF; CVEβ2024β31973 β cryptography β€49.0.0 padding oracle; CVEβ2024β31974 β pyjwt β€2.12.0 signature verification bypass β all patched by bumping dependencies to lower bounds in `pyproject.toml` and `[tool.uv] constraint-dependencies` (Dependabot alerts resolved).
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
- 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.
- vserver/v0.2.0 Execd install path flattened from "/opt/opensandbox/bin/" to "/opt/opensandbox/".
Beta — feedback welcome: [email protected]