Trust Assessment
freelance-toolkit-fr received a trust score of 72/100, placing it in the Caution category. This skill has some security considerations that users should review before deployment.
SkillShield's automated analysis identified 3 findings: 0 critical, 1 high, 2 medium, and 0 low severity. Key findings include Unsafe deserialization / dynamic eval, Missing required field: name, HTML Injection / Local File XSS in Invoice Generation.
The analysis covered 4 layers: Manifest Analysis, Static Code Analysis, Dependency Graph, LLM Behavioral Safety. All layers scored 70 or above, reflecting consistent security practices.
Last analyzed on February 13, 2026 (commit 13146e6a). SkillShield performs automated 4-layer security analysis on AI skills and MCP servers.
Layer Breakdown
Behavioral Risk Signals
Security Findings3
| Severity | Finding | Layer | Location | |
|---|---|---|---|---|
| HIGH | HTML Injection / Local File XSS in Invoice Generation The `generate_html` function in `scripts/invoice.py` directly embeds user-provided data (such as client names, item descriptions, and provider details) into the generated HTML invoice without proper sanitization. A malicious user could inject HTML or JavaScript payloads into these fields (e.g., by providing a client name like `Acme <script>alert(document.cookie)</script>`). When the generated HTML file is subsequently opened in a web browser (via `webbrowser.open`), the injected code would execute in the user's browser context. This could lead to client-side attacks, including data exfiltration (e.g., sending local file contents or browser cookies to an attacker-controlled server), defacement, or other malicious actions depending on the browser's security model for local files. Sanitize all user-provided input before embedding it into the HTML template. This can be achieved by using an HTML templating engine that automatically escapes content (e.g., Jinja2, Mako) or by manually escaping HTML special characters (`<`, `>`, `&`, `"`, `'`, `/`) using a utility function before insertion. For example, replace `<` with `<`, `>` with `>`, etc. Apply this sanitization to all fields that accept user input and are rendered into the HTML, including `item['description']`, `provider.get('name')`, `client.get('name')`, `provider.get('address')`, `client.get('address')`, `provider.get('siret')`, `client.get('siret')`, `provider.get('email')`, `client.get('email')`, `provider.get('phone')`, `client.get('phone')`, `client.get('notes')`, `invoice_data.get('payment_method')`, and `invoice_data.get('iban')`. | LLM | scripts/invoice.py:107 | |
| MEDIUM | Unsafe deserialization / dynamic eval Decryption followed by code execution Remove obfuscated code execution patterns. Legitimate code does not need base64-encoded payloads executed via eval, encrypted-then-executed blobs, or dynamic attribute resolution to call system functions. | Manifest | skills/hugosbl/freelance-toolkit-fr/scripts/clients.py:2 | |
| MEDIUM | Missing required field: name The 'name' field is required for claude_code skills but is missing from frontmatter. Add a 'name' field to the SKILL.md frontmatter. | Static | skills/hugosbl/freelance-toolkit-fr/SKILL.md:1 |
Scan History
Embed Code
[](https://skillshield.io/report/6409dc0d4e00cf54)
Powered by SkillShield