Scan Report
70 /100
product-demo-video
Create product demo videos with voiceover, text overlays, and real browser interactions using Puppeteer, edge-tts, PIL, and FFmpeg
Skill contains a catastrophic `rm -rf /` command in install-deps.sh:23 with no declared shell permissions, plus undeclared shell execution and dynamically generated Python code in record-demo.mjs.
Do not install this skill
Do not deploy this skill. The install-deps.sh script contains `rm -rf /tmp/ffmpeg.tar.xz /tmp/ffmpeg-*-amd64-static` where shell glob expansion could resolve to `/tmp/` or broader paths if the archive doesn't extract as expected. Additionally, SKILL.md declares zero permissions but the implementation requires shell:WRITE, filesystem:WRITE, and network:READ. Remove the shell scripts entirely and declare required capabilities explicitly.
Attack Chain 3 steps
⬡
Escalation Skill invoked with Bash:WRITE capability, allowing shell command execution
SKILL.md⬡
Escalation install-deps.sh uses `rm -rf /tmp/ffmpeg.tar.xz /tmp/ffmpeg-*-amd64-static` — glob expansion could resolve to /tmp/ or broader paths if archive structure is unexpected
scripts/install-deps.sh:23◉
Impact If run as root (e.g., in a Docker container), `rm -rf /tmp/` or broader path wipe could cause data loss across the system
scripts/install-deps.sh:23Findings 6 items
| Severity | Finding | Location |
|---|---|---|
| Critical | Destructive `rm -rf` glob command in install script RCE | scripts/install-deps.sh:23 |
| High | Undeclared shell execution capability Doc Mismatch | scripts/record-demo.mjs:141 |
| High | Dynamically generated Python script executed at runtime RCE | scripts/record-demo.mjs:148 |
| Medium | Unpinned pip dependencies Supply Chain | scripts/install-deps.sh:8 |
| Medium | Remote script download over plain HTTP Supply Chain | scripts/install-deps.sh:19 |
| Low | FFmpeg and ffprobe installed to /usr/local/bin Priv Escalation | scripts/install-deps.sh:21 |
| Resource | Declared | Inferred | Status | Evidence |
|---|---|---|---|---|
| Shell | NONE | WRITE | ✗ Violation | record-demo.mjs:141 execSync(`edge-tts ...`) |
| Shell | NONE | WRITE | ✗ Violation | scripts/install-deps.sh:23 rm -rf glob command |
| Filesystem | NONE | WRITE | ✗ Violation | record-demo.mjs:148 fs.writeFileSync(`${workDir}/overlay.py`, pyScript) |
| Network | NONE | READ | ✗ Violation | install-deps.sh:19 curl downloads FFmpeg from johnvansickle.com |
| Network | NONE | READ | ✗ Violation | record-demo.mjs:89 page.goto(s.url) — navigates to arbitrary URLs |
1 Critical 4 findings
Critical Dangerous Command 危险 Shell 命令
rm -rf / scripts/install-deps.sh:23 Medium External URL 外部 URL
https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-amd64-static.tar.xz scripts/install-deps.sh:19 Medium External URL 外部 URL
https://yourapp.dev/ scripts/record-demo.mjs:56 Medium External URL 外部 URL
https://yourapp.dev/feature1/ scripts/record-demo.mjs:67 File Tree
5 files · 21.3 KB · 601 lines JavaScript 1f · 303L
Markdown 2f · 242L
Shell 1f · 50L
JSON 1f · 6L
├─
▾
references
│ └─
demo-planning.md
Markdown
├─
▾
scripts
│ ├─
install-deps.sh
Shell
│ └─
record-demo.mjs
JavaScript
├─
_meta.json
JSON
└─
SKILL.md
Markdown
Dependencies 3 items
| Package | Version | Source | Known Vulns | Notes |
|---|---|---|---|---|
puppeteer | not pinned | npm i -g puppeteer | No | Installed globally without version constraint |
edge-tts | not pinned | pip3 install edge-tts | No | No version constraint in install command |
Pillow | not pinned | pip3 install Pillow | No | No version constraint in install command |
Security Positives
✓ No credential theft: skill does not access ~/.ssh, ~/.aws, .env, or iterate environment variables for secrets
✓ No data exfiltration: no HTTP POSTs of user data to external servers
✓ No obfuscation: all code is readable plain text, no base64-encoded payloads or eval(atob(...)) patterns
✓ No persistence mechanisms: no cron jobs, startup scripts, or backdoor installations
✓ Legitimate purpose: the core functionality (video demo creation) matches documented behavior