Back to skill

Security audit

Excel Auto Clean

Security checks for vulnerabilities and agentic risk

Overview

This paid Excel-cleaning skill is under review because the package includes billing logic but does not include the actual Excel-processing module it calls.

Review before installing. The skill advertises paid Excel cleanup, but this package does not contain the Excel processing module it calls, so a purchased run may fail while exposing an internal error message. Ask the publisher to include the missing handler, document the payment flow clearly, and let users choose or confirm the output path before writing cleaned files.

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
index.js:52
Finding
Raw Internal Error Disclosure## Vulnerability Details **File Location**: `index.js:52` **Vulnerability Type**: Unfiltered exception disclosure **Risk Level**: Low **Vulnerable Code**: ```javascript } catch (error) { return { success: false, message: '计费校验失败:' + error.message }; } ``` ### Technical Analysis The main entry point concatenates `error.message` directly into its caller-visible response. Exceptions may originate from the billing SDK, filesystem operations, invalid arguments, or Node.js module loading. Their messages can contain internal file paths, package and module names, service details, or upstream diagnostic information. The project also invokes `require('./excel-handler')`, while that module was absent from the audited package. If an entitled user reaches this code path, Node.js may generate a module-resolution error containing internal implementation and path information, which the catch block then returns without filtering. ### Attack Path 1. An attacker invokes `main` using an account that passes the permanent-purchase check, or supplies inputs that provoke a billing or processing exception. 2. Execution reaches `cleanExcel(fileParams.path)` or another failing SDK operation. 3. The missing handler, malformed parameters, filesystem failure, or SDK failure raises an exception. 4. The catch block reads the raw `error.message`. 5. The application returns that message to the attacker, potentially disclosing internal paths or dependency and service details. ### Impact Assessment This issue does not directly grant code execution, elevated privileges, or unauthorized data access. It can disclose implementation details useful for reconnaissance and for refining subsequent attacks. The scope is limited to diagnostic information present in exceptions generated by reachable operations.
Remediation
## Remediation Suggestions - Return a generic caller-facing error such as `The request could not be completed`. - Record detailed diagnostics only in a restricted server-side logging system. - Avoid logging secrets, payment details, access tokens, or unnecessary user data. - Assign a correlation ID to each failure and return only that identifier to the caller. - Validate `userId`, `fileParams`, and `fileParams.path` before invoking SDK or file-processing operations. - Add the required `excel-handler` implementation before deployment and handle expected module and processing failures with predefined, non-sensitive messages. Example hardening: ```javascript } catch (error) { const incidentId = createIncidentId(); logger.error({ incidentId, error }, 'Excel skill execution failed'); return { success: false, message: `The request could not be completed. Reference: ${incidentId}` }; } ```
Vulnerability Patterns
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • 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)

Tp2

High
Category
MCP Tool Poisoning
Confidence
85% confidence
Finding
Mixing characters from multiple Unicode scripts in a single identifier is a common technique to create visually ambiguous tool names.

Tp4

High
Category
MCP Tool Poisoning
Confidence
94% confidence
Finding
声明描述聚焦于 Excel 整理功能,但提供的代码块实际核心行为是接入计费 SDK、校验永久购买状态、生成支付链接,并在购买后才转调外部 excel-handler。也就是说,该代码的主要可见能力是商业计费与访问控制,而非直接执行“去重、排序、生成报表”等已声明功能;这些 Excel 功能仅被注释和外部 require 间接提及,当前代码中无法验证。由于存在未声明的计费/支付能力,且当前代码主目的与声明存在明显偏移,应判定为描述与行为不匹配。

Description-Behavior Mismatch

Medium
Confidence
95% confidence
Finding
The skill is presented as an Excel-cleaning utility, but the code also performs purchase verification and generates payment links. This mismatch expands the skill's behavior beyond its stated purpose, which can mislead users and platforms about what the skill actually does and creates a social-engineering and trust risk around unexpected monetization flows.

Context-Inappropriate Capability

Medium
Confidence
93% confidence
Finding
Embedding payment capability directly inside an Excel-processing skill exceeds the direct functional need of file cleaning and introduces access to billing actions during normal execution. In a skill ecosystem, unnecessary payment logic increases abuse potential if the skill is invoked unexpectedly, repurposed, or insufficiently disclosed to users.

Natural-Language Policy Violations

Medium
Confidence
91% confidence
Finding
User-facing messages are hard-coded in Chinese and the payment flow is fixed to CNY, but the file does not indicate that this skill is intentionally limited to Chinese-speaking users or a China-specific deployment. This creates a natural-language locale policy issue because the skill imposes a specific language/locale without offering user choice or documenting the constraint.

Missing User Warnings

Medium
Confidence
94% confidence
Finding
The skill instructs the agent to modify spreadsheet contents and save a new file to the desktop, but it does not warn the user that data will be altered or that a file will be written to a specific location. This can lead to unintended data loss, overwriting confusion, exposure of sensitive information on a shared desktop, or users consenting without understanding the side effects.

Natural-Language Policy Violations

Low
Confidence
88% confidence
Finding
The skill name, description, and instructions are entirely in Chinese, which implicitly constrains interaction to a specific language. There is no indication that the user can choose another language or that the locale restriction is intentional for a region-specific use case.

Static analysis

No suspicious patterns detected.