T09 · Insecure Skill Coding Practices
- Location
scripts/csv_to_excel.py:102- Finding
Spreadsheet Formula Injection in Excel Export
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill is a coherent salary-market analysis toolkit, but users should handle web-collected data and spreadsheet exports carefully.
Install and run this in a virtual environment, pin dependencies if possible, review website terms and privacy obligations before automated collection, avoid collecting personal data unless authorized, and treat Excel/CSV outputs from web-collected data as untrusted until formula-leading values are neutralized.
scripts/csv_to_excel.py:102Spreadsheet Formula Injection in Excel Export
SKILL.md:54Mutable and Unverified Third-Party Dependency Installation
output/深圳财务总监_20260410_report.json:4Absolute Local Path and Workstation Username Disclosure
The declared description presents a comprehensive global compensation market analysis skill, but the supplied code only performs CSV-to-Excel formatting/export. Its functionality is limited to reading a CSV, creating an Excel workbook, applying styles, setting widths, freezing the header row, and enabling filtering. There is no evidence of salary analysis, currency handling, PPP adjustment, percentile computation, report writing, or recommendation generation. The code’s primary purpose is materially different from the declared purpose, so this is a clear mismatch.
The description presents a broad end-to-end global compensation market research and reporting skill. The supplied code implements only a narrow subset: multi-currency conversion, PPP adjustment, and expatriate salary package estimation, plus CSV batch processing. These align with part of the declared description, especially '多币种自动换算', 'PPP购买力平价调整', and '外派薪酬建议'. However, major claimed capabilities are absent from this chunk: there is no multi-source data acquisition, no comprehensive survey analysis workflow, no percentile computation, no 28-field template handling in any substantive sense, no professional report generation, and no multi-format export beyond CSV. Therefore the code does not accurately represent the full declared purpose and is materially narrower in scope.
The declared description presents a comprehensive global salary market research and analysis skill, but the supplied code only performs basic CSV data cleaning. Its primary purpose is materially different: deduplication, missing-value filtering, limited salary format normalization, and outlier removal. It does not implement the core advertised capabilities such as global multi-source ingestion, currency conversion, PPP adjustment, percentile computation, professional report generation, expatriate compensation advice, or multiple output formats. Therefore the description does not accurately represent the code chunk's actual behavior.
The declared description promises a comprehensive global compensation market research capability with advanced analytics and reporting features. The supplied code only implements basic file loading from CSV/JSON, simple filtering, simple aggregate statistics, and JSON export. This is not just a partial implementation detail; the primary purpose and feature set are materially narrower than declared. There are no undeclared risky capabilities, but the description substantially overstates what the code actually does.
The declared description presents a comprehensive compensation market analysis skill with substantial data-processing and analytical capabilities. The actual code does not perform compensation analysis at all; it only converts Markdown text into a formatted Word document. While 'multi-format output' is loosely related to report export, this code alone is only a document rendering/export helper and lacks the core declared functionality. Therefore, the description does not accurately represent the supplied code chunk.
The description is partially aligned with the code: the implementation does support salary market data processing across domestic and overseas contexts, multi-currency conversion for more than 20 currencies, PPP adjustment, percentile calculation, and output in multiple file formats. However, several prominent declared capabilities are not implemented in this code chunk. Most notably, there is no 28-field template handling (the code explicitly says 16/24-field CSV support), no 17+ chapter professional report generation, no expatriate compensation recommendation engine, and no broad multi-format output beyond JSON/CSV. Also, 'multi-source' in the code means categorizing source labels inside already-supplied data, not collecting or merging from disparate external sources. These gaps are material enough that the declared description overstates the actual behavior.
Without declared permissions the skill's intent is opaque and cannot be validated.
The manifest description is written entirely in Chinese and presents the skill as a global capability, but it does not offer any user language preference or indicate that Chinese is required for a region-specific reason. Under the policy, forcing a specific language without user opt-in is a natural-language policy concern.
The skill instructs users to collect and process real salary-market data from many external sources, including detailed company, location, compensation, and potentially personally identifying job-posting information, but it does not provide clear privacy, legal, retention, or source-terms guidance. In HR and compensation contexts, this increases the risk of collecting personal or regulated data without adequate handling rules, leading to privacy violations, contractual breaches, or inappropriate downstream sharing.
This markdown file instructs users to run scripts that automatically extract and export data from recruitment websites, but it does not warn that automated collection may capture personal or sensitive information from pages being viewed. Under the markdown variant of SQP-2, behaviors affecting privacy or user data should include an explicit warning.
The section promotes high-volume automated scraping and writing results to data.csv, and even suggests proxy use, but only mentions robots.txt and rate limiting. It omits user-facing warnings about potential collection of personal data, obligations to handle exported data safely, and the operational impact of running automation against third-party sites.
The entire report template is written in Chinese and provides no indication that users may choose another language or locale. Under the policy rule for natural-language constraints, this can be treated as a forced language/locale default without explicit opt-in or region-specific justification.
The template makes a categorical trust claim that the report is based on real market data from real channels, while the file is clearly a reusable template with placeholders, fixed example coefficients, and no enforcement mechanism tying output to verified sources. This can mislead users into treating generated content as validated factual analysis even when the underlying agent may have incomplete, stale, synthetic, or unverified inputs.
This code file contains natural-language instructions and output text that assume Chinese as the required language for all users. Under the language/locale policy, forcing a specific language without user opt-in is a violation unless the locale restriction is explicitly justified.
This Python file contains user-facing documentation, CLI help text, argument descriptions, and runtime messages almost entirely in Chinese. Under the policy for natural-language violations, forcing a specific language without user opt-in is in scope, and the file does not present any option to select another language or document a justified locale restriction.
This code file contains natural-language content that forces a specific language for the skill's description and usage instructions. Under the policy, language constraints should offer user opt-in or be clearly justified as region-specific, neither of which is present here.
Natural-language strings in docstrings, argparse help text, and printed status/statistics messages are all Chinese-only. There is no option for alternative language output and no documented justification for a Chinese-only locale policy.
This code file contains user-facing natural language and output formatting that are explicitly Chinese-only, including the top-level description and intended usage context. It also hardcodes a Chinese font later in the file, but nowhere indicates that the locale is optional or limited to a justified region-specific use case, which conflicts with the language/locale policy criteria.
The script sets the default and East Asian fonts to '微软雅黑', enforcing a specific locale-dependent presentation in generated documents. Because no user-facing option or documented justification is provided, this is a natural-language locale policy issue rather than a functional bug.
SQP-3 applies to all file types and covers natural-language locale policy violations. This file’s docstring, CLI help text, and output messages enforce Chinese as the interaction language, with no indication that users may choose another language or that the constraint is justified as region-specific.
SQP-3 applies to all file types and covers natural-language policy violations such as forcing a specific language without user opt-in. This CSV uses Chinese headers and values throughout, but provides no natural-language indication that the language/locale is optional or intentionally constrained to a China/Chinese-speaking context.
This markdown file contains natural-language content exclusively in Chinese and does not indicate that the user can choose another language or locale. Under the stated policy, forcing a specific language without user opt-in can be a natural-language policy violation unless the locale restriction is explicitly documented and justified.
The file presents all operational guidance exclusively in Chinese and does not indicate that the language is optional, selectable, or required for a region-specific purpose. Per SQP-3, forcing a specific language without user opt-in can be a natural-language policy violation.
This markdown file contains user-facing natural language exclusively in Chinese, including headings, instructions, and checklist items. Under the policy rule for language or locale constraints, forcing a specific language without opt-in can be a policy issue when no justification or alternative is provided.
该技能文件从标题开始即完全以中文编写,但未说明这是面向中文用户的限定文档,也未提供其他语言选项或用户选择机制。根据语言/locale 政策,若未有明确的用户选择或合理的区域限定说明,强制单一语言可能构成自然语言政策问题。
No suspicious patterns detected.