Skip to content

docs(security): model Agent Artifact Admission threats - #404

Merged
seonghobae merged 2 commits into
feat/agent-artifact-admissionfrom
codex/agent-admission-threat-model-20260913
Sep 13, 2026
Merged

docs(security): model Agent Artifact Admission threats#404
seonghobae merged 2 commits into
feat/agent-artifact-admissionfrom
codex/agent-admission-threat-model-20260913

Conversation

@seonghobae

Copy link
Copy Markdown
Contributor

Child of #129 after ordinary integration of #403. This lane repairs docs/security/threat-model.md only, plus a structural regression contract; it does not change admission runtime/policy or copy foreign-owner implementation logic.

Fresh review of exact parent #129@ad74b915ef2b41e8551a787ee38f6ccbddebee81 found the code-current architecture now names Wardnet's Agent Artifact Admission boundary, but docs/security/threat-model.md still models only the pre-admission gateway/control-plane assets and threats. It omits immutable artifact identity, admission receipts, foreign-owner evidence boundaries, and artifact/evidence confusion attacks.

Exact test-only head a1210e32bd0579b4028eb86fa3db54cbc1a2ffcf adds tests/agent_artifact_threat_model_contract.rs. The contract requires explicit Agent Artifact Admission assets/boundaries, digest/receipt semantics, fail-closed mutable-branch rejection, canonical foreign owners (quarantine-sandbox-runtime, EgressWeave, contextual-orchestrator, appguardrail), and three threat classes: artifact identity substitution, forged/stale foreign-owner evidence, and admission-authority confusion. Production/security documentation is byte-identical to the parent at this RED head.

Minimum causal repair is the threat model and standards traceability only. NIST SP 800-218 v1.1 remains the current final SSDF while SP 800-218 Rev.1/v1.2 is still a draft; NIST SP 800-161 Rev.1 Update 1 is the current final C-SCRM publication. Do not edit #361 PRD/TRD/UML, #111 ADR, #130 gap baseline, CGC/EA, central workflows, or sibling-owner source.

Keep Draft until exact-head RED/GREEN, review/thread state, and candidate-base identity are fresh. No force push, destructive rebase, self/model approval, gate weakening, source churn, or bypass.

@coderabbitai

coderabbitai Bot commented Sep 13, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Advanced

Run ID: 6d560a2f-6752-4411-b738-666813ebf8d9

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@seonghobae
seonghobae marked this pull request as ready for review September 13, 2026 10:02
@seonghobae
seonghobae merged commit 7c97ec5 into feat/agent-artifact-admission Sep 13, 2026
2 of 3 checks passed
@seonghobae
seonghobae deleted the codex/agent-admission-threat-model-20260913 branch September 13, 2026 10:02

@devin-ai-integration devin-ai-integration Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Devin Review found 2 potential issues.

Devin Review

| DNSBL abuse | Reputation damage | Loopback response-code validation | Authoritative DNS service, signing, publisher workflow |
| Secret disclosure | Admin compromise | Support bundle excludes admin token; secrets bootstrapped into credential registry (`WAF_IDS_CREDENTIALS_PATH` preferred over long-lived env); health exposes source label only | External secret manager / SSO, rotation, access review |
| Artifact identity substitution | A reviewed package coordinate is replaced by different bytes, registry/owner identity, workspace manifest, or installer interpretation while retaining apparent admission | Agent Artifact Admission binds exact structured coordinates, artifact digest, workspace-manifest digest, submitted argv, policy identity, and required evidence; mismatches deny | Released retrieval/executor evidence must cryptographically bind the retrieved bytes and effective execution input back to the same admission identity |
| Forged or stale foreign-owner evidence | A sandbox/egress/orchestration/guardrail claim is replayed, fabricated, or attached to a different artifact/policy decision | Wardnet consumes foreign evidence only through released/versioned contracts, validates required identity/freshness fields, and fails closed on absent, malformed, stale, unverifiable, or mutable-branch evidence | Cryptographic issuer identity, anti-replay/expiry semantics, immutable release provenance, and conformance tests per owner contract |

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔍 Foreign evidence control exceeds runtime

The current control claims foreign-evidence identity and freshness validation. InstallIntent and AdmissionPolicy expose no foreign receipt, issuer, or freshness fields.

Devin Review

Was this helpful? React with 👍 or 👎 to provide feedback.

Comment on lines +12 to +36
for marker in [
"Agent Artifact Admission",
"artifact digest",
"admission receipt",
"quarantine-sandbox-runtime",
"EgressWeave",
"contextual-orchestrator",
"appguardrail",
"fail closed",
"mutable branch",
] {
assert!(
threat_model.contains(marker),
"threat model must retain the code-current security marker {marker:?}"
);
}

for threat in [
"Artifact identity substitution",
"Forged or stale foreign-owner evidence",
"Admission-authority confusion",
] {
assert!(
threat_model.contains(threat),
"threat model must retain the Agent Artifact Admission threat {threat:?}"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔍 Substring contract misses structural regressions

Global contains checks survive removal of the modeled asset, boundary, or threat row when each phrase remains elsewhere.

Devin Review

Was this helpful? React with 👍 or 👎 to provide feedback.

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