Back to skill

Security audit

Game Sentiment Monitor

Security checks for vulnerabilities and agentic risk

Overview

This skill mostly matches game sentiment monitoring, but it insecurely handles account/API secrets and can persist runtime changes into its own instruction files.

Review before installing. Use this only if you are comfortable with the agent browsing many public sites, writing reports/state files, sending Feishu summaries, and potentially using stored NGA and YouTube credentials. Avoid pasting real passwords or API keys into chat; prefer a separate secret manager or remove the NGA/YouTube credential paths before use.

Vulnerability Patterns
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • 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
  • 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 (2)

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:114
Finding

Plaintext Credential Collection, Storage, and Exposure Through Tool Arguments

Content
View full analysis

Vulnerability Details

File Location: SKILL.md:114-115, 235, 273, 307; references/channel-strategy.md:104-116, 206-211
Vulnerability Type: Plaintext secret handling and potential credential disclosure
Risk Level: Medium

Relevant Code

SKILL.md:273:

text
5. **NGA login** (if enabled) — Read credentials from `{WORKSPACE}/game-sentiment-data/.credentials/accounts.json`, use Playwright iframe DOM manipulation + captcha screenshot + AI recognition.

references/channel-strategy.md:108-115:

javascript
(el) => {
  const doc = el.contentDocument;
  const inputs = doc.querySelectorAll('input[type="text"], input[type="password"], input:not([type])');
  inputs[0].value = USERNAME; inputs[0].dispatchEvent(new Event('input', {bubbles:true}));
  inputs[1].value = PASSWORD; inputs[1].dispatchEvent(new Event('input', {bubbles:true}));
}

references/channel-strategy.md:206-211:

text
1. Search videos:
GET https://www.googleapis.com/youtube/v3/search?part=snippet&q={query}&type=video&order=date&maxResults=10&key={API_KEY}

3. Retrieve video details:
GET https://www.googleapis.com/youtube/v3/videos?part=statistics,snippet&id={videoId}&key={API_KEY}

4. Retrieve comments:
GET https://www.googleapis.com/youtube/v3/commentThreads?part=snippet&videoId={videoId}&maxResults=20&order=relevance&key={API_KEY}

The setup instructions at SKILL.md:114-115 additionally direct the user to provide the YouTube API key and NGA username and password through the conversation so that the Agent can store them. The documented destination is the plaintext workspace file .credentials/accounts.json.

Technical Analysis

The Skill treats long-lived authentication secrets as ordinary workspace data. It does not require an operating-system keychain, platform secret manager, encrypted credential store, or restrictive file permissions. Merely placing the file in a directory named .credentials or excluding ...[truncated 2318 chars]

Remediation
View remediation

Remediation Suggestions

  1. Replace .credentials/accounts.json with the platform's secret manager, operating-system keychain, or another encrypted credential facility.
  2. Do not ask users to paste passwords or API keys into ordinary conversation messages. Use a dedicated secret-input mechanism that prevents values from entering chat history.
  3. If file-based storage is unavoidable:
    • Create the credential file with owner-only permissions.
    • Reject execution when permissions are broader than required.
    • Keep credentials outside report, raw-data, archive, and backup directories.
    • Encrypt secrets at rest with a key not stored beside the ciphertext.
  4. Ensure secrets are redacted from tool calls, browser-evaluation traces, exceptions, progress messages, reports, and diagnostic logs.
  5. Use scoped and revocable credentials. Restrict the YouTube key by API, project, quota, and permitted request origin where supported.
  6. Avoid placing API keys in logged URLs. Use authorization headers where the service supports them; otherwise configure URL and telemetry redaction explicitly.
  7. Prefer a session token or isolated service account over reuse of the user's primary NGA password.
  8. Document credential deletion, rotation, expiration, and incident-response procedures.

T02 · Agent Memory Poisoning

Warning
Location
SKILL.md:166
Finding

Runtime Data Is Persisted Into a Trusted Skill Instruction File

Content
View full analysis

Vulnerability Details

File Location: SKILL.md:25, 166; references/channel-strategy.md:48
Vulnerability Type: Persistent instruction and state poisoning
Risk Level: Medium

Relevant Code

SKILL.md:25 requires every execution to load all reference files, including references/channel-strategy.md.

The instruction at SKILL.md:166 directs the Agent to add user-provided custom channels to the configuration and record the dynamically explored access strategy in references/channel-strategy.md.

references/channel-strategy.md:48 contains another runtime mutation rule:

text
**Freeze rule**: If a channel fails healthcheck on 3+ consecutive runs, mark as "frozen" in this file with date and reason. Frozen channels are excluded from future runs until manually reviewed.

Technical Analysis

The design mixes trusted Skill instructions with mutable runtime state. references/channel-strategy.md is both:

  • A mandatory instruction source loaded during every run.
  • A destination for dynamically discovered strategies and channel-health decisions.

A custom channel name, endpoint, or dynamically explored access strategy can be influenced by user input or untrusted external content. Persisting free-form strategy information in a file that future Agent sessions must interpret as instructions creates a durable trust-boundary violation.

The freeze rule also writes operational state into the Skill package. Although a failed health check is not inherently malicious, externally induced failures could persistently disable channels. More importantly, the same reference file is authorized to receive custom access strategies, which can include attacker-influenced endpoints or instructions.

This behavior also contradicts the Skill's documented separation between ClawHub-managed Skill code and workspace-level user data. Package updates could overwrite the state, while poisoned state could affect multiple games or later users of the same installatio ...[truncated 1437 chars]

Remediation
View remediation

Remediation Suggestions

  1. Treat all files inside the installed Skill package as immutable at runtime.
  2. Store channel health, consecutive failure counts, frozen status, and custom-channel definitions under a workspace data directory as structured JSON.
  3. Separate trusted built-in strategies from untrusted user-defined configuration.
  4. Do not persist free-form Agent instructions generated from website content. Store only validated fields such as:
    • Channel identifier
    • Approved hostname
    • Fixed request method
    • Allowed path pattern
    • Last health-check result
    • Failure count
  5. Validate custom endpoints against an explicit allowlist or require clear user approval for each hostname before first use.
  6. Block loopback, link-local, private-network, cloud-metadata, and non-HTTP destinations unless the declared task explicitly requires them.
  7. Require renewed approval before activating or materially changing a custom strategy.
  8. Keep freeze decisions scoped to an individual game and user, and provide an automatic expiration or manual recovery mechanism.
  9. Escape and validate all externally derived strings before storing them, and never reload them as executable Agent instructions.
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Memory PoisoningPersistent Context Injection, Context Window Stuffing, Memory Manipulation
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
Findings (29)

Missing User Warnings

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

The skill explicitly asks users to paste API keys and account credentials into chat without warning about storage, exposure, retention, or safer alternatives. Chat channels and model logs are often inappropriate for raw secret handling, making this a direct secret-exposure risk.

Content

No source excerpt is available for this finding.

Ssd 3

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

The skill instructs collection, plaintext storage, and reuse of user credentials for automated access, which is a classic secret-handling anti-pattern. If the workspace, logs, prompts, or generated reports are exposed, third-party accounts can be compromised and reused without the user’s awareness.

Content

No source excerpt is available for this finding.

Ssd 3

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The design requires reading a shared credential file and using stored secrets during execution, concentrating sensitive data in a predictable location. This increases the blast radius of any compromise and makes accidental leakage through prompts, traces, backups, or file sync more likely.

Content

No source excerpt is available for this finding.

Ssd 3

High
Category
Not specified by scanner
Confidence
97% confidence
Finding

Automating login with stored credentials plus captcha handling increases exposure of account secrets and crosses into high-risk account automation. In the context of a public sentiment-monitoring skill, this is more dangerous because it normalizes privileged access and may violate platform protections while handling secrets insecurely.

Content

No source excerpt is available for this finding.

Hidden Instructions

High
Category
Prompt Injection
Confidence
70% confidence
Finding

Hidden instructions were detected in comments or invisible text. These could contain malicious directives. Manual review is recommended.

Content

Scanner excerpt · references/channel-strategy.md (reported line 75)May include surrounding context.

md
### TapTap (Playwright) ✅
1. `browser_navigate` to `https://www.taptap.cn/search?kw={GAME_NAME}` 动态查找 APP ID
2. 验证游戏名匹配后,进行**双排序采集** <!-- [2026-04-05] #21 TapTap 双排序采集规避水军 -->

**第一轮:最新排序**
3. `browser_navigate` to `https://www.taptap.cn/app/{APP_ID}/review?order=new`

Hidden Instructions

High
Category
Prompt Injection
Confidence
70% confidence
Finding

Hidden instructions were detected in comments or invisible text. These could contain malicious directives. Manual review is recommended.

Content

Scanner excerpt · references/channel-strategy.md (reported line 75)May include surrounding context.

md
### TapTap (Playwright) ✅
1. `browser_navigate` to `https://www.taptap.cn/search?kw={GAME_NAME}` 动态查找 APP ID
2. 验证游戏名匹配后,进行**双排序采集** <!-- [2026-04-05] #21 TapTap 双排序采集规避水军 -->

**第一轮:最新排序**
3. `browser_navigate` to `https://www.taptap.cn/app/{APP_ID}/review?order=new`

Hidden Instructions

High
Category
Prompt Injection
Confidence
70% confidence
Finding

Hidden instructions were detected in comments or invisible text. These could contain malicious directives. Manual review is recommended.

Content

Scanner excerpt · references/channel-strategy.md (reported line 128)May include surrounding context.

md
1. `browser_navigate` to `https://tieba.baidu.com/f?kw={GAME_NAME_ENCODED}&ie=utf-8&tp=0`
2. 等待 3 秒渲染

**Level 1(优先):Accessibility Snapshot** <!-- [2026-04-05] #22 -->
3. `playwright.browser_snapshot` 获取 accessibility tree
4. 从 snapshot 文本中正则提取帖子:标题(link text)、作者、回复数、时间
5. 如提取到 ≥3 条帖子,使用此结果

Hidden Instructions

High
Category
Prompt Injection
Confidence
70% confidence
Finding

Hidden instructions were detected in comments or invisible text. These could contain malicious directives. Manual review is recommended.

Content

Scanner excerpt · references/channel-strategy.md (reported line 128)May include surrounding context.

md
1. `browser_navigate` to `https://tieba.baidu.com/f?kw={GAME_NAME_ENCODED}&ie=utf-8&tp=0`
2. 等待 3 秒渲染

**Level 1(优先):Accessibility Snapshot** <!-- [2026-04-05] #22 -->
3. `playwright.browser_snapshot` 获取 accessibility tree
4. 从 snapshot 文本中正则提取帖子:标题(link text)、作者、回复数、时间
5. 如提取到 ≥3 条帖子,使用此结果

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The 'Use when' section mixes specific game-sentiment requests with broad phrases like 'track player complaints', 'monitor game reviews', 'check game community health', and examples such as 'run sentiment scan' or '跑一下舆情'. These could match common conversational requests without clearly constraining activation to this structured multi-channel monitoring workflow.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The skill asks users to provide third-party credentials and API keys in chat and store them for later use, which exceeds the minimum capability needed for public sentiment monitoring. This creates unnecessary collection of secrets, increases breach surface, and can expose external accounts if the workspace, logs, or prompts are compromised.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The skill directs installation of Playwright via mcporter from within the workflow, introducing system modification behavior beyond core analysis. Allowing an analysis skill to trigger package installation increases the attack surface and can lead to unauthorized environment changes if invoked casually or automatically.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The skill proposes package installation and filesystem writes without a clear user-facing warning about modifying the environment and storing persistent data. Users may trigger the skill for analysis and unknowingly authorize changes to their system or workspace.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The report format is specified as '中文 Markdown 文件 + 飞书消息摘要', which imposes a specific language/locale by default. There is no opt-in or alternative language selection despite the skill monitoring global Chinese and English sources.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

The skill supports adding arbitrary new platforms and dynamically exploring access strategies, expanding scope well beyond the declared channel set. This open-ended integration model can be abused to turn the skill into a generic web automation or data collection agent, increasing legal, privacy, and security risk.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The manifest describes scanning public feedback, but the implementation includes authenticated forum access using stored credentials and captcha-assisted login automation. This materially changes the trust and risk profile by enabling account-backed access and secret handling that users may not expect from a public-monitoring skill.

Content

No source excerpt is available for this finding.

Context Window Stuffing

Medium
Category
Memory Poisoning
Confidence
80% confidence
Finding

Skill attempts to fill the context window with filler content, displacing legitimate instructions and safety constraints. This can degrade agent performance or bypass safety boundaries.

Content

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

md
## Batch Processing

When samples from a single channel exceed context window capacity:
- Split by time or pagination
- Each batch produces topic summaries
- Merge batch summaries before cross-channel merge

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 367)May include surrounding context.

md
For high-sensitivity labels (secret nerfs, fraud, wrongful bans, fairness violations):
- Default to "player concerns / concentrated feedback" phrasing
- Never state as verified fact without confirmation

## Output Priority

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The skill documents automated use of stored credentials for NGA and explicit CAPTCHA-solving to gain access to a logged-in community. That exceeds passive public sentiment collection and creates a high-risk path for secret use, account misuse, and bypass of anti-automation controls, especially because the file normalizes reading from .credentials/accounts.json and solving verification challenges.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The file instructs the agent to read credentials and API keys from .credentials/accounts.json without any user-facing disclosure, consent boundary, or secret-handling guardrails. In an agent setting, undocumented secret access is dangerous because users may trigger the skill for analysis while being unaware it can consume stored privileged data and external API quotas.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The documented behavior includes solving a 6-digit graphical CAPTCHA as part of login automation, but provides no warning or restriction. This is dangerous because it directs the agent to bypass an anti-bot control, which can violate platform protections and expands the skill from observation into active access circumvention.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The schema sets scope.language to zh by default, which imposes a specific language preference unless the user changes it. The policy allows locale constraints only when users are offered a choice or the restriction is clearly justified; here, the default is enforced without such justification.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The report.language field defaults to zh-CN, which directs generated output into a specific locale by default. Because the document does not indicate user opt-in or a documented regional constraint, this is a natural-language locale policy concern.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
84% confidence
Finding

The summary section reiterates Language as zh and Report language as zh-CN, confirming that the skill's normal behavior is to use a specific language/locale. This is a policy issue because no explicit user choice or region-specific rationale is provided in the document.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

This markdown template specifies report titles and body content in Chinese, which imposes a specific language on generated output. Under the policy, language constraints should either be optional, user-selected, or clearly justified as region-specific; this file does not provide such opt-in or justification.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The low-sample observation report is written as a fixed Chinese template, again enforcing a locale/language choice in natural-language output. The file does not indicate that users can choose another language or that the constraint is required for a region-specific use case.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.