T09 · Insecure Skill Coding Practices
- Location
scripts/weaver.py:660- Finding
Untrusted Markdown Can Trigger External Resource Requests During PDF Rendering
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This document-conversion skill is coherent overall, but its PDF workflow can let Markdown trigger external or local resource loading despite local-only privacy wording.
Install only if you are comfortable running local document-conversion scripts and managing pandoc, WeasyPrint, and python-docx yourself. Avoid converting untrusted Markdown to PDF unless you sandbox the process or disable network/local resource access, and prefer pinned dependency versions.
scripts/weaver.py:660Untrusted Markdown Can Trigger External Resource Requests During PDF Rendering
SKILL.md:192Third-Party Conversion Dependencies Are Installed Without Version or Integrity Constraints
The skill documentation clearly instructs users to run local Python scripts that read input files, write output files, and invoke external tooling such as pandoc/weasyprint, but the skill manifest does not declare any tool scope or permissions. This creates a governance gap: an agent or platform may execute file and shell-capable actions without explicit user-visible authorization boundaries, increasing the risk of unintended command execution, file overwrite, or misuse of local resources.
subprocess module calls execute external commands. Without careful input validation, this enables command injection.
def run(cmd):
result = subprocess.run(cmd, cwd=ROOT, text=True, capture_output=True)
if result.returncode != 0:
print(result.stdout)
print(result.stderr, file=sys.stderr)
subprocess module calls execute external commands. Without careful input validation, this enables command injection.
with open(css_path, 'w') as cf:
cf.write(css_content)
result = subprocess.run(
[
"pandoc", md_path,
"-o", str(output_path),
The manifest sets "language": "en", which indicates a fixed language/locale preference in natural-language metadata. There is no accompanying indication that users can opt into another language or that the English-only constraint is specifically justified as region- or compliance-bound.
No suspicious patterns detected.