T08 · Insecure Dependencies
- Location
SKILL.md:20- Finding
Unpinned Third-Party Dependencies Create a Supply-Chain Risk
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill mostly matches its PDF-to-slide purpose, but it has real safety issues around unbounded URL downloads and output file handling that users should review before installing.
Install only if you are comfortable with a skill that can download user-provided URLs, read full PDFs, spawn bounded crop subagents, and write presentation files. Prefer local PDFs, run it in a restricted workspace, pin dependencies, and fix the crop filename containment and HTML escaping issues before using it on untrusted documents or URLs.
SKILL.md:20Unpinned Third-Party Dependencies Create a Supply-Chain Risk
scripts/crop.py:55Path Traversal Through an Unsanitized Crop Output Name
scripts/generate_slide.py:27Unescaped Presentation Title Enables HTML and Script Injection
The declared purpose describes a document-to-presentation pipeline: ingesting PDFs and producing multi-slide HTML presentations plus outline/summary artifacts. The supplied code does none of that. Its sole function is to crop a region from a local image and save it as a PNG. This is a materially different primary purpose and capability set. While JSON is printed, it only contains the saved image path, not a presentation outline. Therefore the description does not accurately represent the actual behavior.
The declared description promises an end-to-end skill that converts PDFs/documents into a polished multi-slide HTML presentation and also outputs outline JSON and summary markdown. The supplied code chunk only handles a later-stage file operation: saving an already-rendered HTML slide into a destination folder and generating an index.html navigation page once all slides are present. There is no PDF reading, text extraction, summarization, outline generation, or slide content generation in this code. While this script could be a supporting component within a larger slide-generation pipeline, taken on its own it does not accurately match the declared primary purpose.
The declared purpose describes an end-to-end PDF-to-presentation skill that should produce polished HTML slides, an outline JSON, and a markdown summary. The supplied code only renders each PDF page as a PNG image and prints metadata about those images. While PDF page rendering could be a supporting sub-step in a larger slide-generation pipeline, this chunk by itself does not implement the declared primary functionality and lacks the key promised outputs. Therefore, the description materially overstates what the code actually does.
The skill instructs the agent to perform shell commands and write files, but the manifest does not declare any explicit tool scope or allowed-tools boundaries. That increases the blast radius if the skill is triggered unexpectedly or modified later, because the agent may execute filesystem and shell actions without a clearly constrained permission model.
The activation guidance includes broad phrases such as "做PPT", "做幻灯片", and "or any similar intent in Chinese or English," which can overlap with common requests and lacks clear boundaries for when this specific skill should or should not activate. The manifest description also says to trigger when the user mentions making slides or a PPT from a PDF, but does not provide exclusion conditions or negative examples.
The workflow allows downloading arbitrary user-supplied HTTP/HTTPS URLs with curl, despite the skill being presented as a local PDF conversion tool. This expands the trust boundary to remote content and can enable SSRF-like access to internal resources, retrieval of malicious files, or unexpected network egress in environments where the agent has privileged connectivity.
A document conversion skill can reasonably read a local PDF and produce slides, but downloading arbitrary URLs is a separate capability that is not stated in the manifest. Because the skill's declared purpose is conversion rather than web retrieval, adding general HTTP/HTTPS fetching is context-expanding behavior.
The instructions require lang to be either Chinese or English to match the PDF language, and later state "No mixing," which removes user choice over output language. This is a natural-language locale policy concern because the skill mandates a language behavior rather than offering the user an explicit opt-in or override.
The language policy says to match the PDF language exactly and forbids mixing, which imposes a fixed locale behavior. There is no indication that the user may request a different output language or confirm this preference, so the skill enforces language selection without opt-in.
The script prints all user-facing status and completion messages in Chinese, including progress and output-location information. This imposes a specific language on users without opt-in or justification, which matches the language/locale policy violation criteria.
The skill performs network access to user-supplied URLs without an explicit warning or consent step. In agent environments, silent network egress can leak metadata, surprise users, and fetch untrusted content without clear acknowledgment of the privacy and security implications.
No suspicious patterns detected.