Back to skill

Security audit

Fortune China500 Skill

Security checks for vulnerabilities and agentic risk

Overview

The skill is mostly coherent for fetching public Fortune China 500 data, but it needs review because it writes remote webpage content into an Excel file without neutralizing spreadsheet formulas.

Install only if you are comfortable with the skill fetching public ranking data from caifuzhongwen.com and creating an Excel file locally. Treat generated workbooks as untrusted until formula neutralization is added, especially before opening them in spreadsheet software or sharing them with others.

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

Warning
Location
fortune500_fetch.py:94
Finding

Untrusted Remote Data Written to Excel Without Formula Neutralization

Content
View full analysis
= 4: try: rank = int(cells[0].text.strip()) company = cells[1].text.strip() industry = cells[2].text.strip() revenue = cells[3].text.strip() companies.append({ 'rank': rank, 'company': company, 'industry': industry, 'revenue': revenue }) except (ValueError, IndexError): continue ``` ```python # Add company data for idx, company in enumerate(companies, 2): ws.cell(row=idx, column=1, value=company['rank']) ws.cell(row=idx, column=2, value=company['company']) ws.cell(row=idx, column=3, value=company['industry']) ws.cell(row=idx, column=4, value=company['revenue']) ws.cell( row=idx, column=5, value=f'{url} | 获取时间:{datetime.now().strftime("%Y-%m-%d %H:%M:%S")}' ) ``` ### Technical Analysis The `company`, `industry`, and `revenue` values originate from a remote webpage and are written directly into an XLSX workbook without validation or formula neutralization. Openpyxl interprets a string beginning with `=` as an Excel formula. Consequently, if the remote data source returns a value such as `=HYPERLINK(...)` or another formula expression, the generated workbook can contain an active formula rather than inert text. This could occur if the upstream website is compromised, its content-management pipeline is abused, or unexpected attacker-contr ...[truncated 2100 chars]
Remediation
View remediation
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 (6)

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
90% confidence
Finding

The skill states it will automatically fetch data from an official source, implying network access, but it does not declare any tool scope or allowed tools. Missing explicit permission boundaries can cause the agent platform to grant broader-than-expected capabilities or make network use opaque to reviewers, increasing the risk of unintended external access or data exfiltration behavior in future revisions.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
81% confidence
Finding

The trigger phrases are broad enough to match generic mentions of '500强' or '中国500强企业', which could invoke this skill in contexts the user did not intend. Over-broad activation can route unrelated requests into a network-fetching and file-producing workflow, causing incorrect task execution, unnecessary external access, or confusing outputs.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The file-level docstring and all user-facing messages are written only in Chinese, which imposes a specific language on users without offering a choice. Under the policy, locale or language constraints should be opt-in or clearly justified as region-specific.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
89% confidence
Finding

This markdown file states that the skill will generate an Excel file, which is a user-data-affecting file write operation. The description does not include any warning about local file creation, save location, or overwrite behavior, so users are not explicitly informed of the side effect.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
75% confidence
Finding

The skill advertises that it returns an Excel file but does not clearly disclose that it creates or writes a file artifact. Undisclosed file creation reduces user awareness and reviewability, and in some environments file generation can be abused to persist unexpected content or mislead users about what was saved.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
68% confidence
Finding

All user-facing instructions and examples are presented only in Chinese, and there is no statement that users may interact in another language or choose their preferred locale. Under the language/locale policy, a forced language without opt-in can be a natural-language policy concern.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.