Back to skill

Security audit

jackyshen-gen-quotation

Security checks for vulnerabilities and agentic risk

Overview

This skill has a coherent PDF quotation purpose, but its renderer can expose local files and run injected HTML or JavaScript during PDF generation.

Review before installing. Use this only in a sandboxed workspace with non-sensitive inputs, keep logo_path fixed to the bundled logo.png, and avoid rendering untrusted customer-supplied text until the renderer constrains logo files, escapes HTML, and disables JavaScript/network access during PDF generation.

Vulnerability Patterns
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • 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
Findings (3)

T05 · Unauthorized Access and Privilege Escalation

Error
Location
scripts/render_quotation.py:10
Finding

Arbitrary Local File Disclosure Through Unrestricted Logo Path

Content
View full analysis
Remediation
View remediation
Path: candidate = (ASSET_ROOT / path).resolve() if candidate != ASSET_ROOT and ASSET_ROOT not in candidate.parents: raise ValueError("Logo path is outside the approved asset directory") if candidate.suffix.lower() not in {".png", ".jpg", ".jpeg"}: raise ValueError("Unsupported logo format") if not candidate.is_file(): raise ValueError("Logo does not exist") return candidate ``` 4. Validate image contents using a maintained image-decoding library rather than trusting the extension. 5. Reject SVG unless it is securely sanitized, because SVG can contain active content and external references. 6. Enforce a conservative file-size limit before reading the file. 7. Prefer a fixed logo identifier mapped by server-side code to a trusted file rather than accepting arbitrary paths. 8. Run the renderer in a sandbox with access only to required input, output, template, and asset directories. ]]>

T09 · Insecure Skill Coding Practices

Error
Location
scripts/render_quotation.py:30
Finding

Unescaped Quotation Data Allows Active HTML and JavaScript Injection During PDF Rendering

Content
View full analysis
{{ quotation.doc_title }} ``` ```html {% for note in notes %}
• {{ note }}
{% endfor %} ``` ```html {% for obj in outline.learning_objectives %}
{{ loop.index }}. {{ obj }}
{% endfor %} ``` ### Technical Analysis Jinja2 does not automatically escape HTML m ...[truncated 2778 chars]
Remediation
View remediation
``` 7. Avoid rendering attacker-controlled SVG content unless it has been securely sanitized. 8. Run Chromium without access to sensitive host files or networks, using a dedicated low-privilege account or container. 9. Add regression tests using payloads containing `

T08 · Insecure Dependencies

Warning
Location
README.md:5
Finding

Installation Instructions Use Mutable and Unpinned Third-Party Sources

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (13)

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 · .gitignore (reported line 1)May include surrounding context.

text
.env
node_modules/
config/
.DS_Store

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
- 品牌 logo_path(默认填 `logo.png`,脚本会自动在 skill 目录下查找)

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
- 品牌 logo_path(默认填 `logo.png`,脚本会自动在 skill 目录下查找)

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
- 品牌 logo_path(默认填 `logo.png`,脚本会自动在 skill 目录下查找)

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
- 品牌 logo_path(默认填 `logo.png`,脚本会自动在 skill 目录下查找)

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The trigger guidance is broad enough that ordinary business conversation about quotations, proposals, pricing, or PDFs may invoke the skill unintentionally. In context, the skill can generate files and transform user content into output documents, so accidental activation can cause unintended document creation, context capture, or confusion about whether the user explicitly requested this action.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
94% confidence
Finding

The skill explicitly instructs writing rendered HTML and PDF outputs into a local ./output directory, but it declares no tool scope or permissions boundaries. That creates an unnecessary capability gap: a caller may invoke a file-writing skill without clear consent, policy restriction, or sandbox expectations, increasing the chance of unintended local file creation or overwrite.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The trigger description is very broad, covering common terms like报价、提案、商业文档、生成PDF、培训服务、咨询费用、定价详情, which can activate the skill during ordinary business conversations unrelated to document generation. Over-triggering is dangerous because this skill performs structured extraction and file output, so accidental activation could cause unintended document creation, exposure of sensitive pricing data in generated artifacts, or confusing workflow hijacking.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The skill states that intermediate rendered templates and final outputs must be written under ./output, but the description does not clearly warn users that local HTML and PDF artifacts will be created and retained. This can surprise users and leak sensitive commercial content such as customer names, pricing, banking details, and proposal text into local files that may persist beyond the session.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
89% confidence
Finding

The README presents the skill description and invocation instructions entirely in Chinese, including the explicit example of what to say to Claude, without stating that the user may interact in another language. Although the document output supports Chinese and English mixed content, the instructions do not offer an interaction-language choice or opt-in.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
85% confidence
Finding

The README states that PDF files are written to output/ but does not clearly warn users that invoking the skill causes filesystem writes. While the write target appears fixed and not obviously attacker-controlled from this README, undisclosed file creation is still a security and transparency issue because users may not expect local artifacts containing potentially sensitive commercial data.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
95% confidence
Finding

The HTML root sets lang="zh-CN", which forces a specific language/locale in the rendered document. Under the policy rule, locale constraints should either be optional for users or clearly documented as intentionally region-specific; this file provides neither.

Content

No source excerpt is available for this finding.