Back to skill

Security audit

可转债打新助手

Security checks for vulnerabilities and agentic risk

Overview

This is a simple China convertible-bond helper with no hidden persistence or credential handling, but its docs overstate live financial capability and include insecure HTTP data examples.

Install only if you understand this appears to be a demo-quality, Chinese-market financial helper. Do not rely on its output for investment decisions without checking official exchange or issuer sources, and prefer a version that fixes the syntax error, removes unused dependencies, pins packages, and uses HTTPS-only data sources.

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)

T09 · Insecure Skill Coding Practices

Warning
Location
cb_calendar.py:133
Finding

Plaintext HTTP Used for Financial Market Data Retrieval

Content
View full analysis

Vulnerability Details

File Location: cb_calendar.py:133-155
Related Locations: references/API.md:12-21, references/API.md:42-46, references/API.md:65-69, references/API.md:98-112
Vulnerability Type: Unauthenticated and unencrypted network transport
Risk Level: Medium

Vulnerable Code

python
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
    'Referer': 'http://data.eastmoney.com/kzz/',
}

try:
    # Example URL; the correct API still needs to be identified
    url = "http://datacenter-web.eastmoney.com/api/data/v1/get"
    params = {
        'reportName': 'RPT_BOND_CB_ISSUE',
        'columns': 'ALL',
        'filter': '',
        'pageNum': 1,
        'pageSize': 50,
    }

    response = requests.get(url, params=params, headers=headers, timeout=10)
    if response.status_code == 200:
        data = response.json()
        return parse_dongfangcai_data(data)

The API documentation also recommends several plaintext endpoints:

text
http://datacenter-web.eastmoney.com/api/data/v1/get
http://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php
http://qt.gtimg.cn/q=sh600000
http://www.cninfo.com.cn/new/commonUrl/pageOfSearch?url=disclosure/list/search&keyWord={keyword}

Technical Analysis

The application retrieves financial data over HTTP rather than HTTPS. Plaintext HTTP does not authenticate the remote server and does not protect response integrity. An attacker with a privileged network position—such as a malicious wireless access point, compromised router, proxy, ISP-level interceptor, or DNS attacker—can observe or modify requests and responses.

The implementation accepts any HTTP 200 response and immediately parses its JSON content. It does not validate transport security, verify the origin after redirects, authenticate the response, or enforce a strict response schema. Consequen ...[truncated 2104 chars]

Remediation
View remediation

Remediation Suggestions

  1. Replace every plaintext endpoint with an officially supported HTTPS endpoint.
  2. Reject redirects that downgrade an HTTPS request to HTTP.
  3. Configure an explicit redirect limit and verify the final response URL and hostname.
  4. Retain normal TLS certificate and hostname verification; never set verify=False.
  5. Apply strict response validation before processing:
    • Require the expected content type.
    • Enforce maximum response size.
    • Validate the top-level JSON structure.
    • Validate field types, formats, and reasonable numeric ranges.
    • Reject missing or unexpected critical fields.
  6. Fail closed when secure retrieval is unavailable rather than silently falling back to plaintext transport.
  7. Cross-check high-impact information, such as redemption deadlines and issue dates, against an authoritative exchange or issuer source.
  8. Update references/API.md so all examples use HTTPS and clearly prohibit plaintext fallback.
  9. Add tests confirming that HTTP URLs and HTTPS-to-HTTP redirects are rejected.

T08 · Insecure Dependencies

Note
Location
SKILL.md:9
Finding

Unpinned and Unnecessary Third-Party Dependencies Increase Supply-Chain Exposure

Content
View full analysis

Vulnerability Details

File Location: SKILL.md:9-11 and SKILL.md:63-65
Related Locations: references/USER_GUIDE.md:6-8, references/API.md:199-201
Vulnerability Type: Unpinned dependency installation and excessive dependency scope
Risk Level: Low

Vulnerable Configuration and Commands

yaml
metadata:
  openclaw:
    requires:
      bins: ["python3"]
      packages: ["requests", "pandas", "beautifulsoup4"]
bash
# Install dependencies
pip3 install requests pandas beautifulsoup4

The API documentation additionally recommends another unpinned installation:

bash
pip install akshare

Technical Analysis

The installation instructions request packages by name without fixed versions or cryptographic hashes. A fresh installation can therefore resolve to different package and transitive-dependency versions over time. If a package release or dependency distribution channel is compromised, installation may introduce attacker-controlled code.

The executable project code imports requests, but it does not import pandas or beautifulsoup4. Requiring those unused packages expands the dependency graph and installation attack surface beyond the minimum privileges and components required by the current implementation. akshare is an optional documentation recommendation rather than an implemented requirement, but it is also shown without version constraints.

No evidence of typosquatted package names, malicious package sources, dependency confusion, or a currently compromised package was found. The risk arises from mutable, unverified dependency resolution and unnecessary installed components.

Attack Path

  1. A user follows the documented installation command or the platform automatically resolves the declared package requirements.
  2. pip resolves the latest available versions and their transitive dependencies because no versions or hashes are fixed.
  3. A m ...[truncated 1239 chars]
Remediation
View remediation

Remediation Suggestions

  1. Remove pandas and beautifulsoup4 from required packages unless implemented features actually use them.
  2. Maintain a committed dependency file containing exact, reviewed versions.
  3. Generate and enforce cryptographic hashes, for example with a locked requirements file and pip install --require-hashes.
  4. Pin transitive dependencies through a reproducible lock-generation process.
  5. Separate optional data-provider integrations, such as akshare, into an optional dependency group.
  6. Install only from an explicitly trusted package index over HTTPS.
  7. Use an isolated virtual environment with no administrative privileges.
  8. Add automated vulnerability and provenance checks for direct and transitive dependencies.
  9. Keep the dependency declarations in SKILL.md, installation documentation, and the lock file synchronized.
  10. Commit the referenced requirements or lock file; the audited directory does not contain the requirements.txt mentioned by README.md.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • 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
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (19)

Tp4

High
Category
MCP Tool Poisoning
Confidence
90% confidence
Finding

声明描述的是一个覆盖多项可转债打新辅助能力的综合工具,但当前代码片段只包含三个核心函数:analyze_cb(新债基本分析与申购建议)、compare_industry(行业对比)、calculate_cb_value(简化估值)。这些功能与“新债分析”部分一致,但其余被重点宣称的能力均未在代码中体现。不存在明显越权、数据外传或与描述无关的额外危险能力;问题主要是描述范围显著大于实际实现,因此属于描述与行为不一致。

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

代码的核心行为与“可转债申购日历/可申购列表”这一子功能基本一致,但与整体描述相比明显不完整。现有实现仅处理申购日历数据,主要依赖模拟数据,真实数据抓取也只是半成品示例;而描述中列出的多个关键能力——新债分析、上市溢价预测、中签率查询、强赎下修提醒——在该代码片段中均不存在。因此描述超出了代码实际能力,属于描述与行为不一致。未发现额外的敏感或越权能力,但存在功能性夸大。

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

This markdown file contains user-facing instructions exclusively in Chinese, and there is no indication that users may select another language or that the guide is intentionally limited to a Chinese-speaking audience. Under the policy, forcing a specific language without opt-in 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
89% confidence
Finding

The skill documentation is entirely in Chinese, including headings, usage guidance, and warnings, with no indication that users can choose another language or that the skill is intentionally limited to a Chinese-speaking or region-specific audience. Under the policy, language constraints should be opt-in or clearly justified when they restrict user accessibility.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
86% confidence
Finding

The skill declares Python plus HTTP-capable libraries and cites multiple third-party financial data sources, but it does not define any explicit tool scope such as allowed network access or permissions. In an agent environment, undeclared network capability increases the risk of unexpected outbound requests, data exfiltration, or fetching untrusted content without user awareness.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill description, headings, triggers, examples, and usage instructions are presented exclusively in Chinese, which effectively enforces a specific language for interaction. The file does not state that the skill is Chinese-only, region-specific by design, or provide users with a language choice or opt-in.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

This code uses Chinese-only natural language in the module description and later user-facing messages, which imposes a specific language/locale without any opt-in or alternative. The policy allows locale constraints only when they are explicitly justified or optional, which is not present here.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · cb_calendar.py (reported line 126)May include surrounding context.

python
从东方财富获取真实数据
    
    API 端点示例(需要逆向工程):
    http://data.eastmoney.com/kzz/default.html
    
    Returns:
        list: 转债数据

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · references/USER_GUIDE.md (reported line 247)May include surrounding context.

md
从东方财富获取真实数据
    
    API 端点示例(需要逆向工程):
    http://data.eastmoney.com/kzz/default.html
    
    Returns:
        list: 转债数据

External Transmission

Medium
Category
Data Exfiltration
Confidence
88% confidence
Finding

The code uses plain HTTP in the Referer and later requests data from an HTTP Eastmoney endpoint, which exposes network traffic to interception or modification by an on-path attacker. Because the skill consumes remote financial data, tampering could mislead users with falsified bond subscription information or corrupt downstream decisions.

Content

Scanner excerpt · cb_calendar.py (reported line 136)May include surrounding context.

python
headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
        'Referer': 'http://data.eastmoney.com/kzz/',
    }
    
    try:

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

This Python file contains natural-language descriptions and console output exclusively in Chinese, beginning with the module docstring and continuing throughout user-facing strings. Under the policy, forcing a specific language without user opt-in can be a locale/language policy violation unless the tool is clearly documented as region-specific, which is not stated here.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

This markdown file appears to require Chinese as the sole language for understanding the skill's API documentation. Under the language/locale policy, forcing a specific language without user opt-in or a documented region-specific justification is a natural-language policy violation.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
91% confidence
Finding

The document directs use of multiple plaintext HTTP endpoints for financial data sources, which exposes requests and responses to interception or tampering by a man-in-the-middle. In this skill context, manipulated market, announcement, or pricing data could mislead investment decisions, trigger incorrect alerts, or poison cached downstream calculations.

Content

Scanner excerpt · references/API.md (reported line 12)May include surrounding context.

md
## 一、可转债发行数据

### 东方财富网
**URL**: http://data.eastmoney.com/kzz/

**数据内容**:
- 可转债发行列表

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

This markdown file contains user-facing instructions exclusively in Chinese, and there is no indication that users may choose another language or that the locale restriction is intentional and justified. The policy specifically calls for flagging language or locale constraints when they are imposed without user opt-in.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
88% confidence
Finding

This markdown file documents several external data sources such as 巨潮资讯、东方财富、新浪财经 and 集思录, which implies the skill will make network requests to third-party services. However, the description does not provide any user-facing warning about external data access, connectivity requirements, or potential transmission of query context to those services.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
95% confidence
Finding

This code file contains natural-language documentation and printed output entirely in Chinese, with no indication that users can choose another language or that the skill is intentionally limited to a Chinese-only audience. Under the stated policy, forcing a specific language without user opt-in is a natural-language policy concern.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
96% confidence
Finding

This Python file is a code file, so SQP-3 applies to its natural-language content in docstrings and string literals. The skill's descriptions and user-facing messages are entirely in Chinese, with no indication that the user can choose another language or that the locale is intentionally restricted, which can violate language/locale policy requirements.

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 description and user-facing help are presented exclusively in Chinese, which imposes a language choice on users without any opt-in or alternative locale. The policy for this audit flags language constraints unless the skill explicitly offers a language choice or clearly documents a justified region-specific limitation.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
93% confidence
Finding

The help text and usage guidance are entirely in Chinese, and the file does not provide any way to select another language or explain that the tool is intentionally locale-specific. This is a natural-language locale policy issue rather than a code-security flaw.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.