T09 · Insecure Skill Coding Practices
- Location
scripts/lib/render.js:53- Finding
Untrusted Markdown Executes Active Content in a No-Sandbox Browser
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill mostly does what it advertises, but it grants broad local publishing/install authority and renders active Markdown content in ways users should review before installing.
Install only if you are comfortable with a Markdown publishing tool that can render active HTML, fetch remote Mermaid code unless disabled, create public share links through another plugin, archive source documents locally, and install itself across multiple OpenClaw workspaces. Use it only on trusted Markdown, prefer --no-mermaid for sensitive/offline rendering, avoid previewing confidential files on shared networks, use --no-archive for sensitive documents, and run the workspace installer only after a dry run and backup.
scripts/lib/render.js:53Untrusted Markdown Executes Active Content in a No-Sandbox Browser
scripts/lib/render.js:188Runtime Execution of Mutable JavaScript from an External CDN
scripts/md-preview.js:62Live Preview Server Binds to All Network Interfaces and Serves Active Content
scripts/install-to-workspaces.sh:68Workspace Installer Destructively Replaces Skill Directories Across Agent Contexts
package.json:14Dependency Installation Is Not Reproducibly Pinned
scripts/md-share.sh:193Share JSON and Archive YAML Are Constructed with Unescaped User-Controlled Values
The declared purpose is markdown export/publishing, but the documented file list and behavior reference install/deployment scripts that modify multiple workspaces, create symlinks, delete paths during cleanup, and bootstrap dependencies. This exceeds user expectations for a rendering skill and can lead to unintended filesystem changes or destructive operations if the skill is auto-selected for ordinary export requests.
Referenced artifact was not completely inspected
node scripts/md2pdf-puppet.js examples/sample.md # → examples/sample.pdf
Referenced artifact was not completely inspected
node scripts/md2pdf-puppet.js examples/sample.md # → examples/sample.pdf
Referenced artifact was not completely inspected
node scripts/md2pdf-puppet.js examples/sample.md # → examples/sample.pdf
Referenced artifact was not completely inspected
node scripts/md2pdf-puppet.js examples/sample.md # → examples/sample.pdf
Referenced artifact was not completely inspected
node scripts/md2pdf-puppet.js examples/sample.md # → examples/sample.pdf
Referenced artifact was not completely inspected
node scripts/md-preview.js examples/sample.md # 浏览器开 http://127.0.0.1:7777
Referenced artifact was not completely inspected
> 1. AI 调 `bash scripts/md-share.sh report.md --mode pdf --label "Q1 复盘报告"`(默认 `--prefer file`)
Referenced artifact was not completely inspected
> 1. AI 调 `bash scripts/md-share.sh report.md --mode pdf --label "Q1 复盘报告"`(默认 `--prefer file`)
Referenced artifact was not completely inspected
> 1. AI 调 `bash scripts/md-share.sh report.md --mode pdf --label "Q1 复盘报告"`(默认 `--prefer file`)
Referenced artifact was not completely inspected
> 1. AI 调 `bash scripts/md-share.sh report.md --mode pdf --label "Q1 复盘报告"`(默认 `--prefer file`)
Referenced artifact was not completely inspected
> 1. AI 调 `bash scripts/md-share.sh report.md --mode pdf --label "Q1 复盘报告"`(默认 `--prefer file`)
Referenced artifact was not completely inspected
> 1. AI 调 `bash scripts/md-share.sh report.md --mode pdf --label "Q1 复盘报告"`(默认 `--prefer file`)
Referenced artifact was not completely inspected
> 1. AI 调 `bash scripts/md-share.sh report.md --mode pdf --label "Q1 复盘报告"`(默认 `--prefer file`)
Referenced artifact was not completely inspected
> 1. AI 调 `bash scripts/md-share.sh report.md --mode pdf --label "Q1 复盘报告"`(默认 `--prefer file`)
Referenced artifact was not completely inspected
> 1. AI 调 `bash scripts/md-share.sh report.md --mode pdf --label "Q1 复盘报告"`(默认 `--prefer file`)
Referenced artifact was not completely inspected
> 1. AI 调 `bash scripts/md-share.sh report.md --mode pdf --label "Q1 复盘报告"`(默认 `--prefer file`)
Referenced artifact was not completely inspected
> 1. AI 调 `bash scripts/md-share.sh report.md --mode pdf --label "Q1 复盘报告"`(默认 `--prefer file`)
Referenced artifact was not completely inspected
> 1. AI 调 `bash scripts/md-share.sh report.md --mode pdf --label "Q1 复盘报告"`(默认 `--prefer file`)
Referenced artifact was not completely inspected
> 1. AI 调 `bash scripts/md-share.sh report.md --mode pdf --label "Q1 复盘报告"`(默认 `--prefer file`)
Referenced artifact was not completely inspected
> 1. AI 调 `bash scripts/md-share.sh report.md --mode pdf --label "Q1 复盘报告"`(默认 `--prefer file`)
Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).
# 清单层幽灵(workspace/skills/<slug>)
if [[ -e "$outer/$SLUG" && "$outer/$SLUG" != "$target" ]]; then
rm -rf "$outer/$SLUG"
echo " 🗑 cleared stale single-layer: $outer/$SLUG"
fi
Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).
# 清单层幽灵(workspace/skills/<slug>)
if [[ -e "$outer/$SLUG" && "$outer/$SLUG" != "$target" ]]; then
rm -rf "$outer/$SLUG"
echo " 🗑 cleared stale single-layer: $outer/$SLUG"
fi
The README explicitly describes a workflow that exposes rendered documents through public URLs and emphasizes easy delivery to enterprise chat platforms, but it does not prominently warn users that document contents may become externally accessible. In a skill intended for AI-orchestrated sharing, this omission can cause users or agents to publish sensitive internal reports, proposals, or customer materials beyond the intended audience.
The publishing workflow documents automatic archival of source content and later write-back of generated share URLs into a persistent knowledge-base path, but it does not clearly warn that both document data and access links are retained on disk. This creates a confidentiality and retention risk, especially for sensitive business content, because users may not realize the skill leaves durable artifacts that can be discovered, reused, or exfiltrated later.
No suspicious patterns detected.