Back to skill

Security audit

Manus

Security checks for vulnerabilities and agentic risk

Overview

The skill does what it claims, but it creates shareable Manus task links and saves remote agent-generated files locally with weak safeguards.

Review this skill before installing if you expect to use it with private prompts, business documents, code, or other sensitive material. Use a dedicated empty output directory for downloads, inspect downloaded files before opening or running them, and avoid shareable links unless you understand who can access them and for how long.

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

Warning
Location
scripts/manus.sh:74
Finding

Unrestricted Remote File Download and Local File Overwrite

Content
View full analysis
[output_dir] task_id="$1" output_dir="${2:-.}" mkdir -p "$output_dir" curl -s "$API_BASE/tasks/$task_id" \ -H "API_KEY: $MANUS_API_KEY" | jq -r '.output[]?.content[]? | select(.type == "output_file") | "\(.fileName)\t\(.fileUrl)"' | \ while IFS=$'\t' read -r filename url; do if [ -n "$filename" ] && [ -n "$url" ]; then # Sanitize filename safe_name=$(echo "$filename" | tr -cd '[:alnum:]._-' | head -c 100) [ -z "$safe_name" ] && safe_name="output_file" echo "Downloading: $safe_name" >&2 curl -sL "$url" -o "$output_dir/$safe_name" echo "$output_dir/$safe_name" fi done ;; ``` ### Technical Analysis The `download` action extracts `fileUrl` and `fileName` values from a remote API response and passes the URL directly to `curl -L`. It does not validate the URL scheme or destination hostname. Redirect following is enabled without validating each redirect target. Consequently, a compromised or malicious task response could make the client request an attacker-selected URL. Depending on the protocols supported by the installed `curl`, this may include non-HTTPS resources, loopback addresses, private network services, or local resources. This is a client-side server-side request forgery–style issue, although retrieved content is written locally rather than automatically returned to the attacker. The filename is restricted to alphanumeric characters, periods, underscores, and hyphens, which prevents direct path traversal. However, the destination is opened with normal overwrite behavior. An API-controlled filename can therefore replace an existing file in the user-selected output directory. Different remote filenames may also ...[truncated 2007 chars]
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Rogue AgentSelf-Modification, Session Persistence
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (16)

Session Persistence

Medium
Category
Rogue Agent
Confidence
60% confidence
Finding

Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.

Content

Scanner excerpt · README.md (reported line 7)May include surrounding context.

md
## What it does

- **Create tasks** - send prompts to Manus and let it work autonomously
- **Poll for status** - track task progress (pending, running, completed, failed)
- **Get deliverables** - download output files (PDFs, slides, code) when tasks complete
- **Multiple profiles** - standard, lite (fast), or max (deep research) agent modes

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The README states that task output files are downloaded locally and delivered directly, but it does not warn users that running the skill may write untrusted, externally generated content onto the local filesystem. In the context of an autonomous remote agent that can generate code, documents, and other files, silent local writes increase the risk of unsafe file placement, accidental execution, or handling of malicious content.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
86% confidence
Finding

The skill demonstrates shell-based network operations via curl examples but does not declare any tool scope or allowed-tools restrictions. In an agent environment, this can lead to broader-than-expected execution capability and makes it harder to enforce least privilege or review what external actions the skill may perform.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The workflow instructs downloading generated output files locally and sending them onward without any safety checks, provenance validation, or sensitive-data handling guidance. Because Manus can autonomously browse and create arbitrary files, this increases the risk of exfiltrating sensitive content, storing malware-laced artifacts, or redistributing private data to users.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The skill recommends setting createShareableLink: true by default, which may expose task contents or outputs through a share URL. Without warning users about link visibility, retention, or access control, sensitive prompts, results, or attached files could be disclosed beyond the intended recipient.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · SKILL.md (reported line 51)May include surrounding context.

Create a Task

bash
curl -X POST "https://api.manus.ai/v1/tasks" \
  -H "API_KEY: $MANUS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · README.md (reported line 39)May include surrounding context.

md
# Manus API helper script
# Usage: manus.sh <action> [args]

API_BASE="https://api.manus.ai/v1"

if [ -z "$MANUS_API_KEY" ]; then
  echo "Error: MANUS_API_KEY not set" >&2

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · SKILL.md (reported line 29)May include surrounding context.

md
# Manus API helper script
# Usage: manus.sh <action> [args]

API_BASE="https://api.manus.ai/v1"

if [ -z "$MANUS_API_KEY" ]; then
  echo "Error: MANUS_API_KEY not set" >&2

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · SKILL.md (reported line 51)May include surrounding context.

md
# Manus API helper script
# Usage: manus.sh <action> [args]

API_BASE="https://api.manus.ai/v1"

if [ -z "$MANUS_API_KEY" ]; then
  echo "Error: MANUS_API_KEY not set" >&2

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · SKILL.md (reported line 92)May include surrounding context.

md
# Manus API helper script
# Usage: manus.sh <action> [args]

API_BASE="https://api.manus.ai/v1"

if [ -z "$MANUS_API_KEY" ]; then
  echo "Error: MANUS_API_KEY not set" >&2

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · SKILL.md (reported line 127)May include surrounding context.

md
# Manus API helper script
# Usage: manus.sh <action> [args]

API_BASE="https://api.manus.ai/v1"

if [ -z "$MANUS_API_KEY" ]; then
  echo "Error: MANUS_API_KEY not set" >&2

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · scripts/manus.sh (reported line 5)May include surrounding context.

sh
# Manus API helper script
# Usage: manus.sh <action> [args]

API_BASE="https://api.manus.ai/v1"

if [ -z "$MANUS_API_KEY" ]; then
  echo "Error: MANUS_API_KEY not set" >&2

External Transmission

Medium
Category
Data Exfiltration
Confidence
70% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · scripts/manus.sh (reported line 20)May include surrounding context.

sh
# Create a task: manus.sh create "your prompt here" [profile]
    prompt="$1"
    profile="${2:-manus-1.6}"
    curl -s -X POST "$API_BASE/tasks" \
      -H "API_KEY: $MANUS_API_KEY" \
      -H "Content-Type: application/json" \
      -d "{\"prompt\": $(echo "$prompt" | jq -Rs .), \"agentProfile\": \"$profile\", \"taskMode\": \"agent\", \"createShareableLink\": true}"

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The manifest focuses on creating and managing AI agent tasks via the Manus API. The download command goes beyond remote task management by fetching arbitrary output file URLs and writing files locally, which is a materially broader behavior than the stated description suggests.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The script downloads arbitrary remote files from URLs returned by the Manus API and writes them to the local filesystem without an explicit warning, confirmation, or safety checks on content type, size, or overwrite behavior. In this skill context, the remote service produces agent-generated artifacts, so a user may fetch unexpected or risky files onto a host system with little visibility.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The skill's stated purpose is to create and manage Manus tasks through the API. Creating directories and saving remote files locally introduces a filesystem-write capability that is not explicitly justified by that purpose, especially since task management could be fulfilled without local persistence.

Content

No source excerpt is available for this finding.