Skip to content

docs(security): add CP #190 trust boundary audit - #1220

Draft
0xPlayerOne wants to merge 4 commits into
mainfrom
f2w4/cp190-trust-boundary
Draft

0xPlayerOne wants to merge 4 commits into
mainfrom
f2w4/cp190-trust-boundary

Conversation

@0xPlayerOne

@0xPlayerOne 0xPlayerOne commented Oct 21, 2026 •

Copy link
Copy Markdown
Member

Draft PR published from the verified owner commit; auto-merge is off. This description records the bounded contribution and remaining acceptance gates.

  • Task: 20261021-f2w4-cp190-security-full-outcome-02
  • Native turn: b3a36950-f867-49e4-a482-26c289aa74b9; terminal done, exit 0, cleanup confirmed.
  • Branch/worktree: f2w4/cp190-trust-boundary / /tmp/opencode-fleet-2-20261021/worktrees/F2W4.
  • Base: 27f17bd55e0266439b5b3089163195c9e7a669be; head: 40444c70a5d688628f4ddbc792c91ce957a2c2e9; tree: 8e13b9366c59fe684b0a4f1db31d40a860097cdf; clean; base ancestor verified.
  • Full base-to-head binary diff SHA256: 881d4edd1d874416095c38f2cfca9df6bc12f9e886830461d532f223e4ff2dc7.
  • Manifest (3 new files; +1,878):
    • A docs/evidence/m11-security-trust-boundary-audit-2026-10-21.md
    • A docs/evidence/m11-security-trust-boundary-matrix-2026-10-21.v1.json
    • A scripts/security-trust-boundary-probes.mjs
  • Terminal checks: 28 findings; 20 synthetic probes, 0 harness failures; security probe tests 42 pass and repository tests 31 pass. Smoke 569 passed/6 failed with failures reproduced on pristine base; boundary, architecture, format, secret scan passed.
  • Report Library artifact ID libfile_44239b32cc748191adaa372e8cbcfc1b, SHA256 6dafed9768f347293025bbe1a1dd23803daecc377c2497a178f079ac3cb5985d, 377 lines. Full-profile/human acceptance is not claimed.
  • Remaining acceptance: owner-fix verification, live Local/Hosted/Cloud profiles, and independent human penetration review. Draft PR publication uses the verified owner commit.
  • Publication: draft PR; auto-merge off. This report is not security acceptance, approval, readiness, merge, or issue closure.

Follow-up: counterevidence calibration

Published checked owner commit 43295261c6a8a5ef112e1e319961f3601f6de71b (tree 992713f6bdd4df9ca369ba6ceb236935fb8cd38a), three report/probe files. It recalibrates F01/F02/F04/F09, corrects the F03 citation, and records reachability classes and remaining evidence questions. The report currently classifies 0 critical, 2 high, 22 medium, 2 low, and 2 low-medium findings.

Checks: synthetic probes 20 open / 0 harness failures; report-matrix consistency passed; focused tests 73/0; formatting, lint and secret scan passed. No build, integration, coverage, or live security evidence is claimed. Patch SHA-256: ab40952fb10ab6b324482d343134637cca32221007d5a3c3845ed90ed9f0455c. Draft only; no security acceptance or issue closure.

Andrew Mahoney-Fernandes added 4 commits October 21, 2026 07:38
…credential-free probes

Independent read-only audit of Control Plane issue #190 (security, trust
boundary and adversarial audit) against head 27f17bd.

Three new dedicated paths, no existing file modified:

- docs/evidence/m11-security-trust-boundary-audit-2026-10-21.md: the independent
  review report. Threat/control to entrypoint to evidence matrix across workspace,
  project, runtime, session, tools, models, artifacts and admin; 28 confirmed
  findings with severity, release impact, routed owner and a reproducible
  regression description; the unresolved gates that keep whole-cloud and
  whole-runtime trust acceptance held.
- docs/evidence/m11-security-trust-boundary-matrix-2026-10-21.v1.json: the
  machine-readable matrix and finding register.
- scripts/security-trust-boundary-probes.mjs: 20 credential-free synthetic probes
  that reproduce the confirmed findings. The script exits 0 while every recorded
  finding still reproduces, 2 when an owner fix lands and 1 on a harness failure,
  so a fix that is not mirrored here is visible rather than silent.

No secret was read, no deployed profile was contacted and no penetration traffic
was sent. No existing test, source file, canonical ledger or architecture artifact
was edited; tests/m11-security-probes.test.mjs is untouched because its custody is
not established in this lane. The reviewer approves none of the routed fixes.
…very available head

Every branch in the fleet's shared origin was compared against the audited head
for the files each of the 28 findings depends on. No owner fix for any finding
exists on an available head yet, so the required owner-fix verification has
nothing to verify and stays open.

Four files differ on unmerged branches; every difference is cosmetic or belongs to
an unrelated change (the #612 byte-format wording, the #678 per-model harness map,
a record-equivalence refactor and a scope-trigger move), so all 28 findings stand
on the audited head and on every currently available unmerged branch.
…nd probes

Root's counterevidence was checked against exact source before any wording changed.
Six findings were re-examined; five were reduced in severity and restated with an
explicit reachability class, and one citation was corrected.

- F-01 Critical -> Medium: the relay-client authentication obligation is documented
  and the adapters are opt-in, and the only relay client in the repository is the
  test fake, so no deployed attacker-controlled ingress supports the claim.
- F-02 High -> Medium: create_execution is idempotent through the CommandInbox, and
  the effect-before-receipt order is correct and must not be inverted. The defect is
  that the effect and its receipt are two non-atomic writes and only in-memory
  receipt repositories ship.
- F-04 Medium-High -> Low: thrown errors are already sanitized to
  PROVIDER_OPERATION_FAILED and the composed profiles do not lease, so this is a
  bounded library callback-result contract gap. No deployed credential leakage is
  claimed or demonstrated.
- F-05 Medium-High -> Medium: the Local profile binds loopback and uses an owner-only
  token, so the finding is an authorization-completeness gap.
- F-09 Medium -> Low: the parent data directory is chmod 0700 before SQLite and its
  sidecars are created, so the sidecar mode is defense in depth and no cross-UID read
  is demonstrated.
- F-03 citation corrected: the managed-Pi direct driver is
  packages/managed-pi-adapter/src/index.ts:322, not a module that does not exist.

Every finding now carries a reachability class and a reachability note. Probes
CP190-P09 and CP190-P10 named a nonexistent module and now fail loudly instead of
reporting a missing check for a missing file; CP190-P05 asserts both halves of the
vault boundary; CP190-P13 records the mitigating parent-directory control; CP190-P02,
CP190-P03 and CP190-P04 carry their reachability bounds.

Added eight targeted evidence questions and the exact-path custody result for the two
proposed F-04 paths. No product source, test or fixture was changed, and the
unresolved gates are unchanged, so the acceptance hold stands.
…ct path

Second calibration round. Each finding was traced from its entrypoint through the
authority check and the effect to the point where a control is applied, and each
probe was re-read as a synthetic demonstration rather than as deployed behaviour.

- F-01: the Control Plane ships no relay client, no host adapter and no metadata
  effect at all; the effect is an injected callback and the operation names are
  schema values, not shipped behaviour. No deployed unauthenticated approval path
  is claimed.
- F-02: idempotency is not uniform across payload types. create_execution extends
  the context schema that carries idempotencyKey and is deduped in the CommandInbox;
  submit_input carries no idempotency key; the metadata effect is injected.
- F-03: the direct-local working directory is bounded by operator configuration, not
  by a grant. The managed-Pi child runs in a per-attempt 0700 directory under the
  data directory and the composed spawn policy leaves the working-directory dimension
  unconstrained; the ACP child runs in an operator-configured absolute directory.
- F-04: a positive control the earlier revision missed. The composed model-selection
  path normalizes the leased result and rejects a non-plain carrier before the vault
  screen can miss it; only the two uncomposed raw-result callers can reach it.
- F-09 split: the provider creates and restricts its parent to 0700 before any file
  exists, so it has no traversal path. CP190-F29 added for the pi-durable adapter,
  which creates its own directory without a mode and inherits the guarantee from an
  ancestor.

Five static reachability probes added (CP190-P21 to CP190-P25) and the regression
packet is now owner-specific: every row names the owner, the existing file in that
owner's package where the regression belongs, the credential-free failing condition
and the assertion to add. Those files are proposals, not custody claims.

Findings 28 -> 29, probes 20 -> 25. No severity changed in this round and no gate
was released. No product source, test or fixture was changed.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant