Back to skill

Security audit

AI-review

Security checks for vulnerabilities and agentic risk

Overview

The skill’s review purpose is coherent, but it tells agents to process PDFs with an unsafe shell command that can expose users to command-injection and file-overwrite risk.

Install only if you are comfortable with the agent accessing the URLs or local files you provide. Avoid using the PDF workflow on untrusted links or paths unless the agent substitutes a safer document parser or uses structured, validated command arguments and secure temporary files.

Vulnerability Patterns
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (1)

T09 · Insecure Skill Coding Practices

Error
Location
SKILL.md:39
Finding
Command Injection and Unsafe Temporary File Handling in PDF Processing Workflow<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md`, line 39 **Vulnerability Type**: Shell command injection and unsafe temporary file handling **Risk Level**: High ### Vulnerable Code ```markdown | **PDF Files (URL/Local)** | Use `shell` with `curl` to download and `pdftotext` to extract text (e.g., `curl -o t.pdf <URL> && pdftotext t.pdf -`). | ``` ### Technical Analysis The skill directs the agent to insert a user-provided URL into a shell command without requiring shell-safe argument handling, URL validation, quoting, or option termination. If the agent substitutes untrusted input directly into the example, shell metacharacters in the URL may be interpreted as command syntax rather than as part of a URL. A value beginning with `-` could also be interpreted as a `curl` option unless option parsing is explicitly terminated. In addition, the predictable relative filename `t.pdf` can overwrite an existing file and may be exposed to symbolic-link or concurrent-operation races. The vulnerability is exploitable when all of the following conditions hold: 1. An untrusted user controls the PDF URL. 2. The agent follows the documented shell-based workflow. 3. The URL is interpolated into the command rather than passed through a structured process API as a discrete argument. 4. The shell executes the resulting command with the agent's operating-system permissions. ### Attack Path 1. An attacker asks the skill to process a PDF and supplies a URL containing shell metacharacters or command substitution syntax. 2. The agent replaces `<URL>` in the documented example with the attacker-controlled value. 3. The shell parses the injected syntax as one or more additional commands. 4. Those commands execute with the same permissions and environment access as the agent process. 5. The commands may read or modify files available to that account, disrupt the current task, or transmit accessible information over the network. 6. Separately, an attacker with sui ...[truncated 965 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Do not interpolate user-controlled URLs into shell command strings. 2. Invoke `curl` and `pdftotext` through a structured process API using explicit argument arrays. 3. Insert `--` before the URL to terminate `curl` option parsing. 4. Permit only explicitly approved URL schemes, such as HTTPS, and reject control characters and malformed URLs. 5. Restrict requests to approved remote destinations where possible. Block loopback, link-local, private-network, and cloud-metadata addresses to reduce server-side request forgery risk. 6. Enforce download size, redirect, timeout, and content-type limits. 7. Create a unique private temporary directory and randomly named file for every operation rather than using `t.pdf`. 8. Open temporary files securely, prevent symbolic-link following, and remove temporary artifacts in a guaranteed cleanup step. 9. Run document conversion with least privilege and, where available, inside a sandbox with restricted filesystem and network access. 10. Replace the unsafe example with guidance equivalent to the following pseudocode: ```text temp_dir = create_private_temporary_directory() pdf_path = create_secure_unique_file(temp_dir) run(["curl", "--fail", "--location", "--max-time", TIMEOUT, "--output", pdf_path, "--", validated_https_url]) run(["pdftotext", pdf_path, "-"]) securely_remove(temp_dir) ``` ]]>
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
Findings (8)

Vague Triggers

Medium
Confidence
93% confidence
Finding
The skill description is broadly framed around reading content from URLs or files and generating reviews, without strong trigger boundaries or tighter scope limitations. This can cause overbroad invocation on untrusted inputs and increase the chance the agent performs network/file access in situations the user did not clearly intend.

Natural-Language Policy Violations

Medium
Confidence
91% confidence
Finding
The file directs the skill to generate summaries and comments in a specific analytical style, and later says it should mimic a specific analytical and critical writing style. This imposes a language/style constraint by default rather than offering the user a choice or making the stylistic preference optional.

Whitespace Padding

Medium
Category
Prompt Injection
Content
Based on the input type, use the following strategy to read the content. If a method fails, clearly inform the user that the content could not be read.

| Content Source          | Recommended Reading Strategy                                                                                             |
| ----------------------- | ------------------------------------------------------------------------------------------------------------------------ |
| **Web URLs**            | Use `browser_navigate`. If initial Markdown extraction is incomplete, use `browser_scroll` to load the full page.       |
| **PDF Files (URL/Local)** | Use `shell` with `curl` to download and `pdftotext` to extract text (e.g., `curl -o t.pdf <URL> && pdftotext t.pdf -`). |
Confidence
70% confidence
Finding
Large whitespace padding was detected (a block of blank lines or a long run of spaces). This can push injected instructions below or to the right of the visible area so a human reviewer never sees them while the agent still reads them. Manual review of the hidden content is recommended.

Context-Inappropriate Capability

Medium
Confidence
96% confidence
Finding
The skill explicitly instructs the agent to use shell commands (`curl`, `pdftotext`) to fetch and process PDFs, which expands capabilities from content review into arbitrary command execution. Because the input may be attacker-controlled URLs or paths, this increases risk of unsafe command composition, SSRF-like network access, and misuse of a powerful execution surface unnecessary for a summarization skill.

Whitespace Padding

Medium
Category
Prompt Injection
Content
| **PDF Files (URL/Local)** | Use `shell` with `curl` to download and `pdftotext` to extract text (e.g., `curl -o t.pdf <URL> && pdftotext t.pdf -`). |
| **YouTube Videos**      | Use `browser_navigate`. The system will automatically provide a summary. Read the generated summary file.                |
| **Podcast Webpages**    | Use `browser_navigate` to get Show Notes. For audio, use `manus-speech-to-text` if an audio file is available.        |
| **Local Files (.md/.txt)** | Use `file` tool with the `read` action.                                                                                  |

## Output Template
Confidence
70% confidence
Finding
Large whitespace padding was detected (a block of blank lines or a long run of spaces). This can push injected instructions below or to the right of the visible area so a human reviewer never sees them while the agent still reads them. Manual review of the hidden content is recommended.

Natural-Language Policy Violations

Medium
Confidence
94% confidence
Finding
The style guide explicitly prescribes Chinese-language output and does not provide any mechanism to respect the user's preferred language or obtain opt-in. In a review assistant that processes arbitrary user content, this can cause policy misalignment, reduce usability, and lead the agent to ignore user instructions or downstream workflow requirements about language.

Natural-Language Policy Violations

Medium
Confidence
91% confidence
Finding
The style guide is entirely written to produce Chinese commentary with no indication that language selection depends on user preference. In a review assistant that reads arbitrary files or URLs and generates structured output, this can override or ignore the user's requested language, causing policy/expectation misalignment and potentially misleading downstream consumers who assume outputs will follow explicit user instructions.

Natural-Language Policy Violations

Medium
Confidence
93% confidence
Finding
The style guide explicitly frames output in Chinese and provides no mechanism to honor the user's preferred language. In an agent skill that reads arbitrary content and generates reviews, this can cause instruction-precedence problems, user confusion, and policy non-compliance when the user expects another language or accessibility requirement to be followed.

Static analysis

No suspicious patterns detected.