T08 · Insecure Dependencies
- Location
package-lock.json:18- Finding
Dependencies Retrieved from an Unencrypted Third-Party Registry Mirror
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This spreadsheet-processing skill is mostly purpose-aligned, but it needs review because its lockfile uses unsecured third-party HTTP dependency URLs despite claiming official HTTPS sources, and its file-writing operations lack clear overwrite safeguards.
Review before installing. Prefer a version whose lockfile uses approved HTTPS package sources, refreshes or patches vulnerable dependencies, and documents safe defaults for overwrites, backups, row deletion, deduplication, and formula-safe CSV export. Use it only on trusted file paths and keep backups of important spreadsheets.
package-lock.json:18Dependencies Retrieved from an Unencrypted Third-Party Registry Mirror
index.js:127CSV Formula Injection Through Unsanitized Exported Cell Values
brace-expansion 1.1.12 is flagged with multiple denial-of-service issues involving pathological brace patterns that can trigger excessive CPU use, hangs, or memory exhaustion. Because this package is used transitively through glob/minimatch-style dependency chains, untrusted pattern input reaching those code paths could crash or stall the process.
brace-expansion 2.0.2 carries the same class of denial-of-service vulnerabilities, allowing maliciously crafted brace expressions to cause exponential expansion, hangs, or out-of-memory conditions. In an ETL-related package, attacker-supplied file patterns or archive member selection logic could increase exposure if such inputs are user influenced.
tmp 0.2.5 is reported vulnerable to path traversal when unsanitized prefix or postfix values are used to construct temporary paths. In a file-processing/ETL context, if attacker-controlled names influence temp file creation through exceljs or wrapper code, this could enable writes outside the intended temp directory or overwrite sensitive files.
The skill explicitly exposes data-modifying operations such as writing files and deleting empty or duplicate rows, but it does not document overwrite protection, backup behavior, confirmation requirements, or data-loss warnings. In an agent context, this can lead to accidental destruction or replacement of user data if the skill is invoked on the wrong path or with overly broad cleaning rules.
The natural-language comments and skill description are entirely in Chinese, including the name and functional description, with no indication that the user can choose another language or that the tool is intended only for a Chinese-language context. Under the policy, forcing a specific language without opt-in is a locale/language policy concern.
Lines L150-L155 describe cleanData as performing trimming and null-removal on row fields and returning cleaned data. However, in L159-L184 the function builds cleanedRow but never returns or stores it, so trims/null-field removals are discarded and the function effectively only removes some rows via filter.
This manifest enumerates many entrypoints such as readExcel, writeCSV, cleanData, and mergeFiles, but does not explain how or when they are selected, nor what distinguishes one trigger from another. For a manifest file, this lack of specificity can cause unintended or overly broad invocation because there are no negative examples, context limits, or explicit trigger conditions.
The natural-language description and instructions are entirely in Chinese, which can impose a language requirement on users without any opt-in or alternative locale. The policy calls for flagging language or locale constraints unless the skill offers a choice or clearly justifies the restriction.
The lockfile pins packages to a region-specific mirror over plain HTTP rather than the default trusted registry or a documented enterprise mirror. This weakens supply-chain trust by introducing an extra distribution point and allowing metadata/package retrieval to be intercepted or altered in transit, even though integrity hashes provide only partial mitigation.
uuid 8.3.2 is flagged for missing buffer bounds checks in certain versioned UUID generation APIs when a caller supplies a buffer. This is a real issue, but its exploitability depends on the application invoking the affected API variants with attacker-influenced buffer parameters; that is not evident from the lockfile alone.
The package description is written only in Chinese, which imposes a specific language in natural-language metadata without indicating user choice or a justified locale restriction. This matches the policy category for language or locale constraints that are not presented as optional or region-specific.
Using a caret version range for exceljs allows newer compatible releases to be installed automatically, which can introduce supply-chain risk if a future release is compromised or contains a regression. In a skill that processes spreadsheets, dependency trust matters because parsing libraries handle attacker-controlled file content and run in the host environment.
"author": "老李",
"license": "MIT",
"dependencies": {
"exceljs": "^4.4.0",
"csv-parser": "^3.0.0",
"csv-stringify": "^6.5.0"
},
Using a caret version range for csv-parser permits automatic adoption of later releases within the major version, increasing supply-chain exposure if an upstream package is hijacked or a bad release is published. Because CSV parsers process untrusted input, unexpected dependency changes can affect reliability and security in downstream environments.
"license": "MIT",
"dependencies": {
"exceljs": "^4.4.0",
"csv-parser": "^3.0.0",
"csv-stringify": "^6.5.0"
},
"engines": {
Using a caret version range for csv-stringify makes builds non-reproducible over time and creates a low-severity supply-chain risk if a later allowed version becomes malicious or vulnerable. Although this file does not itself execute code, dependency resolution during installation can still change behavior without explicit review.
"dependencies": {
"exceljs": "^4.4.0",
"csv-parser": "^3.0.0",
"csv-stringify": "^6.5.0"
},
"engines": {
"node": ">=14.0.0"
The natural-language metadata and labels are presented exclusively in Chinese, which may impose a language expectation on users without offering an alternative or documenting that the skill is intentionally region-specific. Under the policy, forcing a specific language without user opt-in can be a locale/language policy concern.
The script's console messages are written in Chinese throughout, including startup, progress, and success output. This imposes a specific language on users without opt-in or justification, which matches the language/locale policy violation criteria.
No suspicious patterns detected.