T03 · Remote Payload Retrieval and Execution
- Location
SKILL.md:47- Finding
Mutable Remote Installation Script Is Piped Directly into Bash
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill is coherent for Postavel social media management, but its setup instructions include unsafe remote and privileged installer patterns before connecting an account that can publish or delete posts.
Review this skill before installing. Prefer the manual setup path, avoid the curl-to-bash installer, avoid any sudo/global binary installation unless you have independently verified the source, and confirm the exact Postavel workspace, brand, post, and publishing action before approving, auto-approving, publishing, or deleting content.
SKILL.md:47Mutable Remote Installation Script Is Piped Directly into Bash
scripts/install-mcp.sh:84Unverified Mutable Release Binary Is Installed into a Privileged Global Path
scripts/install-mcp.sh:60Unpinned Package-Manager Dependencies Are Installed Globally
The skill instructs the user to execute a remote install script directly from the network via curl -fsSL https://postavel.com/install-mcp | bash. Piping fetched content into a shell prevents meaningful review and enables full arbitrary code execution if the remote server, TLS path, or script content is compromised.
curl -fsSL https://postavel.com/install-mcp | bash
The | bash chaining pattern turns downloaded remote content into immediate shell execution, which is a classic command-chaining abuse vector. In this skill, the risk is elevated because the setup flow is presented as a normal first-run step, making unsafe execution more likely to be followed without scrutiny.
curl -fsSL https://postavel.com/install-mcp | bash
The script explicitly instructs users to execute code streamed directly from a remote server with curl | bash, which removes any opportunity for inspection and makes compromise of the hosting endpoint immediately equivalent to arbitrary code execution. In an installer for an AI-connected social media integration, this is especially risky because it leads to local execution before the user can assess what account access or configuration changes will occur.
#!/bin/bash
# Postavel MCP Installer
# One-command setup for mcporter
# Run: curl -fsSL https://postavel.com/install-mcp | bash
set -e
Using a shell pipe into bash creates a dangerous execution chain where remote content is immediately interpreted as commands, amplifying any compromise, redirect, or content injection into instant code execution. This pattern is broadly unsafe and particularly problematic for setup flows that also install binaries, write persistent config, and launch authentication steps.
#!/bin/bash
# Postavel MCP Installer
# One-command setup for mcporter
# Run: curl -fsSL https://postavel.com/install-mcp | bash
set -e
The skill instructs users to run shell commands (brew, npm, mcporter, find, and a remote install script) but does not declare any tool scope such as permissions or allowed-tools. This creates a mismatch between documented capabilities and declared boundaries, increasing the risk that an agent may attempt unsafe shell execution without explicit authorization controls.
The activation text includes broad triggers like 'social media', 'create post', and posting to major platforms, which can cause the skill to activate in contexts beyond Postavel-specific intent. Over-broad invocation increases the chance that users are routed into setup flows containing shell commands or approval/publishing actions when they did not specifically request this integration.
Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.
With Auto-Approval (Admin/Owner only):
"Schedule a post for [time] and auto-approve it"
"Create and publish a post now"
Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.
With Auto-Approval (Admin/Owner only):
"Schedule a post for [time] and auto-approve it"
"Create and publish a post now"
Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.
With Auto-Approval (Admin/Owner only):
"Schedule a post for [time] and auto-approve it"
"Create and publish a post now"
Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.
The AI assistant respects Postavel's permission system:
| Role | Can Create | Can Approve | Can Auto-Approve |
|------|-----------|-------------|------------------|
| **Owner** | ✅ | ✅ | ✅ |
| **Admin** | ✅ | ✅ | ✅ |
The create_post interface exposes an auto_approve option that enables immediate approval, reducing human review for publishing actions. In a social media management skill, this can let an agent take higher-impact actions than a user may expect from a simple 'create post' request, especially if the agent infers approval rather than obtaining explicit authorization.
- `status` (optional): 'draft', 'scheduled', or 'published' (default: 'draft')
- `scheduled_at` (optional): ISO 8601 datetime (required if status='scheduled')
- `media_urls` (optional): Array of external image/video URLs
- `auto_approve` (optional): boolean - Immediately approve (admin/owner only)
**Use when:** User wants to create a social media post
The reference explicitly notes that posts may bypass the normal approval workflow when auto_approve=true, which weakens separation between content creation and approval. In this skill's context, bypassing review is materially risky because posts may be published or advanced toward publication on external brand accounts, creating reputational and operational harm.
**Important:**
- One post can target multiple platforms
- Posts require approval before publishing (unless auto_approve=true and user has permissions)
---
The tool reference documents deletion of posts but provides no guidance to require explicit user confirmation, preview the target post, or warn that deletion is irreversible. In an agentic context, this increases the risk that a natural-language misunderstanding or ambiguous reference could cause unintended content loss across a user's social media workflow.
Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.
- User is not an admin of any LinkedIn company pages
- They need to be added as admin on LinkedIn
**"Auto-approve not allowed"**
- User is a Member (not Admin/Owner)
- Post is created but remains pending
Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.
- User is not an admin of any LinkedIn company pages
- They need to be added as admin on LinkedIn
**"Auto-approve not allowed"**
- User is a Member (not Admin/Owner)
- Post is created but remains pending
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.
This script will:
1. Check if `mcporter` is installed
2. Install it via Homebrew if missing
3. Create mcporter configuration for Postavel
4. Guide you through OAuth authentication
## Manual Setup
The script downloads an executable from the network and writes it into /usr/local/bin using sudo, which elevates a network-fetched artifact to a system-wide trusted binary. If the download source, transport, release channel, or GitHub account is compromised, this becomes privileged arbitrary code installation.
fi
print_info "Downloading from: $URL"
sudo curl -L -o /usr/local/bin/mcporter "$URL"
sudo chmod +x /usr/local/bin/mcporter
MCPORter_PATH="/usr/local/bin/mcporter"
fi
Running chmod with sudo on the downloaded binary is part of making a root-installed executable immediately runnable system-wide. On its own this is less severe than the download, but in context it completes privileged persistence of an unverified external binary.
print_info "Downloading from: $URL"
sudo curl -L -o /usr/local/bin/mcporter "$URL"
sudo chmod +x /usr/local/bin/mcporter
MCPORter_PATH="/usr/local/bin/mcporter"
fi
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.
print_status "mcporter installed at: $MCPORter_PATH"
fi
# Step 3: Create config directory
print_info "Creating configuration..."
mkdir -p "$HOME/.config/mcporter"
The script creates a persistent configuration file under ~/.config/mcporter/postavel.json, which survives beyond the current session and can influence later agent/tool behavior. Persistent tool configuration can expand attack surface if later compromised, misused by another local process, or left behind without the user's clear understanding, especially because it wires in a remote MCP endpoint and OAuth flow.
fi
fi
# Create mcporter config directory
mkdir -p ~/.config/mcporter
# Generate config for Postavel
Skill requests more permissions than appear necessary for its stated functionality. Review if elevated access is justified.
- "Approve post ID 123"
- "Approve all pending posts for brand 'Coffee Shop'"
**Permissions:** Only workspace Admins and Owners can approve posts
---
The example invocation is written as a fixed English phrase, 'Then you can say: 'Schedule a Facebook post for tomorrow'' without indicating that other languages are supported. Under the stated policy, natural-language instructions that force a specific language without user choice can be considered a locale/language policy violation.
No suspicious patterns detected.