Back to skill

Security audit

EU ebook accessibility

Security checks for vulnerabilities and agentic risk

Overview

The skill is purpose-aligned, but it needs review because installation is mutable and the configured remote MCP can receive complete EPUB files under implicit invocation.

Install only if you are comfortable with the PowMCP service receiving the EPUB you ask it to check. Avoid confidential, embargoed, or unpublished files unless you have approval to use the external service; use the documented local DAISY Ace path for sensitive artifacts. Prefer a pinned or verified installer/source revision instead of the mutable npx command.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • 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
Findings (2)

T08 · Insecure Dependencies

Error
Location
SKILL.md:34
Finding
Unpinned Package Retrieval and Execution<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md`, line 34 **Vulnerability Type**: Unpinned third-party dependency execution **Risk Level**: High ### Vulnerable Code ```markdown ## Connect once \`\`\` npx skills add powmcp/skills --skill substantiate-eu-ebook-accessibility-claim \`\`\` ``` ### Technical Analysis The installation instruction invokes a package through `npx` without pinning the installer package, repository source, release version, commit hash, or integrity digest. Depending on the local `npx` cache and environment, the command may download and execute the currently published version of the `skills` package. The `powmcp/skills` source is also referenced without an immutable revision. Consequently, the components executed or installed when a user follows this instruction can differ from those reviewed during this audit. This creates a supply-chain trust boundary in which compromise of the package registry entry, publisher account, upstream repository, or distribution process could introduce attacker-controlled code. The behavior is not required at this privilege level: the Skill could provide a pinned package version and immutable source revision instead. ### Attack Path 1. An attacker compromises the publisher account, package registry entry, upstream repository, or another relevant distribution component. 2. The attacker publishes a malicious version under the expected package or repository identity. 3. A user follows the documented `npx skills add ...` installation command. 4. `npx` retrieves or resolves the mutable package version. 5. The malicious package executes with the operating-system privileges of the invoking user. 6. The payload can access resources available to that user, including project files, environment variables, credentials readable by the process, and network services. ### Impact Assessment Successful exploitation can result in arbitrary code execution under the invoking user's account. The accessible ...[truncated 688 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Pin the `npx` installer to an explicitly reviewed version, for example by using a command equivalent to `npx skills@<exact-version> ...`. 2. Pin the Skill source to an immutable commit hash or signed release tag rather than the mutable `powmcp/skills` reference. 3. Publish and verify cryptographic checksums or signatures for downloaded artifacts. 4. Use lockfiles where supported and require integrity metadata for all transitive dependencies. 5. Avoid automatic execution of newly downloaded packages. Prefer a separate download-and-verify step before installation. 6. Document the expected package publisher, repository revision, checksum, and verification procedure. 7. Run installation in a sandbox or least-privileged environment without unnecessary credentials or access to sensitive projects. ]]>

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:73
Finding
Disclosure of Complete Release EPUBs to a Third-Party MCP Service<![CDATA[ ## Vulnerability Details **File Locations**: `SKILL.md`, lines 37–40 and 73–76; `agents/openai.yaml`, lines 8–13 **Vulnerability Type**: Sensitive artifact transmission to an external service **Risk Level**: Medium ### Vulnerable Code `SKILL.md`, lines 37–40: ```markdown - Claude Code: `claude mcp add --transport http powmcp-epub-accessibility-check https://powmcp.com/epub-accessibility-check/mcp` - Codex CLI: `codex mcp add powmcp-epub-accessibility-check --url https://powmcp.com/epub-accessibility-check/mcp` - Gemini CLI: `gemini mcp add --transport http powmcp-epub-accessibility-check https://powmcp.com/epub-accessibility-check/mcp` - Cursor: https://cursor.com/en/install-mcp?name=powmcp-epub-accessibility-check&config=eyJ1cmwiOiJodHRwczovL3Bvd21jcC5jb20vZXB1Yi1hY2Nlc3NpYmlsaXR5LWNoZWNrL21jcCJ9 ``` `SKILL.md`, lines 73–76: ```markdown Tell the user that the call can take up to about 90 seconds before calling `powmcp-epub-accessibility-check:epub_accessibility_check`. Supply exactly one source: one direct public HTTP(S) EPUB URL in `url`, or one EPUB attached in the conversation through `file`. Pass an attachment through `file`, not as a URL, and do not supply both source kinds. Do not use a local path, cloud-drive share, archive or viewer page, or authenticated URL requiring login as `url`. ``` `agents/openai.yaml`, lines 8–13: ```yaml dependencies: tools: - type: "mcp" value: "powmcp-epub-accessibility-check" description: "Ebook Accessibility Check (PowMCP)" transport: "streamable_http" url: "https://powmcp.com/epub-accessibility-check/mcp" ``` ### Technical Analysis The Skill configures a remote MCP endpoint and instructs the agent to submit either an attached EPUB or a public URL from which the complete EPUB can be retrieved. The declared accessibility-checking functionality legitimately requires access to the publication bytes, but remote disclosure is not the minimum privilege necessary because the same d ...[truncated 2624 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Require explicit informed user consent before transmitting an EPUB to the external MCP service. 2. Clearly identify the data recipient and state that the complete publication will leave the user's environment. 3. Default confidential, embargoed, or unpublished EPUBs to the documented local DAISY Ace workflow. 4. Ask the user to classify the artifact's confidentiality before choosing remote processing. 5. Document the service's retention period, deletion controls, encryption in transit and at rest, operator-access restrictions, subprocessors, processing jurisdiction, and secondary-use policy. 6. Provide a mechanism for immediate deletion and a way to verify that deletion. 7. Avoid requiring public exposure of private artifacts. Where remote use is expressly authorized, use narrowly scoped, short-lived download tokens without logging or displaying their query strings. 8. Minimize metadata sent outside the EPUB and avoid transmitting unrelated conversation content. 9. Add a warning to the report identifying that remote processing occurred and naming the recipient. 10. Preserve the existing prohibitions against authenticated URLs, credential echoing, and repeating URL query strings. ]]>
Vulnerability Patterns
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (2)

Rp1

Medium
Category
MCP Rug Pull
Confidence
93% confidence
Finding
The skill instructs users to run `npx skills add powmcp/skills --skill substantiate-eu-ebook-accessibility-claim` without pinning an exact package version. `npx` resolves and executes the latest published package by default, so a compromised upstream release or supply-chain takeover could cause users to run attacker-controlled code during setup.

Vague Triggers

Medium
Confidence
92% confidence
Finding
The skill enables implicit invocation without defining trigger constraints or exclusions, so the agent may automatically call an external MCP service based on loosely related user requests. Because this tool sends content to a remote endpoint over HTTP and is intended for approval-related accessibility decisions, unintended invocation could expose EPUB content or metadata and trigger unreviewed external actions.

Static analysis

No suspicious patterns detected.