2026-08-11 specification (the Security chapter and the cross-referenced Architecture, Lifecycle, Tasks, Sessions, Files, Errors, and Versioning chapters). HarnessRouter Community Edition is the reference implementation; deployment advice is labelled separately. Passing the conformance suite is not a security certification — the suite probes for path traversal (X-08) as a floor, not proof of safety.1. Authentication and authorization boundaries
The specification scopes authorization at the level of the principal that created an object, not at a per-endpoint granularity beyond authentication itself.
- A server MUST authenticate every endpoint except
GET /v1/uhp(the unauthenticated discovery document). - A server MUST NOT distinguish "no such token" from "token not permitted here" in a way that lets a caller enumerate valid tokens.
- A server MUST NOT echo a credential — the caller's or a provider's — in any response body, error message, event, log line, or artifact.
- A server SHOULD support revoking a credential, and revocation MUST take effect for new requests immediately.
Provider credentials (implementation guidance). The credential a server uses to reach a model provider is the most valuable secret in the system, and the agent's own sandbox is the least trustworthy place in it. The specification therefore advises: do not place a provider credential where the agent's tools can read it; if a harness must receive a credential, issue a short-lived, single-session one and be able to revoke it independently of the underlying key; and MUST NOT accept a caller-supplied upstream URL for a brokered request without validating it against a configured allow-list — an unvalidated upstream turns the server into an SSRF proxy carrying its own credential.
2. Object and resource scoping
- Every object — harness, response, session, container, file — MUST be scoped to the principal that created it.
- A request for an object outside the caller's scope MUST return
404, never403. A403confirms the id exists, which is exactly what an enumerating attacker wants (Architecture §5). - Scope MUST be enforced on every operation, not only on read. Cancel, delete, continue, and download are all object access.
Implementation guidance. The conformance suite cannot fully verify scoping with a single credential. An implementer SHOULD run the equivalent check with two principals: create an object as A, then attempt every operation on it as B, and confirm each returns 404.
3. Files and workspace boundaries
An agent can be persuaded to write a file with chosen content and a chosen name, so everything that serves artifacts MUST treat them as hostile.
- Artifact downloads MUST be served with
X-Content-Type-Options: nosniff; without it, an artifact namedx.htmlbecomes stored XSS against the client's own origin (Files §3). - Artifacts SHOULD be served from a different origin than the console or application UI, so a successful injection cannot reach first-party cookies or storage.
- A server MUST NOT allow a
container_id/file_idpair to address anything outside its container. Path traversal through artifact ids is called out as the most likely serious vulnerability in a UHP implementation; the conformance suite probes for it (X-08). - A server SHOULD cap artifact size and count per session.
4. Error and information-leakage hygiene
error.messageMUST be safe to show a user: no credentials, internal hostnames, file paths, or stack traces (Errors §1).- A server SHOULD log the detail it withholds, returning a correlation id in
error.detailso an operator can diagnose what a caller cannot see. - (Repeated from §1) a server MUST NOT echo any credential in a response body, error message, event, log line, or artifact.
5. Harness, tool, and prompt-injection risk
A harness that reads a web page, a repository, or an uploaded file may encounter instructions addressed to it. UHP cannot prevent this, and the specification says so plainly rather than pretending otherwise.
What the protocol provides, and a client SHOULD use:
disabledToolson a configured harness — the smallest tool set is the smallest injection surface.max_stepandtimeout_seconds— a bounded task cannot be induced into an unbounded one.- Separate harnesses for separate trust levels; a harness that reads untrusted input SHOULD NOT be the same configured harness that holds privileged tools or MCP servers.
- The event stream — tool calls are visible as they happen, so a client can surface or gate them.
A server MUST NOT claim that any of this makes an agent safe to point at untrusted input. Prompt-injection resistance is the client's responsibility, not a protocol guarantee.
6. Resource exhaustion and concurrency
- A server MUST bound task duration, and MUST report
incompleterather thancompletedwhen a budget stopped the work (Lifecycle §3). - A server MUST refuse a second concurrent task in the same session (
session_busy) — two agents in one working directory is not a defined state and is also a cheap way to multiply cost. - A server SHOULD rate-limit task creation per principal and SHOULD expose remaining budget through
rate_limit_errorresponses rather than failing opaquely. - A server MUST bound upload size and reject with
file_too_largerather than truncating; a silently truncated input produces a confident, wrong answer.
7. Cancellation, retry, duplicate execution, and idempotency
These concerns are governed by several chapters together. The normative facts:
- Cancellation. A running task is cancelled with
POST /v1/responses/{response_id}/canceland a running session withPOST /v1/sessions/{session_id}/cancel; deleting a session (DELETE /v1/traces/{session_id}) cancels any in-flight task first. A server MUST refuse a second concurrent task in the same session, which also prevents duplicate concurrent execution (§6). - Idempotency. When the
idempotencycapability is advertised, a submit can carry anIdempotency-Keyheader so a retried submission does not create a duplicate task (Tasks chapter). - Retry. A conformant client MUST treat an unknown error
codeas itstype; an unrecognisedserver_erroris still retryable, andrate_limit_errorexposes remaining budget rather than failing opaquely (Versioning client rules).
Interpretation: idempotency and the single-concurrent-task rule are the protocol's mechanisms against accidental duplicate execution; they are controls on the request/response contract, not on the agent's internal behaviour.
8. Transport
- TLS MUST be used except on loopback.
- A server SHOULD send
Strict-Transport-Security. - A server serving any HTML MUST send
X-Frame-Options: DENYor an equivalentframe-ancestors 'none'policy.
9. Data handling and retention
- Session artifacts and transcripts MUST be unreachable after the session is deleted.
- A server SHOULD document its retention period. "Indefinite" is an answer; silence is not.
- Session sharing, where implemented, MUST be read-only and revocable, and MUST NOT expose credentials or another principal's data (Sessions §5).
10. Client and server trust responsibilities
| Party | Responsibilities stated by the specification |
|---|---|
| Server | Authenticate all endpoints but discovery; never echo credentials; scope every object to its creator and return 404 (not 403) for out-of-scope access; serve artifacts with nosniff from a boundary that contains traversal; keep error.message safe and log the withheld detail; bound task duration, concurrency, and upload size; use TLS and frame-protection; erase artifacts on session deletion; make sharing read-only. |
| Client | Treat prompt injection as in-scope; configure least-privilege harnesses (disabledTools, max_step, timeout_seconds, separate trust levels); monitor the event stream; retry unknown server_error codes and honour rate_limit_error; use Idempotency-Key when offered; verify scoping with a two-principal test. |
11. Reporting a vulnerability
Vulnerabilities in the reference implementation or in the specification follow private disclosure, not a public issue; see the repository's security policy. A specification bug that makes a secure implementation impossible is treated as a vulnerability, not as a documentation defect.
Documented vs interpretation
| Documented (explicit in 2026-08-11) | Not stated — do not assume |
|---|---|
Authentication on all endpoints but GET /v1/uhp; no credential echo; token-enumeration resistance; immediate revocation. | A specific auth scheme, token format, or MFA requirement. |
Per-principal object scoping with 404 (not 403) for out-of-scope; traversal contained to the container. | Per-object ACLs, role-based access control, or tenant isolation beyond principal scoping. |
nosniff on artifacts; different-origin serving advised; size/count caps advised; safe error.message. | A content-security-policy mandate or a specific artifact-scanning requirement. |
| Tool-injection controls via harness config; server must not claim safety; bounded steps/timeouts. | That UHP detects or neutralises prompt injection. |
TLS except loopback; HSTS advised; X-Frame-Options: DENY / frame-ancestors 'none'; erasure on session delete. | Encryption-at-rest mandates, audit-log formats, or CORS policy specifics. |
Related pages
Read governance and versioning, conformance, architecture, the HTTP API map, the specification guide, and the glossary.
Primary sources
- UHP 2026-08-11 Security considerations
- UHP 2026-08-11 Architecture (object scoping, §5)
- UHP 2026-08-11 Lifecycle (authentication §2, task states §3)
- UHP 2026-08-11 Tasks (idempotency)
- UHP 2026-08-11 Sessions (sharing §5, cancellation)
- UHP 2026-08-11 Files (artifact boundaries §3)
- UHP 2026-08-11 Errors (error hygiene §1)
- UHP VERSIONING.md (client retry rules)