deploy.sh / export-pdf.sh: path traversal and network exposure

Author: lukesw55Created Jul 2, 2026Updated Jul 2, 2026

Found a few security issues in the helper scripts while reviewing them before installing the skill.

export-pdf.sh

  1. The static server binds all interfaces (server.listen(0, ...) with no host). While an export runs, anyone on the same network can reach it.
  2. The file server joins the request path onto the serve dir without normalization, so GET /../../<anything> reads files outside the deck folder.
  3. If the export throws, the Chromium processes and the server are left running.

deploy.sh

  1. The grep/sed asset-copy pipeline follows ../-style references, so files outside the deck folder can be copied into the Vercel upload, which is public.
  2. The npm install -g vercel fallback changes the user's global environment as a side effect of running a deploy.
  3. Temp dirs leak when the script exits early.

I have fixes ready as two commits: localhost-only bind plus request-path containment for the export server, and safer asset parsing, EXIT-trap cleanup and npx-only invocation for deploy. Same CLI, same flow, same output messages. Root scripts and the plugins/ copies updated together.

Opening a PR with these shortly. I also have a couple of unrelated improvements (richer extract-pptx metadata, repo validation CI) that I'd propose separately so each stays reviewable.

Source: zarazhangrui/frontend-slides