Back to skill

Security audit

chat-to-content

Security checks for vulnerabilities and agentic risk

Overview

ClawScan marked this skill suspicious because scanners report that it can select and export another conversation’s history outside the stated current-conversation purpose, with some scan coverage incomplete.

Consider the privacy implications before installing: the reported session fallback could include another project’s conversation in generated material, and transcript writing may occur when checks fail. The Skillspector scan was partial because some local references were unresolved, so the evidence is incomplete. The verdict is suspicious, not malicious; the results do not establish intentional harm.

Vulnerability Patterns
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • 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)

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/extract_session.py
Finding

Session lookup silently falls back to unrelated projects

Content
View full analysis

Impact

Unrelated private conversation content enters the agent's context and the current workspace's source transcript without explicit selection. The normal workflow then uses that transcript to prepare shareable content. External publication or network exfiltration is not demonstrated.

Vulnerability Patterns
  • Output HandlingUnvalidated Output Injection, Cross-Context Output, Unbounded Output
  • Behavioral ASTexec() Call, eval() Call, Dynamic Import
  • Taint TrackingDirect Taint Flow, Variable-Mediated Taint Flow, Credential Exfiltration Chain
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (7)

Tainted flow: 'cmd' from sys.stdin.read (line 335, user input) → subprocess.run (code execution)

Critical
Category
Data Flow
Confidence
90% confidence
Finding

External input (network, user) flows to a code execution sink. This enables remote code execution or command injection.

Content

Scanner excerpt · scripts/render_cards.py (reported line 345)May include surrounding context.

python
Path(os.path.abspath(html_path)).as_uri(),
        ]
        try:
            r = subprocess.run(cmd, timeout=timeout, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
        except Exception as e:
            return False, "浏览器截图异常: %s" % e
        if not os.path.isfile(out_path):

Description-Behavior Mismatch

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

The declared scope is the current conversation, but the extraction behavior can silently select another project's latest conversation when workspace matching fails. In a workflow producing publishable material, this can expose unrelated confidential discussions; prose-level redaction and eligibility checks do not establish authorization to access that conversation.

Content

No source excerpt is available for this finding.

Session resolution can silently substitute another project's conversation for the current conversation.

High
Category
Excessive Agency
Confidence
99% confidence
Finding

When the inferred workspace slug has no matching files, resolve_session searches the entire projects root and returns the most recently modified conversation without confirming its workspace or session identity. This crosses the requested conversation scope and can cause unrelated private history to be exported and incorporated into shareable content.

Content

No source excerpt is available for this finding.

Skill declares no tool scope ('permissions' or 'allowed-tools') but code capabilities were detected: env, file_read, file_write, shell.

Medium
Category
MCP Least Privilege
Confidence
70% confidence
Finding

Without declared permissions the skill's intent is opaque and cannot be validated.

Content

No source excerpt is available for this finding.

The documented check-only mode can still write a transcript.

Medium
Category
Excessive Agency
Confidence
99% confidence
Finding

The --check flag is parsed but never used to suppress writes, and supplying --out-dir writes a transcript even when result['ok'] is false. Although this requires an explicit output-directory argument, callers relying on the documented check-only contract can unexpectedly persist sensitive conversation content or overwrite an existing transcript.

Content

No source excerpt is available for this finding.

subprocess module call

Medium
Category
Dangerous Code Execution
Confidence
70% confidence
Finding

subprocess module calls execute external commands. Without careful input validation, this enables command injection.

Content

Scanner excerpt · scripts/render_cards.py (reported line 345)May include surrounding context.

python
Path(os.path.abspath(html_path)).as_uri(),
        ]
        try:
            r = subprocess.run(cmd, timeout=timeout, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
        except Exception as e:
            return False, "浏览器截图异常: %s" % e
        if not os.path.isfile(out_path):

The naming instructions require English-word slugs without offering a user language choice.

Low
Category
Output Handling
Confidence
89% confidence
Finding

Line 92 requires topic slugs to contain 3–5 lowercase English words and explicitly prohibits Chinese. This imposes a natural-language restriction on generated filenames without user opt-in or a documented justification; requiring filesystem-safe characters alone would not require English vocabulary.

Content

No source excerpt is available for this finding.