T05 · Unauthorized Access and Privilege Escalation
- Location
distribution-manifest.json:2- Finding
Runtime Network and Persistent-Write Operations Exceed Declared Capabilities
- Content
View full analysis
Vulnerability Details
File Location:
distribution-manifest.json:2-6; related behavior inSKILL.md:40-41, 52, 59-61, 68
Vulnerability Type: Capability declaration mismatch and least-privilege boundary violation
Risk Level: MediumVulnerable Code Snippets
distribution-manifest.json:2-6declares only inline delivery and canonical-state read access:json "capabilities": [ "inline-delivery", "canonical-state-read" ], "capability_ceiling": "lite",However,
SKILL.md:40-41instructs the agent to retrieve external content and perform persistent writes:markdown - **Reads**: the canon and its history from `memory/narrative-registry/canon.md` + `memory/narrative-registry/versions.md` (read-only; [narrative-registry](../../../protocol/narrative-registry/SKILL.md) owns the record); the live brand surfaces (own pages/decks/listings, User-provided or scraped) and their change history via `scripts/connectors/wayback.py`; competitor narrative context from [category-narrative-mapper](../../trace/category-narrative-mapper/SKILL.md) in `memory/narrative/category-narrative-mapper/`; resonance signals from a prior [narrative-resonance-monitor](../narrative-resonance-monitor/SKILL.md) run when present. - **Writes**: the drift report + repositioning-trigger set to `memory/narrative/narrative-drift-monitor/`; any unverifiable claim surfaced on a surface to `memory/events/claims.ndjson` via an authorized `operation: propose` request to `registry-events.py` marked `[needs source]` (this skill never adjudicates); a proposed canon re-version is never written here — it is submitted to `memory/events/narrative.ndjson` via an authorized `operation: propose` request to `registry-events.py` only when a trigger genuinely fires.SKILL.md:52additionally identifies external connector operations:markdown Everything is Tier-1 keyless: the canon and version history from project memory (`memory/narrative-r ...[truncated 4258 chars]- Remediation
View remediation
Remediation Suggestions
- Add explicit manifest capabilities for outbound network retrieval and scoped project-state writes.
- Restrict network access to documented connectors and approved destinations, such as the Wayback CDX endpoint. Require separate opt-in authorization for optional GDELT or Tavily access.
- Restrict writes to:
memory/narrative/narrative-drift-monitor/- Authorized proposal operations for
memory/events/claims.ndjson - Authorized proposal operations for
memory/events/narrative.ndjson
- Preserve the existing confirmation requirement and extend it so every persistent write clearly displays the destination, operation type, and content summary before execution.
- Enforce the prohibition against direct writes to
memory/narrative-registry/through host-level access controls rather than relying only on textual instructions. - Sanitize and schema-validate externally retrieved or user-provided content before storing it. Ensure fetched instructions remain inert data.
- If the
liteprofile cannot declare or grant these permissions, remove the network and persistence operations and return the report inline only. - Add automated package validation that compares manifest capabilities against references to connectors, scraping, filesystem writes, and event submissions in
SKILL.md.
