Back to skill

Security audit

Drive Axle

Security checks for vulnerabilities and agentic risk

Overview

The skill is purpose-aligned for generating drive-axle CAD drawings through an external service, but it uses unsafe shell command templates with user-provided values and creates unauthenticated result links.

Install only if you are comfortable sending drive-axle design parameters to jixietools.com and receiving unauthenticated result links. Agents using this skill should avoid direct shell-string substitution, build HTTP requests with structured JSON serialization, validate product IDs and parameter names, and treat filename and guest_code values as sensitive sharing links.

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

Error
Location
SKILL.md:75
Finding

Shell Command Injection Through Unsafe JSON Interpolation

Content
View full analysis

Vulnerability Details

File Location: SKILL.md, lines 75-78, 89-92, and 135-138
Vulnerability Type: Shell command injection caused by unsafe construction of JSON request bodies
Risk Level: High

Vulnerable Code

Lines 75-78:

bash
curl -s -X POST "https://jixietools.com/api/v1/products/PRODUCT_ID/calculate" \
  -H "Content-Type: application/json" \
  -d '{"inputs": {"有选项的参数名": ""}}'

Lines 89-92:

bash
curl -s -X POST "https://jixietools.com/api/v1/products/PRODUCT_ID/calculate" \
  -H "Content-Type: application/json" \
  -d '{"inputs": {"参数名1": "值1", "参数名2": "值2", ...}}'

Lines 135-138:

bash
curl -s -X POST "https://jixietools.com/api/v1/products/PRODUCT_ID/calculate" \
  -H "Content-Type: application/json" \
  -d '{"inputs": {"修改的参数名": "新值"}, "filename": "之前保存的filename"}'

Technical Analysis

The skill instructs the agent to insert product identifiers, parameter names, parameter values, and a server-provided filename into shell command templates. The JSON body is enclosed in a single-quoted shell argument, but the instructions do not require JSON serialization, shell-safe argument handling, schema validation, or rejection of shell metacharacters.

If an implementation performs direct textual substitution, a user-controlled value containing a single quote can terminate the -d argument. The remaining text can then be interpreted by the shell as additional syntax or commands. JSON escaping alone is not sufficient because JSON escaping does not protect shell quoting boundaries.

The same weakness applies during initial calculation and incremental modification. The latter is particularly exposed because the workflow explicitly lets the user select a parameter and provide a new value.

The product identifier should also be validated as a numeric identifier before it is placed in the URL. Although it appears to originate from the product API, the documented template doe ...[truncated 1873 chars]

Remediation
View remediation

Remediation Suggestions

  1. Replace interpolated shell commands with a programmatic HTTP client such as Python requests or urllib.
  2. Construct request bodies as native dictionaries and serialize them with a trusted JSON library:
    python
    import requests
    
    payload = {
        "inputs": changed_inputs,
        "filename": filename,
    }
    
    response = requests.post(
        f"https://jixietools.com/api/v1/products/{product_id}/calculate",
        json=payload,
        timeout=30,
    )
    response.raise_for_status()
    
  3. If curl must be used, write JSON generated by a trusted serializer to standard input or a securely created temporary file. Invoke curl through an argument array without shell=True; never concatenate user-controlled text into a shell command.
  4. Validate PRODUCT_ID as an integer obtained from the trusted product-list response.
  5. Accept parameter names only if they exactly match keys returned by the product-definition API.
  6. Validate values against the expected type, length, range, and allowed dropdown options before transmission.
  7. Treat filename as an opaque server-issued identifier and enforce a restrictive expected character pattern before reuse.
  8. Add explicit instructions prohibiting direct substitution of user or API-controlled values into shell command strings.
  9. Apply HTTP timeouts, response-size limits, status validation, and bounded polling to reduce availability and resource-consumption risks.
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (10)

External Script Fetching

High
Category
Supply Chain
Confidence
90% confidence
Finding

Remote code is downloaded and executed. This bypasses code review and could introduce malicious code.

Content

Scanner excerpt · SKILL.md (reported line 29)May include surrounding context.

Step 1: 列出驱动桥产品

  1. 用 curl 获取驱动桥列表:
    bash
    curl -s "https://jixietools.com/api/v1/products?category_id=8" | python3 -m json.tool
    

External Script Fetching

High
Category
Supply Chain
Confidence
90% confidence
Finding

Remote code is downloaded and executed. This bypasses code review and could introduce malicious code.

Content

Scanner excerpt · SKILL.md (reported line 29)May include surrounding context.

Step 1: 列出驱动桥产品

  1. 用 curl 获取驱动桥列表:
    bash
    curl -s "https://jixietools.com/api/v1/products?category_id=8" | python3 -m json.tool
    

External Script Fetching

High
Category
Supply Chain
Confidence
90% confidence
Finding

Remote code is downloaded and executed. This bypasses code review and could introduce malicious code.

Content

Scanner excerpt · SKILL.md (reported line 47)May include surrounding context.

用户选择后,获取该产品的参数定义:

bash
curl -s "https://jixietools.com/api/v1/products/PRODUCT_ID/start" | python3 -m json.tool

返回结构:

External Script Fetching

High
Category
Supply Chain
Confidence
90% confidence
Finding

The skill repeatedly embeds raw curl command templates for posting user-controlled values and a persistent filename token to an external endpoint. In agent environments that may operationalize such snippets, this pattern expands the attack surface by encouraging shell-based network actions with user-influenced content, creating risks of unsafe command construction, token leakage, and unintended outbound data transfer.

Content

Scanner excerpt · SKILL.md (reported line 147)May include surrounding context.

  1. 收集要修改的参数名和新值
  2. 构建增量请求:只包含变化的参数 + filename:
    bash
    curl -s -X POST "https://jixietools.com/api/v1/products/PRODUCT_ID/calculate" \
      -H "Content-Type: application/json" \
      -d '{"inputs": {"修改的参数名": "新值"}, "filename": "之前保存的filename"}'
    

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The description says the skill should be used when the user says phrases including “做一个驱动桥”, which is a broad natural phrase that could appear in normal conversation without clearly indicating intent to invoke this specific skill workflow. The trigger guidance also does not include exclusions or boundary conditions, increasing the risk of unintended activation.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The document states the 驱动桥分类 ID is 36 at L014, but the actual Step 1 command at L031 queries products with category_id=8. These two instructions cannot both be correct, so the inline documentation actively conflicts about what data the skill should operate on.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
88% confidence
Finding

This step instructs the agent to transmit user-influenced parameters to an external service to obtain dropdown values. Even though the payload shown is minimal, it still establishes a data flow to a third-party endpoint without any notice, consent, data-classification guidance, or restriction on what may be sent, which can leak sensitive design inputs.

Content

Scanner excerpt · SKILL.md (reported line 78)May include surrounding context.

  • 有 options_source 的参数(下拉选项类型): 先进行一次预计算获取 dropdown 选项:
    bash
    curl -s -X POST "https://jixietools.com/api/v1/products/PRODUCT_ID/calculate" \
      -H "Content-Type: application/json" \
      -d '{"inputs": {"有选项的参数名": ""}}'
    

External Transmission

Medium
Category
Data Exfiltration
Confidence
93% confidence
Finding

The incremental update flow sends modified parameters plus a persistent filename token to an external service. That filename acts as a session/workbook reference; combined with parameter updates, it can expose sensitive model state and creates a risk if identifiers are logged, replayed, or shared across users.

Content

Scanner excerpt · SKILL.md (reported line 147)May include surrounding context.

  1. 收集要修改的参数名和新值
  2. 构建增量请求:只包含变化的参数 + filename:
    bash
    curl -s -X POST "https://jixietools.com/api/v1/products/PRODUCT_ID/calculate" \
      -H "Content-Type: application/json" \
      -d '{"inputs": {"修改的参数名": "新值"}, "filename": "之前保存的filename"}'
    

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The skill explicitly creates and exposes unauthenticated production-sheet URLs and repeatedly polls guest status endpoints without warning the user that possession of the link/code may grant access to design status and output files. Because access is intentionally unauthenticated, accidental disclosure in chat history, logs, or shared screens could expose proprietary CAD artifacts to unintended parties.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The instruction “用中文与用户对话” forces a specific language for all interactions without offering the user a language preference. This is a natural-language policy issue because it imposes a locale/language constraint without opt-in or documented justification.

Content

No source excerpt is available for this finding.