Back to skill

Security audit

Qa Testcase Generator

Security checks for vulnerabilities and agentic risk

Overview

This appears to be a real QA test-case generator, but its Excel exporter can preserve unsafe spreadsheet formulas from input text.

Review before installing if your requirements documents may come from untrusted sources. Use a virtual environment with pinned dependencies, invoke the skill only on intended files, and open generated spreadsheets with external links and active content disabled until formula sanitization is added.

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)

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/writer.py:120
Finding

Untrusted Input Can Produce Active Excel Formulas

Content
View full analysis

Vulnerability Details

File Locations:

  • scripts/writer.py:120-130
  • scripts/pairwise.py:249-253

Vulnerability Type: Spreadsheet formula injection
Risk Level: Medium

Vulnerable Code

In scripts/writer.py:120-130, values derived from requirement documents or input JSON are written directly to workbook cells:

python
row_data = [
    seq_num, case_id, priority, test_dim, case_type, domain,
    design, scenario, test_point, steps_text, expected_text,
    test_data, precondition, req_source, "",
]

for col, value in enumerate(row_data, 1):
    cell = ws.cell(row=row, column=col, value=value)
    cell.font = BASE_FONT
    cell.alignment = WRAP
    cell.border = BORDER

The same pattern occurs in scripts/pairwise.py:249-253:

python
for j, name in enumerate(names):
    cell = ws.cell(row=i, column=j + 2, value=str(row.get(name, "")))
    cell.font = BASE_FONT
    cell.alignment = WRAP
    cell.border = BORDER

Technical Analysis

Both Excel exporters treat externally supplied text as trusted cell content. No validation or neutralization is applied to values beginning with spreadsheet formula indicators such as =, +, -, or @.

Openpyxl normally stores an =-prefixed string as a formula rather than literal text. Consequently, an attacker-controlled requirement, test-case field, parameter name, or pairwise parameter value can become an active formula in the generated workbook.

The vulnerability crosses a trust boundary because source documents and JSON inputs may be supplied by third parties, while the generated workbook is expected to be opened by a reviewer. Formula execution behavior depends on the spreadsheet application and its security configuration.

Attack Path

  1. An attacker creates a requirement document or JSON input containing a formula-like value, such as an external-reference or hyperlink formula.
  2. The Skill extracts or preserves ...[truncated 1286 chars]
Remediation
View remediation

Remediation Suggestions

  1. Introduce a centralized cell-sanitization function and apply it to every externally derived textual value:

    python
    def sanitize_excel_text(value):
        if value is None:
            return ""
        if not isinstance(value, str):
            return value
    
        if value.startswith(("=", "+", "-", "@")):
            return "'" + value
    
        return value
    
  2. Call this function before every untrusted value is assigned to a workbook cell:

    python
    safe_value = sanitize_excel_text(value)
    cell = ws.cell(row=row, column=col, value=safe_value)
    
  3. Apply equivalent protection in pairwise.py to parameter names, headers, and parameter values.

  4. Consider also protecting values whose first non-whitespace character is a formula indicator:

    python
    if value.lstrip().startswith(("=", "+", "-", "@")):
        return "'" + value
    
  5. Preserve numeric fields as numeric values, but explicitly treat all document-derived descriptive fields as text.

  6. Add regression tests covering formula prefixes, leading whitespace, tabs, carriage returns, and Unicode control characters.

  7. Document that generated workbooks should be opened with external links and active content disabled.

T08 · Insecure Dependencies

Note
Location
references/environment.md:15
Finding

Runtime Dependencies Are Installed Without Exact Version or Integrity Pinning

Content
View full analysis

Vulnerability Details

File Locations:

  • references/environment.md:15
  • references/environment.md:28-34
  • README.md:97-99

Vulnerability Type: Unpinned third-party dependencies
Risk Level: Low

Vulnerable Configuration

references/environment.md instructs users to install mutable package versions directly:

bash
pip install openpyxl
bash
# PDF parsing
pip install pdfplumber PyMuPDF

# Word parsing
pip install python-docx

# Install all dependencies
pip install openpyxl pdfplumber PyMuPDF python-docx

Similar unpinned installation commands are duplicated in README.md.

Technical Analysis

The package names are consistent with the Skill's declared document-processing and Excel-generation functionality, and no suspicious package repository or obvious typosquatted dependency was identified. However, the installation commands do not specify exact versions, hashes, or a reviewed lock file.

As a result, the effective dependency set can change over time. Installation trusts whichever releases and transitive dependencies are selected by the package index at execution time. This weakens reproducibility and exposes users to upstream package compromise, dependency substitution through index configuration, and incompatible future releases.

The documentation lists minimum versions, but the actual commands do not enforce those constraints or establish an upper bound.

Attack Path

  1. A user follows the Skill's first-run environment instructions.
  2. Pip queries the configured package index and resolves the latest acceptable versions.
  3. A compromised upstream release, compromised transitive dependency, or package supplied by an unsafe configured index is downloaded.
  4. The package is installed into the user's Python environment.
  5. The Skill subsequently imports the dependency while parsing documents or generating Excel files.
  6. Malicious dependency code can execut ...[truncated 607 chars]
Remediation
View remediation

Remediation Suggestions

  1. Add a reviewed dependency lock file containing exact versions.

  2. Include cryptographic hashes and require their verification:

    bash
    python -m pip install --require-hashes -r requirements.txt
    
  3. Separate required and optional dependencies, for example into requirements.txt and requirements-docs.txt.

  4. Generate the lock file from a controlled environment and review both direct and transitive dependencies.

  5. Document the expected package index and prevent unintended fallback to untrusted indexes.

  6. Recommend installation in a dedicated virtual environment rather than a global or privileged Python environment.

  7. Add an automated dependency update process that performs vulnerability scanning and regression testing before new versions are accepted.

  8. Keep the README and environment reference synchronized so users are not directed to bypass the pinned installation method.

Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
Findings (85)

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

If the actual capability is only formatting preexisting structured JSON into Excel, then the skill is much narrower than claimed and may still process local artifacts the user did not intend to expose. The context makes this concerning because the visible skill contract encourages users to provide high-value requirement and design documents under false assumptions about how they will be used.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

If the actual capability is only formatting preexisting structured JSON into Excel, then the skill is much narrower than claimed and may still process local artifacts the user did not intend to expose. The context makes this concerning because the visible skill contract encourages users to provide high-value requirement and design documents under false assumptions about how they will be used.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

If the actual capability is only formatting preexisting structured JSON into Excel, then the skill is much narrower than claimed and may still process local artifacts the user did not intend to expose. The context makes this concerning because the visible skill contract encourages users to provide high-value requirement and design documents under false assumptions about how they will be used.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

If the actual capability is only formatting preexisting structured JSON into Excel, then the skill is much narrower than claimed and may still process local artifacts the user did not intend to expose. The context makes this concerning because the visible skill contract encourages users to provide high-value requirement and design documents under false assumptions about how they will be used.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

If the actual capability is only formatting preexisting structured JSON into Excel, then the skill is much narrower than claimed and may still process local artifacts the user did not intend to expose. The context makes this concerning because the visible skill contract encourages users to provide high-value requirement and design documents under false assumptions about how they will be used.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

If the actual capability is only formatting preexisting structured JSON into Excel, then the skill is much narrower than claimed and may still process local artifacts the user did not intend to expose. The context makes this concerning because the visible skill contract encourages users to provide high-value requirement and design documents under false assumptions about how they will be used.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
93% confidence
Finding

If the actual capability is only formatting preexisting structured JSON into Excel, then the skill is much narrower than claimed and may still process local artifacts the user did not intend to expose. The context makes this concerning because the visible skill contract encourages users to provide high-value requirement and design documents under false assumptions about how they will be used.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

If the actual capability is only formatting preexisting structured JSON into Excel, then the skill is much narrower than claimed and may still process local artifacts the user did not intend to expose. The context makes this concerning because the visible skill contract encourages users to provide high-value requirement and design documents under false assumptions about how they will be used.

Content

No source excerpt is available for this finding.

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · testcase/02-file-management-testcases.json (reported line 425)May include surrounding context.

json
"操作步骤": [
        {"步骤": 1, "操作": "访问 /preview/00000000-0000-0000-0000-000000000000", "预期": "提示「文件不存在」或404页面"},
        {"步骤": 2, "操作": "访问 /preview/abc(非法UUID格式)", "预期": "返回400错误或提示参数格式错误"},
        {"步骤": 3, "操作": "访问 /preview/../../../etc/passwd(路径遍历尝试)", "预期": "拒绝访问或404,不泄露系统路径"}
      ],
      "测试数据": "file_id: 全零UUID、非法格式abc、路径遍历",
      "前置条件": "用户已登录",

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · testcase/combined.json (reported line 1520)May include surrounding context.

json
"操作步骤": [
        {"步骤": 1, "操作": "访问 /preview/00000000-0000-0000-0000-000000000000", "预期": "提示「文件不存在」或404页面"},
        {"步骤": 2, "操作": "访问 /preview/abc(非法UUID格式)", "预期": "返回400错误或提示参数格式错误"},
        {"步骤": 3, "操作": "访问 /preview/../../../etc/passwd(路径遍历尝试)", "预期": "拒绝访问或404,不泄露系统路径"}
      ],
      "测试数据": "file_id: 全零UUID、非法格式abc、路径遍历",
      "前置条件": "用户已登录",

Description-Behavior Mismatch

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The manifest describes a skill that generates structured Excel test cases from user-supplied requirements documents or flowchart images. This file instead contains a preauthored, exhaustive test repository spanning authentication, file management, approvals, WebDAV, dashboards, auditing, watermarking, and many other modules, which is not evidence of document-driven testcase generation and does not resemble the claimed scoped output artifact.

Content

No source excerpt is available for this finding.

Ssd 3

High
Category
Not specified by scanner
Confidence
97% confidence
Finding

This test case explicitly models a share link that permits downloading user files without authentication, normalizing an insecure access pattern. In the context of a test-case generator, embedding such behavior as expected functionality can propagate insecure requirements into downstream systems and lead to unauthorized disclosure of sensitive files.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
82% confidence
Finding

整个技能说明、触发方式和示例均以中文给出,且未说明是否支持其他语言或允许用户选择交互语言。按自然语言政策要求,若技能实际要求特定语言,应提供用户选择或明确限定为特定地区/语言场景,否则会形成默认语言强制。

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The trigger phrases are broad everyday requests such as generating test cases from requirement or design documents, which can cause the skill to activate unintentionally in normal conversations. In an agent context, unintended activation can lead to processing user files and initiating output-generation workflows without clear user confirmation, increasing the risk of surprise actions and unintended data handling.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
82% confidence
Finding

The skill describes reading inputs and writing outputs, including saving JSON artifacts and invoking a writer script, but it does not declare any explicit tool scope such as allowed-tools or permissions. In a skill system, undeclared file read/write capability weakens least-privilege controls and can let the skill access or modify workspace files beyond what users expect.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The trigger phrases are very broad and overlap with common testing and planning requests, so the skill may activate in contexts where the user did not intend file-heavy testcase generation or document processing. Overbroad triggering increases the chance of accidental invocation, unnecessary access to project materials, and confusing or inappropriate outputs.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The entire skill instruction set is written in Chinese and presents the agent's task, output expectations, and guidance only in that language. There is no indication that the user can choose another language or that the skill is intentionally limited to a Chinese-only compliance or regional context.

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 skill file presents all operational instructions in Chinese and does not indicate that users may choose another language. That creates a locale/language constraint in natural-language guidance without explicit user opt-in, which matches the policy-violation category for language or locale restrictions.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

This JSON manifest contains user-facing analysis text entirely in Chinese across the analysis array. For a general benchmark artifact, the file provides no opt-in, locale selection, or documented justification for restricting output to Chinese, which creates a natural-language locale policy concern.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The entire manifest-style JSON content, including all metadata keys, requirements, and test cases, is written exclusively in Chinese with no indication that users can choose another language or locale. Under the stated policy, a skill artifact that enforces a single language without opt-in is a natural-language policy violation unless the locale restriction is clearly documented and justified.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The file title and instructional content are entirely in Chinese, and the usage note indicates it is to be used in a workflow stage without any opt-in or alternative language guidance. Under the policy, forcing a specific language without user choice or documented regional justification is a natural-language policy violation.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

This markdown file presents all user-facing instructions exclusively in Chinese, including headings, dependency descriptions, and usage examples. Under the policy rule for natural-language violations, forcing a specific language without user opt-in or justification is a locale/language policy issue.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The rule '- [ ] 所有字段使用中文' forces a single output language without considering the user's preferred language or the source document language. In this skill, that can cause incorrect or inaccessible outputs for non-Chinese users, reduce usability, and create quality/compliance issues when test artifacts must remain in the original language.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

Line L25 states that field names must be in Chinese, which imposes a specific language requirement. Under the policy, forcing a language without user opt-in is a natural-language locale violation unless clearly justified as region-specific, which is not explained here.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The module docstring, CLI description, and runtime messages are all written in Chinese, which imposes a specific language on users. The file does not offer any language selection, opt-in, or justification that this tool is intended only for a Chinese-language environment.

Content

No source excerpt is available for this finding.