Summary
A same-UID process inside the agent container can read inherited environment variables from unrelated sibling processes via /proc/<pid>/environ. In this run, the token-like key AWF_ONE_SHOT_TOKENS was repeatedly observable across multiple runner-owned processes with non-zero value length (value not captured).
This indicates an isolation boundary gap for secret-bearing env vars between co-tenant same-UID processes inside the sandbox.
Boundary Violation Type
Process isolation / secret isolation boundary violation:
- Surface:
/proc/<pid>/environ
- Scope: same UID (
runner) unrelated processes
- Impact: token-like env material is discoverable by key and readable in principle through procfs unless mitigated by target process attributes
Methodology (sanitized)
Focused deep dive on process boundary behavior with synthetic controls:
- Baseline process map and procfs posture (
/proc mount options, ptrace_scope, suid_dumpable).
- Detached same-UID synthetic process (
setsid env SD_SYNTH_A=... sleep) and external read of /proc/<pid>/environ.
- AWF process-chain census for key presence + value length only (
AWF_ONE_SHOT_TOKENS) across awf-cmd-1.sh, bash, node, codex PIDs.
- Cross-UID negative control against
/proc/1/environ (unreadable as expected).
- Differential helper tests:
PR_SET_DUMPABLE=0 process became non-readable via sibling /proc/<pid>/environ.
- Toggle test (
dumpable 1 -> 0 -> 1) showed visibility present, then blocked, then restored.
No secret values were printed, stored, or transmitted.
Reproduction Steps (sanitized)
- Start a same-UID detached process with inherited marker env:
setsid env SD_SYNTH_A=<marker> sleep 40 &
- From another same-UID process, test procfs visibility:
tr '\0' '\n' < /proc/<pid>/environ | grep '^SD_SYNTH_A='
- Repeat with active runner-owned process PIDs for key-only/length-only checks on
AWF_ONE_SHOT_TOKENS.
- Validate control:
/proc/1/environ remains unreadable.
- Optional differential:
- Run target process with
PR_SET_DUMPABLE=0; sibling procfs env read should fail.
Observed Results
- Same-UID detached synthetic process env key visible via procfs.
AWF_ONE_SHOT_TOKENS key visible with non-zero length across multiple runner-owned PIDs.
- Root-owned PID 1 environ not readable from runner context.
- Dumpable toggle confirmed dynamic visibility gating.
Version Info
- Workflow run:
24128645516
- Lock file:
.github/workflows/secret-digger-codex.lock.yml
compiler_version: v0.67.2
GH_AW_INFO_CLI_VERSION: v0.67.2
cli_version field: not present in lock metadata
Suggested Mitigations
- Prefer secret delivery mechanisms not exposed through process environment inheritance.
- For sensitive helper processes, set
PR_SET_DUMPABLE=0 where feasible.
- Consider procfs hardening strategies (e.g., hidepid or stricter process separation) in environments where same-UID co-tenancy exists.
- Minimize lifetime/scope of secret-like env vars in long-lived parent processes.
Generated by Secret Digger (Codex) · ◷
Summary
A same-UID process inside the agent container can read inherited environment variables from unrelated sibling processes via
/proc/<pid>/environ. In this run, the token-like keyAWF_ONE_SHOT_TOKENSwas repeatedly observable across multiple runner-owned processes with non-zero value length (value not captured).This indicates an isolation boundary gap for secret-bearing env vars between co-tenant same-UID processes inside the sandbox.
Boundary Violation Type
Process isolation / secret isolation boundary violation:
/proc/<pid>/environrunner) unrelated processesMethodology (sanitized)
Focused deep dive on process boundary behavior with synthetic controls:
/procmount options,ptrace_scope,suid_dumpable).setsid env SD_SYNTH_A=... sleep) and external read of/proc/<pid>/environ.AWF_ONE_SHOT_TOKENS) acrossawf-cmd-1.sh,bash,node,codexPIDs./proc/1/environ(unreadable as expected).PR_SET_DUMPABLE=0process became non-readable via sibling/proc/<pid>/environ.dumpable 1 -> 0 -> 1) showed visibility present, then blocked, then restored.No secret values were printed, stored, or transmitted.
Reproduction Steps (sanitized)
setsid env SD_SYNTH_A=<marker> sleep 40 &tr '\0' '\n' < /proc/<pid>/environ | grep '^SD_SYNTH_A='AWF_ONE_SHOT_TOKENS./proc/1/environremains unreadable.PR_SET_DUMPABLE=0; sibling procfs env read should fail.Observed Results
AWF_ONE_SHOT_TOKENSkey visible with non-zero length across multiple runner-owned PIDs.Version Info
24128645516.github/workflows/secret-digger-codex.lock.ymlcompiler_version:v0.67.2GH_AW_INFO_CLI_VERSION:v0.67.2cli_versionfield: not present in lock metadataSuggested Mitigations
PR_SET_DUMPABLE=0where feasible.