Ardur security is based on least privilege, explicit declaration, runtime enforcement, and verifiable evidence.
Conformance scope (2026-05-19 update): The reference proxy in
python/vibap/implements all three conformance profiles ofverifier-contract-v0.1: Delegation-Core, MIC-State, and MIC-Evidence. The four design-only gaps identified in the 2026-04-28 hostile audit are closed. Seedocs/specs/verifier-contract-v0.1.mdSection 13 ("Reference Implementation Conformance Notes") for the conformance map andpython/tests/test_mic_conformance.pyfor the 29-test validation suite.
- tool calls must match declared tools
- resource access must match declared scopes; absent or empty
resource_scopegrants no resource authority, and unrestricted access requires the sole signed sentinel["**"] - delegated child authority must be a subset of parent authority
- per-session passport replay defense (jti single-use)
- KB-JWT nonce replay store and AAT proof-of-possession default-on
- per-session and per-mission revocation via signed status lists
- receipt chains emit and verify (hash-linked, JWS-signed)
- declared-telemetry absence yields
insufficient_evidence, not a falsecompliant - approval-rate-limit when the Mission Declaration declares an approval policy
All MUST clauses from verifier-contract-v0.1.md that were previously
design-only are now enforced as of the 2026-05-19 hardening round
(t_dcbf560b). The reference proxy now implements:
- runtime-observed
observed_manifest_digest == MD.tool_manifest_digest - per-grant
last_seen_receiptstracking with replay across proxy restarts - MIC-Evidence hidden-hop detection via visible receipt linkage
- explicit invocation-envelope signature verification
No additional verifier layers are required for MIC-State or MIC-Evidence conformance.
python/vibap/semantic_judge.py and
python/vibap/behavioral_fingerprint.py are experimental library surfaces,
not reference-proxy gates. Neither module is imported by
python/vibap/proxy.py. Their environment variables permit provider-backed
object construction for an explicit caller; setting them does not activate an
authoritative enforcement path.
The semantic judge converts provider, parsing, and runtime exceptions into an
advisory UNSURE. The fingerprint helper defaults to policy="fail_open":
raw FAIL rejects, while raw UNSURE proceeds with its diagnostic preserved.
A custom caller can choose policy="fail_closed", which rejects every result
other than OK, but must own the resulting provider-availability, latency, and
cost risks. See the Advisory AI Controls reference.
- prompt injection causing out-of-scope tool use
- resource-scope abuse
- delegation scope widening
- budget double-spend
- receipt tampering, stripping, replay, and forking
- metadata forgery or laundering
- partial observation causing unsafe overclaims
- authorized tools used for unauthorized purpose
The wider hardening roadmap includes:
- deterministic behavioral templates
- streaming reconciliation and active revocation
- manual reconciliation for unresolved
unknownstates - TEE-bound attestation profiles
- nested multi-agent attestation
- tiered governance with downgrade rejection
Important boundary: those hardening directions must not be marketed as fully proven protections until their proof entries reach L5 for the claimed scope.
Before enablement, ardur preflight tool-server can inspect strict JSON MCP and
tool-server configuration for broad filesystem/network grants, shell execution,
secret-like environment exposure, instruction-like metadata, missing content
pins, and ungated side effects. It opens bounded input without following a
final-component symlink and never starts the server, imports its code, reads
referenced secrets, or contacts configured endpoints. Evidence is redacted and
the generated policy skeleton keeps resource/network scopes empty by default.
This scanner is advisory and incomplete by design. Tool annotations and
descriptions are untrusted hints, and a clean static report does not establish
runtime behavior, dependency safety, binary provenance, or endpoint identity.
See Tool-Server Preflight v0.1.
- SSRF-sensitive destinations should be denied by policy where the capability is claimed as release-gated.
- Official artifacts and recordings should be reviewed for secrets before being treated as publishable evidence.
| Tier | Boundary |
|---|---|
fast_hmac |
internal low-risk actions only |
standard_jws |
default receipt path for ordinary governed actions |
strong_eat_tee |
required for high-risk delegated or side-effecting actions |
The reference proxy returns one of five governance decisions for every
evaluated tool call. Only PERMIT allows execution; all others block
the call (fail-closed discipline).
| Decision | Meaning | Fail-closed? |
|---|---|---|
PERMIT |
Tool call is within declared scope, budget, and delegation policy. | N/A (allows execution) |
DENY |
Tool call violates a mission-declared boundary (tool, resource, budget, or delegation). | Yes |
VIOLATION |
A governance invariant is broken (mission tampering, passport revoked, memory integrity failure, delegation splice). More severe than DENY — indicates compromised credentials. |
Yes |
INSUFFICIENT_EVIDENCE |
The verifier cannot make a confident decision due to a transient operational failure (approval operator unavailable, state file corrupted, network error). Might be retried. | Yes |
UNKNOWN |
The verifier observed the call but the evidence is structurally outside the capture boundary (visibility is not "full", tool-call descriptor is incomplete). The honest "I cannot know what happened" outcome. | Yes |
The distinction between INSUFFICIENT_EVIDENCE and UNKNOWN matters for
audit trails: INSUFFICIENT_EVIDENCE records a retryable operational
failure, while UNKNOWN records a genuine observation gap. Both
fail-closed as DENY. Public receipt verdicts map INSUFFICIENT_EVIDENCE
to insufficient_evidence and UNKNOWN to unknown.
When Ardur lacks evidence, it must deny or return unknown rather than
claim safe success.
This document and the comparison docs under docs/comparisons/ describe
what the protocol guarantees and what the reference proxy enforces today.
"What the protocol guarantees" is wider than "what the reference proxy
enforces today." The latter is the conservative claim — use it whenever
you cite Ardur in a security context against a real adversary. The
former is the design that the hardening roadmap is driving toward.