Back to skill

Security audit

Skills of A-share performance data released by ft.tech.

Security checks for vulnerabilities and agentic risk

Overview

This skill coherently provides read-only A-share financial report lookups from a disclosed market data API, with reliability caveats but no evidence of hidden access, persistence, or destructive behavior.

Install only if you are comfortable with the skill running bundled Python scripts that contact https://market.ft.tech for A-share financial data. It does not show credential access or persistence, but large or stalled API responses could hang or fail a request, and users should treat returned financial data as informational rather than investment advice.

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

Note
Location
sub-skills/stock-balance-all-stocks-specific-period/scripts/handler.py:33
Finding

Unbounded HTTP Requests and Response Reads Can Cause Denial of Service

Content
View full analysis
Remediation
View remediation
MAX_RESPONSE_BYTES: raise ValueError("Response exceeds the permitted size") body = resp.read(MAX_RESPONSE_BYTES + 1) if len(body) > MAX_RESPONSE_BYTES: raise ValueError("Response exceeds the permitted size") data = json.loads(body.decode("utf-8")) ``` 3. Catch and report expected failure classes without exposing unnecessary remote response details: ```python except urllib.error.HTTPError as exc: print(f"Remote API returned HTTP {exc.code}", file=sys.stderr) sys.exit(1) except urllib.error.URLError as exc: print(f"Remote API request failed: {exc.reason}", file=sys.stderr) sys.exit(1) except (TimeoutError, UnicodeDecodeError, json.JSONDecodeError, ValueError) as exc: print(f"Invalid or incomplete API response: {exc}", file=sys.stderr) sys.exit(1) ``` 4. Validate resource-related arguments before making the request: ```python if args.page < 1: parser.error("--page must be at least 1") if not 1 <= args.page_size <= 100: parser.error("--page-size must be between 1 and 100") ``` 5. Apply the same timeout, bounded-read, argument-validation, and exception-handling controls consistently across all ten handlers, preferably through a shared HTTP helper to prevent configuration drift. ]]>
Vulnerability Patterns
  • 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
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (11)

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
90% confidence
Finding

The skill instructs the agent to invoke a local Python runner and states that it can read local skill files and perform HTTP requests, but it declares no explicit tool scope or permission boundaries. This creates an authorization gap where an orchestrator may expose file, shell, and network capabilities more broadly than intended, increasing the risk of unsafe command execution or unintended data access if arguments are ever influenced by user input or neighboring skill content.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The manifest description and the user-facing instructions are written entirely in Chinese, and the skill name/purpose target 'A 股' users without stating that the skill is region-specific or that another language can be used. Under the policy, forcing a specific language without user opt-in is a natural-language locale violation unless the constraint is clearly documented and justified.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The manifest description says to use the skill when the user asks about '指定报告期资产负债表' or 'all stocks balance sheet for a specific year and period', which are broad natural-language triggers and do not define clear activation boundaries. It does not provide negative examples or constraints to distinguish this skill from related finance skills such as single-stock balance sheet queries or non-balance-sheet financial requests.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

This code contains user-facing natural language in the module docstring and argument descriptions exclusively in Chinese. Under the policy, forcing a specific language without user opt-in or a documented locale-specific justification is a natural-language policy violation.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The manifest description and the body of the skill are primarily in Chinese, with Chinese trigger phrases and headings, and there is no indication that users may interact in another language or opt into this locale. Under the policy rule, constraining language/locale without opt-in can be a natural-language policy violation unless it is explicitly justified as region-specific.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The manifest description says to use the skill when the user asks about '指定报告期现金流量表' or '全市场现金流量表' alongside one English example, but it does not clearly define exact trigger phrases, exclusions, or when other cashflow-related requests should use a different skill. This ambiguity could cause unintended invocation for nearby requests about cashflow statements that are not specifically 'all stocks' plus 'specific reporting period'.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The description says to use the skill when the user asks about '指定报告期利润表, 全市场利润表, all stocks income for a specific year and period'. Phrases like '全市场利润表' and 'all stocks income for a specific year and period' are broad and lack negative examples or scope constraints, which could cause unintended invocation for general finance questions.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The markdown instructions and examples are entirely in Chinese, and the trigger description in L03 uses Chinese phrases without indicating that other languages are supported. This can violate language/locale policy when a skill implicitly requires a specific language without user opt-in or documented justification.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The description mixes English with Chinese-only phrasing such as "指定报告期业绩预告" and "全市场业绩预告", indicating the skill is defined around a specific language/locale without any opt-in or alternative. Under the policy, language constraints should either be optional for the user or explicitly justified as region-specific.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
79% confidence
Finding

The natural-language description embeds Chinese trigger phrases and English wording but does not state whether the skill is intended only for Chinese-language queries or whether other languages are supported. This can create an implicit language preference without documenting user choice or locale scope.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
95% confidence
Finding

The module docstring and CLI help text are written entirely in Chinese, which imposes a specific language/locale on users without offering a language choice or documenting a justified regional constraint. This matches the policy category for language or locale restrictions expressed in natural language.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.