Back to skill

Security audit

Premium PDF

Security checks for vulnerabilities and agentic risk

Overview

This skill is a disclosed PDF generator that reads user-provided markdown, rewrites it in a documented style pass, and writes a PDF, with no evidence of hidden execution, exfiltration, or persistence.

Install in a virtual environment, avoid running package installs with administrator privileges, and review generated PDFs because the skill intentionally rewrites text before rendering and provides no disable flag. Only pass markdown files and logo images you intended the skill to read.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (1)

T08 · Insecure Dependencies

Warning
Location
requirements.txt:1
Finding

Unpinned Third-Party Dependencies Without Integrity Verification

Content
View full analysis
=4.0.0 Pillow>=9.0.0 ``` The documented installation workflow executes package installation using these requirements: ```bash pip install -r skills/premium-pdf/requirements.txt ``` The documentation also recommends installing another package globally without a version or integrity constraint: ```bash npm install -g clawhub ``` ### Technical Analysis The Python dependencies use open-ended `>=` constraints rather than exact, reviewed versions. No lockfile or cryptographic hashes are supplied. Consequently, separate installations can resolve to different dependency versions, including releases published after this project was audited. Python package installation may execute package build logic with the privileges of the user running `pip`. The globally installed npm package can likewise execute package lifecycle scripts and is not constrained to a reviewed version. Although the dependency names are consistent with the skill's PDF-generation functionality and there is no evidence that the current packages are malicious, the installation process lacks controls that would make dependency resolution reproducible and integrity-verifiable. This creates a supply-chain exposure if a direct or transitive dependency is compromised, a future release is malicious, or an upstream account or distribution channel is taken over. ### Attack Path 1. An attacker compromises an upstream package publisher, distribution account, package repository, or a dependency used by one of the declared packages. 2. The attacker publishes a malicious release that satisfies `reportlab>=4.0.0` or `Pillow>=9.0.0`, or affects a dependency selected during resolution. 3. A user follows the do ...[truncated 1177 chars]
Remediation
View remediation
Pillow== ``` 2. Generate and commit a reproducible dependency lockfile that includes all transitive dependencies. 3. Record cryptographic hashes for every resolved Python distribution and require verification during installation: ```bash python3 -m pip install --require-hashes -r requirements.txt ``` 4. Regenerate pinned dependencies through a controlled update process that includes vulnerability scanning, release-note review, and functional testing. 5. Install dependencies inside an isolated virtual environment rather than into the system Python environment. 6. Avoid running `pip` or npm installation commands with administrative privileges. 7. Pin the documented `clawhub` version and use npm lockfile or integrity controls where applicable. Prefer a project-local or otherwise isolated installation over an unrestricted global installation. 8. Configure package managers to use approved registries and consider an internal package mirror containing reviewed artifacts. ]]>
Vulnerability Patterns
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
Findings (9)

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
88% confidence
Finding

The skill advertises and demonstrates reading markdown from arbitrary file paths, but it does not declare any tool scope or permissions boundaries. In an agent ecosystem, this can enable unintended file access because the agent may treat local file reads as implicitly allowed, increasing the risk of reading sensitive workspace or host files when prompted ambiguously or maliciously.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The skill automatically rewrites input text through a 'de-AI humanization' pipeline but does not prominently warn users that their content will be altered before output. This is dangerous because it can silently change meaning, tone, qualifiers, or legally important wording in reports and business documents, creating integrity and trust risks even when the PDF generation itself succeeds.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The invocation guidance is broad enough to trigger on many generic requests like 'create a PDF' or 'generate a report PDF' without clarifying boundaries around what content sources may be used. In practice, that increases the chance the agent invokes the skill in situations where it may pull from local files or rewrite content without explicit user consent, making prompt-driven misuse easier.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The script automatically rewrites user-supplied markdown via deai_transform() before rendering, with no opt-in, preview, or preservation of the original text. In a PDF-generation skill, this can silently alter meaning, tone, legal wording, quotations, technical syntax, or compliance-sensitive content, creating integrity and trust risks even without code execution.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
79% confidence
Finding

The document duplicates instructions in Italian alongside English, but it does not explicitly state that language selection is optional or user-driven. Under the locale-policy rule, forcing or assuming a specific language without opt-in can be a natural-language policy concern.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
97% confidence
Finding

The dependency is specified with a minimum version only, which allows future installs to resolve to different versions over time and makes builds non-reproducible. This is risky because reportlab has a history of serious vulnerabilities, and without exact pinning or a lockfile there is no assurance that deployments consistently avoid affected versions.

Content

Scanner excerpt · requirements.txt (reported line 1)May include surrounding context.

text
reportlab>=4.0.0
Pillow>=9.0.0

Unverifiable Dependency: reportlab has 8 known advisory(ies) (CVE-2023-33733 (Reportlab vulnerable to remote code execution); CVE-2020-28463 (Server-side Request Forgery (SSRF) via img tags in reportlab); CVE-2019-19450 (ReportLab vulnerable to remote code execution via paraparser) +5 more), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
93% confidence
Finding

Reportlab has multiple known advisories, including remote code execution and SSRF issues, and the manifest does not specify an exact version that can be checked against fixed releases. In a PDF-generation skill, this matters more because reportlab is a core parser/renderer and may process attacker-controlled markdown, embedded content, or images during document creation.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
97% confidence
Finding

The Pillow dependency is also unpinned, so installs may vary across environments and time. Because Pillow has numerous historical advisories, leaving the version range open increases the chance of unintentionally pulling a vulnerable release or encountering supply-chain instability.

Content

Scanner excerpt · requirements.txt (reported line 2)May include surrounding context.

text
reportlab>=4.0.0
Pillow>=9.0.0

Unverifiable Dependency: Pillow has 16 known advisory(ies) (CVE-2016-2533 (Pillow buffer overflow in ImagingPcdDecode); CVE-2023-50447 (Arbitrary Code Execution in Pillow); CVE-2021-27922 (Pillow Uncontrolled Resource Consumption) +13 more), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
91% confidence
Finding

Pillow has many published vulnerabilities, including code-execution and resource-consumption issues, and the absence of version pinning makes it impossible to verify whether deployments are protected. This skill's context increases concern because PDF generation commonly handles user-supplied images, which could expose vulnerable image parsing paths if malicious files are processed.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.