Back to skill

Security audit

Pitch Amplifier

Security checks for vulnerabilities and agentic risk

Overview

The skill is a coherent newsroom pitch tool, but it can silently send sensitive reporting clues and local knowledge-graph context to an external LLM when API keys are present.

Review this skill before installing if reporting clues, source identities, allegations, or local graph contents may be confidential. Use it only in an environment without OPENAI_API_KEY or GLM_API_KEY unless you intend to send the raw clue and graph-derived context to the configured LLM provider, or require the publisher to add explicit remote-processing consent and documentation.

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

Error
Location
scripts/skill_pitch_amplifier.py:201
Finding

Undisclosed External Transmission of Confidential Reporting Clues and Local Knowledge-Graph Data

Content
View full analysis
Optional[OpenAI]: api_key = os.environ.get("OPENAI_API_KEY") or os.environ.get("GLM_API_KEY") if not api_key: return None base_url = None if os.environ.get("GLM_API_KEY") and not os.environ.get("OPENAI_API_KEY"): base_url = "https://open.bigmodel.cn/api/coding/paas/v4" kwargs: Dict[str, Any] = {"api_key": api_key} if base_url: kwargs["base_url"] = base_url return OpenAI(**kwargs) LLM_CLIENT = _build_llm_client() ``` Entity extraction transmits the complete, unredacted user input: ```python response = LLM_CLIENT.chat.completions.create( model=DEFAULT_MODEL, messages=[{"role": "system", "content": system_prompt}, {"role": "user", "content": user_text}], temperature=0.1, timeout=40, ) ``` Pitch generation transmits the user input a second time together with locally retrieved graph context: ```python response = LLM_CLIENT.chat.completions.create( model=DEFAULT_MODEL, messages=[ {"role": "system", "content": system_prompt}, {"role": "user", "content": f"Original idea:\n{user_text}\n\nGraph context:\n{graph_context}"}, ], temperature=0.7, timeout=60, ) ``` The final snippet represents the source code's data flow in English: the actual implementation interpolates the same `user_text` and `graph_context` variables into the outbound user message. ### Technical Analysis The Skill is intended to convert an initial reporting clue into a graph-grounded editorial pitch. Reporting clues can contain unpublished allegations, sou ...[truncated 3589 chars]
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (6)

Env Variable Harvesting

High
Category
Data Exfiltration
Confidence
80% confidence
Finding

Code enumerates, copies, or searches environment variables for secrets. Bulk environment access can collect credentials unrelated to the skill's stated purpose.

Content

Scanner excerpt · scripts/skill_pitch_amplifier.py (reported line 252)May include surrounding context.

python
# 惩罚明显脏节点
    if len(name) > 18:
        score -= 15
    if any(token in name for token in ["我们", "记者", "会议听取", "高质高效", "扎扎实实", "按照省委省政府"]):
        score -= 40
    return score

Env Variable Harvesting

High
Category
Data Exfiltration
Confidence
80% confidence
Finding

Code enumerates, copies, or searches environment variables for secrets. Bulk environment access can collect credentials unrelated to the skill's stated purpose.

Content

Scanner excerpt · scripts/skill_pitch_amplifier.py (reported line 310)May include surrounding context.

python
# 惩罚明显脏节点
    if len(name) > 18:
        score -= 15
    if any(token in name for token in ["我们", "记者", "会议听取", "高质高效", "扎扎实实", "按照省委省政府"]):
        score -= 40
    return score

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
87% confidence
Finding

The skill instructs the agent to run a bundled Python script, but the manifest does not declare any explicit tool scope or permissions boundary. That creates an authorization ambiguity: an execution environment may allow broader access than intended, especially since static analysis detected environment-capable code, increasing the chance of unintended access to secrets or host configuration.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The manifest description and workflow content are written to assume Chinese-language use, including Chinese trigger phrases and Chinese output sections, but the file does not say the skill is limited to Chinese users or offer any opt-in language choice. That can violate language/locale policy when a skill implicitly enforces one language without user selection.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The module docstring and all user-facing prompts are written as if the skill operates only in Chinese, and the LLM system prompts instruct behavior exclusively in Chinese. There is no indication that users may choose another language or locale, which conflicts with the policy against forcing a specific language without opt-in.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The skill reads API credentials from environment variables and conditionally sends user-provided reporting clues plus graph-derived context to an external LLM service. That creates an outbound data flow beyond the local city-knowledge-graph purpose described in the manifest, which can expose sensitive user inputs, internal graph contents, or organizational context to third-party infrastructure.

Content

No source excerpt is available for this finding.