T03 · Remote Payload Retrieval and Execution
- Location
SKILL.md:30- Finding
Unverified Mutable Binary Download and Execution
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill is a coherent website crawler helper, but it asks the agent to automatically install and run an unverified third-party binary and includes external report upload paths.
Review before installing. Do not allow automatic installation unless you trust the upstream SiteOne Crawler release source, or pin and verify the binary yourself. Keep reports local unless you intentionally enable upload and trust the destination. Avoid passing passwords, cookies, or authorization headers on shared systems, and use stress/load-test or robots/certificate bypass options only on sites you are authorized to test.
SKILL.md:30Unverified Mutable Binary Download and Execution
Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).
&& unzip -o /tmp/siteone-crawler.zip -d /tmp/siteone-crawler
&& mv /tmp/siteone-crawler/siteone-crawler "$INSTALL_DIR/"
&& chmod +x "$INSTALL_DIR/siteone-crawler"
&& rm -rf /tmp/siteone-crawler /tmp/siteone-crawler.zip
3. After installation, set `CRAWLER` to the resolved path and verify with `$CRAWLER --version`.
Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).
&& unzip -o /tmp/siteone-crawler.zip -d /tmp/siteone-crawler
&& mv /tmp/siteone-crawler/siteone-crawler "$INSTALL_DIR/"
&& chmod +x "$INSTALL_DIR/siteone-crawler"
&& rm -rf /tmp/siteone-crawler /tmp/siteone-crawler.zip
3. After installation, set `CRAWLER` to the resolved path and verify with `$CRAWLER --version`.
Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).
&& unzip -o /tmp/siteone-crawler.zip -d /tmp/siteone-crawler
&& mv /tmp/siteone-crawler/siteone-crawler "$INSTALL_DIR/"
&& chmod +x "$INSTALL_DIR/siteone-crawler"
&& rm -rf /tmp/siteone-crawler /tmp/siteone-crawler.zip
3. After installation, set `CRAWLER` to the resolved path and verify with `$CRAWLER --version`.
Tool calls are chained to bypass individual safety checks or escalate capabilities beyond what any single tool call would allow.
&& unzip -o /tmp/siteone-crawler.zip -d /tmp/siteone-crawler
&& mv /tmp/siteone-crawler/siteone-crawler "$INSTALL_DIR/"
&& chmod +x "$INSTALL_DIR/siteone-crawler"
&& rm -rf /tmp/siteone-crawler /tmp/siteone-crawler.zip
3. After installation, set `CRAWLER` to the resolved path and verify with `$CRAWLER --version`.
The setup instructions automatically download a release from GitHub and then execute the resulting binary without any integrity verification, pinning, or user-facing warning. This creates a supply-chain risk: a compromised release, MITM in a misconfigured environment, or unexpected asset selection could lead to execution of untrusted code.
The setup process contacts the GitHub API to discover the latest release, causing external network transmission without a clear warning. While API access alone is common, in this context it initiates an automated install chain and can leak environment usage patterns or fail open into fetching unreviewed artifacts.
ARCH=$(uname -m)
case "$ARCH" in x86_64) ARCH="x64" ;; aarch64|arm64) ARCH="arm64" ;; esac
# Get latest release URL from GitHub API
RELEASE_URL=$(curl -sL https://api.github.com/repos/janreges/siteone-crawler/releases/latest \
| grep -oP "browser_download_url.*?${OS}-${ARCH}\.zip" | head -1 | sed 's/browser_download_url": "//')
curl -sL "$RELEASE_URL" -o /tmp/siteone-crawler.zip \
&& unzip -o /tmp/siteone-crawler.zip -d /tmp/siteone-crawler \
This command downloads a binary release archive from an external URL and installs it locally. External transmission is especially risky here because it is tied directly to introducing executable code into the environment, amplifying the impact from simple network access to potential code execution.
# Get latest release URL from GitHub API
RELEASE_URL=$(curl -sL https://api.github.com/repos/janreges/siteone-crawler/releases/latest \
| grep -oP "browser_download_url.*?${OS}-${ARCH}\.zip" | head -1 | sed 's/browser_download_url": "//')
curl -sL "$RELEASE_URL" -o /tmp/siteone-crawler.zip \
&& unzip -o /tmp/siteone-crawler.zip -d /tmp/siteone-crawler \
&& mv /tmp/siteone-crawler/siteone-crawler "$INSTALL_DIR/" \
&& chmod +x "$INSTALL_DIR/siteone-crawler" \
The documented --upload workflow sends crawl results to an external service, but the skill does not clearly warn that scanned site data and reports may leave the local environment. In an agent setting, this can cause unintended disclosure of internal URLs, metadata, or audit results when users expect a local-only scan.
The file documents --http-auth=<user:pass> and elsewhere SMTP and upload password options, but it does not warn that credentials supplied via CLI arguments may be exposed through shell history, process listings, or logs. For a markdown reference that documents sensitive operations, this omission is a meaningful safety gap.
This markdown file describes --upload and a default external --upload-to URL, which implies report data may be sent off-system. The reference does not include any warning about potential disclosure of crawled content, metadata, or access-controlled findings when upload is enabled.
The script enables an external upload path via the --upload flag, but provides no inline warning, destination disclosure, or confirmation step before transmitting audit artifacts. Because audit reports can contain sensitive URLs, headers, metadata, or internal site structure, this can cause unintended data exfiltration if a user invokes the option without fully understanding its effect.
The script always passes --timezone="Asia/Shanghai" to the crawler, imposing a specific locale-related setting regardless of user preference. This is a natural-language policy concern because locale behavior is fixed without offering a choice or explaining why that region-specific setting is required.
The local serving examples start an HTTP listener but do not warn that exported content becomes accessible over a network interface depending on the tool's bind behavior. This may expose crawled or exported data to other local users or nearby systems if the service is not bound to localhost.
--accept-invalid-certs weakens transport security, and --ignore-robots-txt changes expected crawl behavior, yet the reference presents them without any cautionary note. Even in parameter documentation, users should be warned when an option can reduce security or bypass standard site restrictions.
The script hard-codes --timezone="Asia/Shanghai", imposing a specific locale-related setting for all users. This can violate language/locale neutrality expectations because no opt-in, override, or justification is provided in the script comments or interface.
No suspicious patterns detected.