T05 · Unauthorized Access and Privilege Escalation
- Location
SKILL.md:38- Finding
Persistent-State Write Operations Exceed the Declared Capability Ceiling
- Content
View full analysis
Vulnerability Details
File Location:
distribution-manifest.json:2-6;SKILL.md:38-39, 67-68, 74
Vulnerability Type: Capability declaration mismatch and violation of least privilege
Risk Level: MediumThe distribution manifest declares only inline delivery and canonical-state read access:
json "capabilities": [ "inline-delivery", "canonical-state-read" ], "capability_ceiling": "lite",However, the Skill contract directs the agent to perform persistent-state writes and invoke registry tooling:
markdown - **Writes**: a user-facing momentum plan + a reusable summary to `memory/launch/momentum-planner/`; next-moment and date facts to `memory/events/launches.ndjson` via an authorized `operation: propose` request to `registry-events.py` for launch-registry to formalize — this skill never writes the calendar or dossiers directly. - **Promotes**: the chosen next Tier-1 moment, the announcement-tier routing rule, and the relaunch verdict to `memory/hot-cache.md` and `memory/open-loops.md` (ask before writing); propose durable cadence choices as pending-decision items — do not write `decisions.md` directly.Additional instructions require proposals that can modify persistent event state:
markdown 7. **Book the next Tier-1 moment** — name the candidate and check its spacing against the last Tier-1 moment in `memory/launch-registry/calendar.md`. Too-tight stacking is the `M` launch-stacking guardrail: flag it as an audience-fatigue risk with the dates, not as a veto. If no calendar record exists, mark the spacing check NEEDS_INPUT. Submit the moment to `memory/events/launches.ndjson` via an authorized `operation: propose` request to `registry-events.py`. 8. **Claims hygiene** — every milestone or comparative number destined for an announcement is a claim: mark it `[needs source]` and submit it to `memory/events/claims.ndjson` via an authorized `operation: propose` request to `registry-events.py`. This skill never adjudicates subs ...[truncated 3741 chars]- Remediation
View remediation
Remediation Suggestions
- Update
distribution-manifest.jsonto declare every required persistent-state write and tool-execution capability using capability names supported by the host. - Raise the capability ceiling if persistent writes or local tool invocation are incompatible with the
liteprofile. - If the Skill is intended to remain read-only, remove all direct write and script-invocation instructions. Return proposed records inline and require a separately authorized writer Skill to persist them.
- Enforce manifest capabilities at runtime rather than relying solely on instructional compliance. Deny filesystem writes and tool calls that are not explicitly declared.
- Require explicit, narrowly scoped user approval immediately before each write, including the destination path and exact proposed content.
- Restrict
registry-events.pyto an allowlist of approved operations and destination stores, validate all fields, reject path traversal, and prevent arbitrary command or argument injection. - Treat user-provided analytics, changelogs, and community content as data only. Sanitize and validate it before incorporating it into persistent records.
- Add automated package validation that compares file and tool operations described in
SKILL.mdwith the manifest's declared capabilities and rejects inconsistent packages. - Audit the externally referenced
registry-events.pyand downstream memory consumers separately, because they are not included in this artifact.
- Update
