Back to skill

Security audit

全球财经早报 Global Market Briefing

Security checks for vulnerabilities and agentic risk

Overview

The skill appears purpose-aligned for generating a Chinese finance/news briefing, with some installation and data-integrity cautions but no evidence of deception, exfiltration, or unsafe persistence.

Install only if you are comfortable with a Chinese-language briefing tool that contacts China News and Tencent market-data endpoints and automatically writes dated Markdown reports to your Desktop. Prefer installing dependencies in a virtual environment with pinned versions, and avoid relying on the HTTP market data for financial decisions without verification.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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
Findings (2)

T08 · Insecure Dependencies

Warning
Location
SKILL.md:28
Finding
Unpinned Third-Party Dependency Installation<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md`, lines 28–32 **Vulnerability Type**: Unpinned runtime dependency **Risk Level**: Medium ### Vulnerable Code ```bash pip install requests ``` ### Technical Analysis The installation instructions install `requests` without specifying an approved version or validating package integrity with cryptographic hashes. Consequently, the package version and its transitive dependency set may change between installations without any corresponding change to the reviewed Skill. Although `requests` is a legitimate package, an unpinned installation remains exposed to supply-chain risks such as a compromised package release, compromised package index, malicious index configuration, or an unexpectedly vulnerable or incompatible future release. The script imports the installed package immediately at runtime: ```python import requests, re, sys, os, xml.etree.ElementTree as ET ``` Code contained in a compromised dependency can therefore run when the module is imported or used. The project does not provide a lock file, hash-validated requirements file, or documented package-index restriction. ### Attack Path 1. An attacker compromises a future package release, a transitive dependency, or the package index used by the victim. 2. Alternatively, the victim's pip configuration is redirected to an attacker-controlled index or mirror. 3. The user follows the documented instruction and runs `pip install requests`. 4. Pip resolves an uncontrolled package version and installs the affected distribution. 5. The user starts `scripts/morning_briefing.py`. 6. Malicious dependency code executes in the context of the user running the script when the dependency is imported or invoked. ### Impact Assessment Successful exploitation could execute arbitrary Python code with the privileges of the account running pip or the briefing script. This may permit access to files available to that account, modification of generated reports, ...[truncated 310 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Create a dependency file containing a reviewed and explicitly pinned version, for example: ```text requests==&lt;reviewed-version&gt; ``` 2. Generate and require cryptographic hashes for the package and all transitive dependencies, using a tool such as `pip-compile --generate-hashes`. 3. Install dependencies with hash enforcement: ```bash python3 -m pip install --require-hashes -r requirements.txt ``` 4. Document use of the official PyPI HTTPS index or an organization-controlled authenticated mirror. 5. Install the package inside a dedicated virtual environment rather than into a system-wide Python environment. 6. Regularly review and deliberately update the locked dependency set after vulnerability and compatibility testing. ]]>

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/morning_briefing.py:54
Finding
Financial Market Data Retrieved over Plaintext HTTP<![CDATA[ ## Vulnerability Details **File Location**: `scripts/morning_briefing.py`, lines 54–55 **Vulnerability Type**: Unauthenticated plaintext network communication **Risk Level**: Medium ### Vulnerable Code ```python r = requests.get("http://qt.gtimg.cn/q=sh000001,sz399001,sz399006,sh000688,sh000016", headers=HEADERS, timeout=8) ``` ### Technical Analysis The script retrieves A-share market data using plaintext HTTP. HTTP does not authenticate the remote server and does not protect response integrity. An attacker able to intercept or redirect traffic can therefore impersonate the data source or alter its response. The parser trusts fields from the response after only basic structural checks: ```python if '~' in line: f = line.split('~') if len(f) > 32 and f[3]: pct = float(f[32]) arrow = '🟢' if pct > 0 else '🔴' items.append({'name': f[1], 'price': f[3], 'pct': pct, 'arrow': arrow}) ``` An attacker can construct a syntactically valid response containing forged index names, prices, and percentage changes. Those values are then inserted into the generated Markdown file and printed briefing without source authentication or independent verification. ### Attack Path 1. The victim runs the briefing script on a network observable or controllable by an attacker. 2. The attacker performs traffic interception, DNS manipulation, gateway compromise, or another network redirection technique. 3. The attacker intercepts the request to `qt.gtimg.cn` or redirects it to an attacker-controlled server. 4. The attacker returns a response matching the expected tilde-delimited format, with at least 33 fields and attacker-selected market values. 5. The script accepts and parses the forged response. 6. The manipulated index data is saved to `~/Desktop/早间新闻/morning_briefing_YYYY-MM-DD.md` and included in standard output. ### Impact Assessment The vulnerability allows modification of the displayed financial-market data and ...[truncated 447 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Replace the plaintext URL with an authenticated HTTPS endpoint supplied by the data provider. 2. If this provider does not offer HTTPS for the relevant interface, migrate to a reputable market-data provider that supports TLS and documented response schemas. 3. Keep TLS certificate verification enabled; do not use `verify=False` or suppress certificate errors. 4. Validate that each returned record corresponds to an expected instrument identifier rather than trusting only the response position or display name. 5. Apply strict schema validation to prices and percentage values, including numeric bounds and expected field counts. 6. Reject unexpected redirects, hosts, content types, and malformed responses. 7. For higher-assurance use cases, compare critical market values against a second independently authenticated source before publishing the briefing. ]]>
Vulnerability Patterns
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • 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 (7)

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding
The declared purpose understates behavior by omitting significant local file writes and by overselling the source coverage as 'global news' when it is actually a fixed set of RSS feeds. This mismatch is dangerous because users and policy systems may approve the skill under false assumptions, while the skill also produces additional output artifacts beyond the advertised Markdown briefing.

Lp3

Medium
Category
MCP Least Privilege
Confidence
91% confidence
Finding
The skill documents network access and local file creation but does not declare any explicit tool scope or permissions, which weakens containment and informed consent. In agent environments, undeclared capabilities can lead to broader-than-expected execution, especially when the scheduled example explicitly enables exec for a script that fetches remote content and writes files.

Natural-Language Policy Violations

Medium
Confidence
94% confidence
Finding
The natural-language description and generated user-facing content are fixed in Chinese, which can violate language or locale policy when no user opt-in or choice is provided. There is no indication in the file that the skill is region-specific by design or that users can select another language.

Intent-Code Divergence

Medium
Confidence
98% confidence
Finding
The script always creates the Desktop output directory and writes the full markdown report before checking whether --stdout was requested. This violates the apparent contract of stdout-only mode and can cause unintended local data persistence, which matters because the report contains externally sourced content and links that a user may have expected not to be stored.

Natural-Language Policy Violations

Low
Confidence
83% confidence
Finding
SQP-3 applies to all file types and covers language or locale policy violations. This file presents the skill's instructions and behavior in Chinese without indicating that users may choose another language or that the skill is intentionally restricted to a Chinese-speaking or China-specific audience.

Missing User Warnings

Low
Confidence
90% confidence
Finding
This markdown file applies to SQP-2, and it explicitly states that a full Markdown report is stored locally. While the behavior is mentioned, there is no clear user-facing warning or caution about automatic file creation, persistence, or where data will be stored, which could affect user data management expectations.

Missing User Warnings

Low
Confidence
86% confidence
Finding
The script writes a generated report to a Desktop path in the user's home directory without prompting, opt-in, or a clearly advertised side effect at runtime. While not a code-execution issue, unexpected writes can expose sensitive browsing/interests metadata, create clutter, and violate least-surprise expectations for an agent skill.

Static analysis

No suspicious patterns detected.