Back to skill

Security audit

Li ETL Handle

Security checks for vulnerabilities and agentic risk

Overview

The skill is a coherent spreadsheet ETL tool, but it needs Review because it exposes unsandboxed custom JavaScript execution and uses a known-vulnerable Excel parser/dependency setup.

Install only if you are comfortable treating this as a reviewed spreadsheet-processing library, not a hardened sandbox. Use it only on trusted Excel/CSV files, avoid executeScript unless the code is fully trusted, avoid logging sensitive rows, and prefer a version that replaces or upgrades xlsx and regenerates the lockfile from HTTPS 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)

T08 · Insecure Dependencies

Error
Location
package-lock.json:119
Finding

Insecure Dependency Sources and Known-Vulnerable XLSX Parser

Content
View full analysis
=0.8" } } ``` ```json "node_modules/xlsx": { "version": "0.18.5", "resolved": "http://mirrors.tencentyun.com/npm/xlsx/-/xlsx-0.18.5.tgz", "integrity": "sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==", "license": "Apache-2.0", "dependencies": { "adler-32": "~1.3.0", "cfb": "~1.2.1", "codepage": "~1.15.0", "crc-32": "~1.2.1", "ssf": "~0.11.2", "wmf": "~1.0.1", "word": "~0.3.0" }, "bin": { "xlsx": "bin/xlsx.njs" }, "engines": { "node": ">=0.8" } } ``` The project explicitly acknowledges the dependency risk: ```yaml security: note: | - executeScript allows custom JavaScript execution - use with trusted code only - xlsx package has known vulnerability (GHSA-4r6h-8v6p-xvw6) - only process trusted files - See SECURITY_AUDIT.md for details ``` ### Technical Analysis All dependencies recorded in `package-lock.json` use plaintext HTTP URLs under `mirrors.tencentyun.com`. HTTP provides no transport authentication or confidentiality, allowing a network-positioned attacker to intercept, block, redirect, or alter dependency-download traffic. The included SHA-512 integrity fields normally prevent silently modified archives from being accepted when the lockfile itself remains trusted. They materially ...[truncated 2400 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
index.js:183
Finding

Spreadsheet Formula Injection in CSV Exports

Content
View full analysis
Remediation
View remediation
Object.fromEntries( headers.map(header => [ neutralizeSpreadsheetFormula(header), neutralizeSpreadsheetFormula(row[header]) ]) ) ); const safeHeaders = headers.map(neutralizeSpreadsheetFormula); const output = stringify(safeData, { header: true, columns: safeHeaders }); fs.writeFileSync(outputPath, output); return outputPath; } ``` The exact implementation should preserve a mapping between original object keys and sanitized output headers rather than relying on sanitized headers to access the original object direc ...[truncated 8 chars]
Vulnerability Patterns
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • 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
Findings (23)

Context-Inappropriate Capability

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The skill exposes an executeScript(data, scriptFn) capability that runs caller-supplied JavaScript for each row. In a skill intended for Excel automation, this turns a data-processing helper into a general code-execution surface, enabling arbitrary filesystem access, process execution, network access, or data exfiltration depending on the surrounding runtime permissions.

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 version 0.18.5, which is associated with published advisories for prototype pollution and regular expression denial of service. In a skill that processes spreadsheet files, this dependency is directly relevant to likely functionality, making exploitation more plausible if attacker-controlled XLSX input is handled.

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 manifest depends on xlsx 0.18.5, which is flagged with known advisories including prototype pollution and ReDoS. Because this skill is explicitly designed to read and transform Excel/CSV files, it is likely to parse attacker-controlled spreadsheet content, making these library flaws more reachable and increasing the chance of denial of service or unsafe object manipulation during processing.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

High
Category
Not specified by scanner
Confidence
95% confidence
Finding

The manifest presents the skill as an Excel/CSV ETL utility, but the security note explicitly reveals a custom JavaScript execution capability that is materially more powerful than the stated purpose. That mismatch is dangerous because users or platforms may grant this skill trust appropriate for data transformation while it can potentially execute arbitrary code, greatly expanding the attack surface to code execution, data exfiltration, or host compromise.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

This markdown file is natural-language documentation, and its title and content are presented entirely in Chinese. The file does not indicate that the skill is region-specific or provide an opt-in or alternative language, which can violate a language/locale policy requiring user choice or documented justification.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The report acknowledges that dangerous code execution lacks adequate safety instructions but still concludes the skill is publishable. In a skill that includes executeScript-like functionality, minimizing or normalizing this gap can lead users to invoke code execution without understanding isolation, input trust, or abuse risks.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The report explicitly documents dangerous script execution capability and known high-severity vulnerabilities in the xlsx dependency, yet still assigns a 'good' rating and recommends publication. This can mislead reviewers into approving or deploying an unsafe skill, increasing the chance that vulnerable code execution or dependency-based attacks reach production.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

This README is a markdown file, so missing-warning checks apply to user-facing descriptions. The Chinese section includes explicit safety warnings about executing custom JavaScript and handling untrusted Excel files, but the French, German, and Japanese sections describe the same skill without any warning that it can write files or execute custom logic, which could affect user data or system integrity.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

This markdown file contains user-facing natural language entirely in Chinese, but it does not state that the skill or audit is intended specifically for Chinese-speaking users or offer any language choice. That can violate language/locale policy where user-facing materials should not force a specific language without opt-in or documented justification.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

This markdown file contains all user-facing content in Chinese, including safety guidance and release conclusions, but does not state that the skill is intended only for Chinese-speaking users or offer a language choice. That can violate language/locale policy when users are not given opt-in or a justified region-specific constraint.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The document makes a release-readiness claim ('all high-priority issues fixed' and 'can be released') while still acknowledging unresolved high-risk xlsx dependency vulnerabilities earlier in the file. This can mislead users or reviewers into trusting the skill’s safety posture and deploying it in situations where untrusted Excel input may still trigger known issues.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
81% confidence
Finding

The formatData docstring describes format normalization rules including phone, email, date, and number, which implies converting values into standardized representations. In code, phone, email, and id invoke maskSensitiveData, which redacts values rather than formatting them, and there is no date handling at all.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

writeLog prints full row contents to stdout, which can expose spreadsheet contents including personal, financial, or other sensitive data in logs. In automation environments, logs are often centralized, retained, and accessible to operators or other systems, turning routine debugging into a data leakage path.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
88% confidence
Finding

This markdown file appears to require Chinese comprehension throughout, but it does not state that the skill or its documentation is intentionally limited to Chinese-speaking users or a specific locale. Under the language/locale policy rule, forcing a single language without user opt-in or justification can be a natural-language policy concern.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Low
Category
Not specified by scanner
Confidence
93% confidence
Finding

The document marks '所有场景测试通过率 100%' as unchecked at L156, but earlier records state scenario tests passed 7/7 with 100% overall success at L107 and L115. This is an active contradiction in the file's own intent and status reporting, not just missing detail.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
88% confidence
Finding

The file header and many user-visible strings are written only in Chinese, which imposes a specific language on users without any opt-in or locale selection mechanism. This can violate language or locale policy where skills must not force a language unless documented and justified.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
0% confidence
Finding

No actionable SQP-3 issue is present here. The manifest provides descriptions in multiple languages rather than forcing one language without user opt-in, so this does not violate the language/locale policy.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
84% confidence
Finding

Using caret ranges for dependencies allows newer minor or patch releases to be installed without explicit review, which can introduce supply-chain risk or unexpected security regressions. In a skill that processes untrusted spreadsheet and CSV content, dependency changes can materially affect parsing behavior and attack surface.

Content

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

json
"url": "https://github.com/beijing-laoli/li-excel-handle/issues"
  },
  "dependencies": {
    "xlsx": "^0.18.5",
    "csv-parser": "^3.0.0",
    "csv-stringify": "^6.4.0"
  },

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
84% confidence
Finding

The csv-parser dependency is specified with a caret range, so installations may resolve to different package versions over time. That weakens build reproducibility and increases supply-chain exposure if a compromised or breaking release is published.

Content

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

json
},
  "dependencies": {
    "xlsx": "^0.18.5",
    "csv-parser": "^3.0.0",
    "csv-stringify": "^6.4.0"
  },
  "engines": {

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
84% confidence
Finding

The csv-stringify dependency is not strictly pinned, which permits automatic adoption of future compatible releases. While not an exploit by itself, this creates avoidable supply-chain risk and can introduce vulnerable code into an ETL skill that handles external files.

Content

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

json
"dependencies": {
    "xlsx": "^0.18.5",
    "csv-parser": "^3.0.0",
    "csv-stringify": "^6.4.0"
  },
  "engines": {
    "node": ">=14.0.0"

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
81% confidence
Finding

This manifest presents the primary top-level description and author metadata in Chinese, while also providing multilingual descriptions later. Because the default presentation may force a specific language without stating user opt-in or a justified locale restriction, it can conflict with language-choice policy expectations.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
96% confidence
Finding

This JavaScript file uses Chinese-only natural-language comments and user-facing console messages throughout, which can amount to a language/locale policy violation when no opt-in or alternative is provided. The file does not indicate that the skill is region-specific or that Chinese is required for a justified compliance reason.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
95% confidence
Finding

The file's natural-language strings and comments are written in Chinese, including the suite description and runtime instructions. Under the stated policy, forcing a specific language without user opt-in can be a locale-policy violation when no justification or alternative is provided.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.