Loading...
Skip to main content

CVE-2026-61670 — microsandbox: Secret values exposed in...

MEDIUM

microsandbox: Secret values exposed in world-readable process arguments

Published September 22, 2026Updated September 22, 2026Source: osv

Summary

## Summary When the SDK spawns a sandbox, the `msb sandbox` child process receives the full network configuration as an inline `--network-config <json>` command-line argument, and any per-sandbox environment as repeated `--env KEY=VALUE` arguments. On Linux a process's arguments are world-readable via `/proc/<pid>/cmdline`, and on both Linux and macOS they are visible to other local processes via `ps`. Because the network configuration carries the real secret values used for host-side secret substitution, any unprivileged local user (or any process running as a different user on the same host) can read those secrets directly out of the process listing for as long as the sandbox is running. This defeats the "secrets that can't leak" guarantee for the host side of the boundary. ## Details The SDK serializes the entire `NetworkConfig`, including the real (non-placeholder) secret values, and pushes it onto the child argv, in `sdk/rust/lib/runtime/spawn.rs` near line 1241: ```rust let net_json = serde_json::to_string(&config.network) .expect("failed to serialize network config"); args.push(OsString::from("--network-config")); args.push(OsString::from(net_json)); // secrets land in argv here ``` The CLI accepts it only as an inline string and parses it with `serde_json::from_str`, so there is no off-argv channel today. The field is declared at `crates/cli/lib/sandbox_cmd.rs` line 152 and parsed near line 234: ```rust /// Network configuration as JSON. pub network_config: Option<String>, // parsed near line 234 .map(|json| serde_json::from_str::<NetworkConfig>(json).expect(...)) ``` The same exposure applies to environment values, which are passed one per argument (`spawn.rs` ~lines 1249-1251): ```rust for (key, value) in &config.env { args.push(OsString::from("--env")); args.push(OsString::from(format!("{key}={value}"))); } ``` Any secret a user places in `env` or in the network config (e.g. upstream API keys used for the host-side proxy substitution) is therefore present in the process command line. The fix and reusable in-repo patterns are tracked, from a readability angle, in issue #997: passing bulky config over an inherited file descriptor (`--network-config-fd <n>`) the way `--parent-watch-fd` already does (`spawn.rs` lines 207-233, `vm::PARENT_WATCH_FD`) removes the values from argv entirely. An env-var alternative does not fully fix this as `/proc/<pid>/environ` is still readable by the same uid and root and is inherited by children, so an fd or reference handoff is the appropriate channel for secret material. ## PoC 1. Launch any sandbox that includes a secret, e.g. a network config with an upstream credential to be substituted, or an `--env` carrying a token. 2. From a separate, unprivileged shell on the same host (no root, different local user is sufficient): 3. The output contains the full `--network-config {...}` JSON with the real secret values, and any `--env KEY=VALUE` secrets, in cleartext. No special privileges, no debugger, and no access to the spawning user's session are required. The window of exposure is the entire lifetime of the sandbox process. ## Impact Local information disclosure of secrets (CWE-214: invocation of process using visible sensitive information / CWE-200). Any local user or co-resident process on the host running a microsandbox can read credentials that were meant to stay host-side and never reach untrusted code. This is most serious on shared or multi-tenant hosts, CI runners, and developer machines running other untrusted tooling, where the threat model explicitly assumes the secret never leaves the trusted host boundary. The vulnerability does not require code execution inside the sandbox; it is exploitable purely from the host's process table.

Advisory Timeline

  • First published September 22, 2026 (20 days ago).
  • Last revised September 22, 2026 — 0 days after initial publication.

Remediation

Upgrade to the fixed version using your package manager.

Cargo
Update microsandbox to 0.5.10 or later
cargo update -p microsandbox --precise 0.5.10

After upgrading, run your dependency scanner again to confirm the vulnerability is resolved.

Affected Packages (1)

Affects 1 ecosystem: crates.io (1).

PackageEcosystemAffectedFixed In
microsandbox
crates.io
All versions0.5.10

Vulnerability Classification

Common Weakness Enumeration (CWE) identifiers for this vulnerability type.

CVSS Score Breakdown

What the CVSS (Common Vulnerability Scoring System) 6.5 score means for each attack dimension.

Attack Vector
Local
Attack Complexity
Low
Privileges Required
Low
User Interaction
None
Scope
Changed
Confidentiality
High
Integrity
None
Availability
None

CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:N/A:N

Frequently Asked Questions

What is CVE-2026-61670?
microsandbox: Secret values exposed in world-readable process arguments This vulnerability has been assigned a severity rating of MEDIUM (CVSS score: 6.5/10).
How do I check if my project is affected by CVE-2026-61670?
CVE-2026-61670 affects microsandbox. Use GeekWala's free vulnerability scanner to check your dependencies against CVE-2026-61670 and 200,000+ other known vulnerabilities.

Severity & Exploitability

CVSS Score
6.5

Exploitation requires specific conditions or has limited impact. Remediate within weeks.

Also Known As

GHSA-m8f5-rh7h-vgg3

Related CVEs

  • CVE-2026-102821
    MEDIUM

    Russh: Unbounded memory exhaustion via CHANNEL_OPEN flood during a client-stalled rekey

  • CVE-2026-102820
    MEDIUM

    pageant: Out-of-bounds read / oversized allocation in `pageant` MemoryMap::read via a malicious Pageant agent (Windows)

Check if you're affected

Scan your dependencies to see if this vulnerability affects your projects.

Scan Your Dependencies