Back to skill

Security audit

银行流水财务分析

Security checks for vulnerabilities and agentic risk

Overview

The skill is a coherent local bank-statement analyzer, but it needs review because it processes sensitive financial files, automatically saves cleartext reports, uses a flagged XLSX parser version, and does not sanitize spreadsheet text before writing Markdown.

Install only if you are comfortable processing sensitive bank statements locally and managing the generated Markdown reports yourself. Use trusted input files, avoid opening reports from untrusted spreadsheets in Markdown viewers that load remote content, update or replace the xlsx dependency before production use, and delete or protect generated reports that contain transaction details.

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
index.js:409
Finding

Unescaped Spreadsheet Fields Permit Markdown Report Injection

Content
View full analysis
{ const amount = t.amount > 0 ? `+¥${formatNumber(t.amount)}` : `-¥${formatNumber(Math.abs(t.amount))}`; const type = t.amount > 0 ? '💰 收入' : '💸 支出'; report += `| ${idx+1} | ${t.date || '-'} | ${t.counterparty || '-'} | ${amount} | ${type} | ${t.summary || '-'} |\n`; }); report += '\n'; ``` The company name is also inserted into a Markdown heading without escaping: ```javascript report += `### ${company}\n\n`; ``` The resulting attacker-influenced report is then written to disk: ```javascript fs.writeFileSync(reportPath, report, 'utf8'); ``` ### Technical Analysis Fields such as transaction date, counterparty, summary, and company name originate from a user-selected CSV or XLSX file. These values are interpolated directly into Markdown tables and headings without escaping Markdown metacharacters, removing line breaks, rejecting raw HTML, or validating URL-bearing constructs. An attacker can place pipes, newlines, headings, links, images, or raw HTML in spreadsheet cells. When the report is generated, these constructs become part of its Markdown structure. This can allow an attacker to: - Break out of a table cell. - Add fabricated financial findings or risk warnings. - Insert deceptive links. - Embed remote images or other externally loaded resources. - Misrepresent the source and conclusions of the financial analysis. For example, a company or summary field could contain: ```markdown Legitimate Company ## Approved Financial Conclusion ![tracking](https://attacker.example/pixel) ``` The exact behavior depends on the Markdown viewer. Markdown itself does not generally grant arbitrary local code execution, but viewers that load remote resources may make a networ ...[truncated 1477 chars]
Remediation
View remediation
/g, '>') .replace(/!/g, '\\!') .replace(/\[/g, '\\[') .replace(/\]/g, '\\]'); } ``` 2. Use the escaping function for dates, counterparties, summaries, company names, and all other spreadsheet-derived text: ```javascript report += `| ${idx + 1} | ${escapeMarkdownCell(t.date)} | ${escapeMarkdownCell(t.counterparty)} | ${amount} | ${type} | ${escapeMarkdownCell(t.summary)} |\n`; ``` 3. Use a separate heading-safe encoder for company names, or avoid using untrusted values as Markdown headings. 4. Reject or neutralize raw HTML and URL-bearing image syntax if the report does not require them. 5. Impose reasonable field-length limits to prevent oversized or misleading report content. 6. Add security tests containing pipes, CR/LF characters, headings, links, image syntax, and raw HTML in every imported textual field. 7. Configure the intended Markdown viewer or export pipeline to disable raw HTML and remote resource loading where possible. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • 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 (14)

Tp4

High
Category
MCP Tool Poisoning
Confidence
89% confidence
Finding

The skill metadata and documentation promise analysis of highly sensitive bank-flow data, but the declared behavior does not clearly disclose all material behaviors and appears to overstate implemented capabilities, especially around accounts receivable/payable analysis and local report persistence. In a financial-analysis context, undocumented data persistence and feature mismatches can cause users to expose sensitive banking data under false assumptions about what the skill does and where outputs are stored.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: xlsx==0.18.5 — 2 advisory(ies): CVE-2023-30533 (Prototype Pollution in sheetJS); CVE-2024-22363 (SheetJS Regular Expression Denial of Service (ReDoS))

High
Category
Supply Chain
Confidence
98% confidence
Finding

The lockfile pins xlsx to 0.18.5, a version with known published vulnerabilities including prototype pollution and regular-expression denial of service. In this skill’s context, processing bank transaction spreadsheets means untrusted or semi-trusted Excel inputs are likely, which makes parser-layer flaws more dangerous because a crafted file could crash analysis, corrupt object behavior, or undermine downstream report generation.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: xlsx==0.18.5 — 2 advisory(ies): CVE-2023-30533 (Prototype Pollution in sheetJS); CVE-2024-22363 (SheetJS Regular Expression Denial of Service (ReDoS))

High
Category
Supply Chain
Confidence
99% confidence
Finding

xlsx 0.18.5 is flagged with known vulnerabilities including prototype pollution and a regular-expression denial of service. In a bank-analysis skill that processes spreadsheet-based financial data, this is especially relevant because attacker-controlled or untrusted XLSX files are a plausible input, increasing the chance of exploitation and service disruption or unsafe object manipulation during parsing.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

This skill handles bank statements and company financial records, which are highly sensitive, yet the description provides no warning, handling guidance, or privacy constraints. In this context, omission of data-sensitivity warnings increases the likelihood of accidental exposure, insecure processing, or inappropriate sharing of confidential financial information.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The skill's description, CLI help text, and generated report content are all hard-coded in Chinese, and the report timestamp explicitly uses the zh-CN locale. Under the policy, forcing a specific language or locale without opt-in is a natural-language policy violation unless clearly justified as region-specific.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The skill writes a Markdown report containing analyzed bank transaction data to disk automatically, even though the behavior is not clearly surfaced as a sensitive artifact creation step. Because the input is bank-flow data, the generated file can expose financial records, counterparties, and risk conclusions to other local users, backups, sync tools, or downstream processes without the user's informed consent.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

This code persists a generated report derived from bank transaction data without any explicit warning that a sensitive artifact will be created. In the context of financial analysis, silent persistence materially increases confidentiality risk because highly sensitive banking details may be left on disk in cleartext Markdown and later accessed, indexed, synced, or shared unintentionally.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The guide instructs users to process bank transaction files that contain highly sensitive financial and personal/business counterparty data, but provides no privacy, access control, retention, or redaction guidance. In a banking-analysis skill, that omission increases the chance that users will expose confidential records through insecure storage, sharing, or downstream AI processing.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
88% confidence
Finding

The skill name, description, and all report requirements are written as mandatory Chinese output expectations, including phrases like '生成的财务汇报文档必须包含以下标准结构'. There is no indication that users may choose another language or that the Chinese-only requirement is a documented, justified regional constraint.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
84% confidence
Finding

The package description is entirely in Chinese and presents the skill in a single language with no indication of optional locale selection or that the skill is intended only for a Chinese-speaking or region-specific audience. Under the policy, language constraints should either be optional for users or clearly documented as justified.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
82% confidence
Finding

Using a caret range for iconv-lite allows installation of newer compatible releases without strict version control, which can reduce build reproducibility and slightly increase supply-chain risk. In this file the risk is limited because no known active vulnerability is identified for the pinned base version, but dependency drift can still introduce unreviewed code changes over time.

Content

Scanner excerpt · package.json (reported line 10)May include surrounding context.

json
"start": "node index.js"
  },
  "dependencies": {
    "iconv-lite": "^0.7.2",
    "xlsx": "^0.18.5"
  },
  "keywords": [

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
95% confidence
Finding

The xlsx dependency is specified with a caret range, which permits version drift and weakens reproducibility of the dependency set. This is more dangerous here because the selected package/version family already has known security issues, so loose versioning can complicate patch management and auditability.

Content

Scanner excerpt · package.json (reported line 11)May include surrounding context.

json
},
  "dependencies": {
    "iconv-lite": "^0.7.2",
    "xlsx": "^0.18.5"
  },
  "keywords": [
    "财务",

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
84% confidence
Finding

The CSV headers and all record text are presented only in Chinese, which constitutes a language/locale constraint in natural-language content. There is no indication that the skill offers a language choice, user opt-in, or that the locale restriction is documented as region-specific and justified.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
84% confidence
Finding

The natural-language guidance, examples, and reporting structure are entirely in Chinese, and the document does not indicate that other languages are supported or that Chinese is optional. Under the stated policy, forcing a specific language without user opt-in can be a locale-policy issue unless clearly justified as region-specific.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.