Back to skill

Security audit

ssot-check

Security checks for vulnerabilities and agentic risk

Overview

The skill is transparent and mostly read-only, but its manifest can lead the agent to read files outside the project without clear boundaries.

Install only if you want an agent to scan documentation and approved sibling repositories for copied facts. Review any .ssot.yaml before running check mode, especially paths containing .., and do not use untrusted manifests unless the agent is confined to the intended repositories.

Vulnerability Patterns
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (1)

T05 · Unauthorized Access and Privilege Escalation

Warning
Location
SKILL.md:89
Finding

Unrestricted Out-of-Repository File Reads Through Manifest Paths

Content
View full analysis
/dev/null) \ || REF=$(git -C $S for-each-ref --format='%(refname:short)' refs/remotes | head -1) # No REF at all? The sibling has no remote-tracking ref. Report UNVERIFIED. git -C $S show "$REF:index.html" # the value git -C $S log -1 --format=%cs "$REF" # its as-of date ``` Every command above reads local refs and makes no network call. Quote the as-of date next to the value: a remote-tracking ref is a local mirror and can lag the real remote, and a value whose as-of date you can't state is not a fresh value. Report divergence between the sibling's working tree and that ref as a finding. Do **not** fetch, pull, rebase, checkout, or commit in a repo you are only auditing. `git fetch` is not exempt: it writes the sibling's remote-tracking refs, `FETCH_HEAD`, and packfiles, and makes an unsolicited network call on the user's behalf. `git pull` additionally moves the sibling's working tree, which can clobber uncommitted work. If you cannot establish a value read-only — no remote-tracking ref on disk, or the file is absent from it — report the fact as **UNVERIFIED** ...[truncated 3602 chars]
Remediation
View remediation
Vulnerability Patterns
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (8)

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The skill metadata includes broad trigger phrases like "check for drift" and "find copies of this number," which are generic enough to overlap with ordinary user requests. In systems that auto-invoke skills from natural language, this can cause the skill to run unexpectedly on unrelated prompts, expanding its access to repository contents and potentially leading to unintended file scanning or git command suggestions.

Content

No source excerpt is available for this finding.

Skill Enumeration

Medium
Category
Agent Snooping
Confidence
80% confidence
Finding

Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.

Content

Scanner excerpt · examples/cot-production-discovery/discovery-report.md (reported line 38)May include surrounding context.

md
Live sponsor page (canonical for pricing — `sponsorship/media-kit.md` explicitly
   delegates the media kit to the page): Starter 4 eps at $450/ep, 8 eps at $400/ep,
   Presenting 12 eps at $400/ep ($4,800 total; the Cisco package draft matches).
   `skills/cot-sponsor-package/SKILL.md` still embeds the PREVIOUS tier table —
   old tier names and old per-episode rates (values masked: `<redacted — internal
   historical rates>`). This is the worst kind of copy: a template, so every newly
   generated sponsor package quotes superseded pricing. Similar old-rate tables in

Skill Enumeration

Medium
Category
Agent Snooping
Confidence
80% confidence
Finding

Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.

Content

Scanner excerpt · examples/cot-production-discovery/discovery-report.md (reported line 64)May include surrounding context.

md
Live sponsor page (canonical for pricing — `sponsorship/media-kit.md` explicitly
   delegates the media kit to the page): Starter 4 eps at $450/ep, 8 eps at $400/ep,
   Presenting 12 eps at $400/ep ($4,800 total; the Cisco package draft matches).
   `skills/cot-sponsor-package/SKILL.md` still embeds the PREVIOUS tier table —
   old tier names and old per-episode rates (values masked: `<redacted — internal
   historical rates>`). This is the worst kind of copy: a template, so every newly
   generated sponsor package quotes superseded pricing. Similar old-rate tables in

Skill Enumeration

Medium
Category
Agent Snooping
Confidence
80% confidence
Finding

Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.

Content

Scanner excerpt · examples/cot-production-discovery/discovery-report.md (reported line 66)May include surrounding context.

md
Live sponsor page (canonical for pricing — `sponsorship/media-kit.md` explicitly
   delegates the media kit to the page): Starter 4 eps at $450/ep, 8 eps at $400/ep,
   Presenting 12 eps at $400/ep ($4,800 total; the Cisco package draft matches).
   `skills/cot-sponsor-package/SKILL.md` still embeds the PREVIOUS tier table —
   old tier names and old per-episode rates (values masked: `<redacted — internal
   historical rates>`). This is the worst kind of copy: a template, so every newly
   generated sponsor package quotes superseded pricing. Similar old-rate tables in

Skill Enumeration

Medium
Category
Agent Snooping
Confidence
80% confidence
Finding

Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.

Content

Scanner excerpt · examples/cot-production-discovery/proposed-ssot.yaml (reported line 119)May include surrounding context.

yaml
Live sponsor page (canonical for pricing — `sponsorship/media-kit.md` explicitly
   delegates the media kit to the page): Starter 4 eps at $450/ep, 8 eps at $400/ep,
   Presenting 12 eps at $400/ep ($4,800 total; the Cisco package draft matches).
   `skills/cot-sponsor-package/SKILL.md` still embeds the PREVIOUS tier table —
   old tier names and old per-episode rates (values masked: `<redacted — internal
   historical rates>`). This is the worst kind of copy: a template, so every newly
   generated sponsor package quotes superseded pricing. Similar old-rate tables in

Skill Enumeration

Medium
Category
Agent Snooping
Confidence
80% confidence
Finding

Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.

Content

Scanner excerpt · examples/cot-production-discovery/proposed-ssot.yaml (reported line 133)May include surrounding context.

yaml
Live sponsor page (canonical for pricing — `sponsorship/media-kit.md` explicitly
   delegates the media kit to the page): Starter 4 eps at $450/ep, 8 eps at $400/ep,
   Presenting 12 eps at $400/ep ($4,800 total; the Cisco package draft matches).
   `skills/cot-sponsor-package/SKILL.md` still embeds the PREVIOUS tier table —
   old tier names and old per-episode rates (values masked: `<redacted — internal
   historical rates>`). This is the worst kind of copy: a template, so every newly
   generated sponsor package quotes superseded pricing. Similar old-rate tables in

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
75% confidence
Finding

Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Content

Scanner excerpt · SKILL.md (reported line 117)May include surrounding context.

md
# Proposed .ssot.yaml for cot-production — output of a real discover-mode run, 2026-06-11.
# This is the draft the skill produced for human review. It was NOT written to the
# audited repo (discover mode never writes the manifest without approval).
#
# Repo context: CLAUDE.md's "Single Source of Truth" section was used as the
# canonical-file oracle. Two surfaces are auto-generated by scripts/podcast-metrics.py

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
75% confidence
Finding

Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Content

Scanner excerpt · examples/cot-production-discovery/proposed-ssot.yaml (reported line 3)May include surrounding context.

yaml
# Proposed .ssot.yaml for cot-production — output of a real discover-mode run, 2026-06-11.
# This is the draft the skill produced for human review. It was NOT written to the
# audited repo (discover mode never writes the manifest without approval).
#
# Repo context: CLAUDE.md's "Single Source of Truth" section was used as the
# canonical-file oracle. Two surfaces are auto-generated by scripts/podcast-metrics.py