Back to skill

Security audit

Uptime Monitor Agent

Security checks for vulnerabilities and agentic risk

Overview

This uptime-monitor skill is coherent and purpose-aligned, but users should only monitor and alert to destinations they trust because its shell scripts do minimal URL validation.

Install only if you are comfortable with a shell-based monitor that can make outbound requests to configured URLs and write local log files. Configure MONITOR_URLS and ALERT_WEBHOOK_URL yourself, avoid untrusted or attacker-supplied destinations, and treat webhook URLs as sensitive because alert payloads include monitored URL and error details.

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 (3)

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/check.sh:24
Finding

Curl Option Injection and Unrestricted Endpoint Access in Health Checks

Content
View full analysis
&1) ``` ### Technical Analysis The user-supplied `URL` is passed directly to `curl` without an option terminator (`--`) or URL validation. Shell quoting prevents shell metacharacter expansion, but it does not prevent `curl` from interpreting a value beginning with `-` as a command-line option. The script also does not restrict allowed URL schemes or destination addresses. Despite being documented as an HTTP endpoint monitor, it can attempt connections to loopback, private, link-local, or other network destinations reachable by the host. Depending on the installed curl build, non-HTTP schemes may also be accepted. The request executes with the network access and filesystem visibility of the account running the Skill. A crafted curl option may modify curl behavior, while a crafted URL may turn the health check into an internal network probing primitive. ### Attack Path 1. An attacker causes the Skill to invoke `check.sh` with an attacker-controlled endpoint. 2. The attacker supplies either: - An argument beginning with a curl option, such as a supported config-file option; or - An HTTP URL targeting a loopback, private, link-local, or otherwise sensitive internal service. 3. `curl` interprets the argument without an option boundary or sends the request to the internal destination. 4. The attacker observes the success status, HTTP status code, response timing, or other resulting behavior. 5. Repeated requests can be used to identify reachable internal services or influence curl using locally accessible configuration, subject to the privileges of the Skill process. ### Impact Assessment This issue d ...[truncated 699 chars]
Remediation
View remediation
&2 exit 2 fi CURL_OUTPUT=$(curl --silent --show-error --max-time 10 \ --proto '=http,https' \ --write-out "%{http_code}|%{time_total}" \ --output /dev/null \ -- "$URL" 2>&1) ``` The scheme check alone does not prevent SSRF. Destination IP validation should also be performed, including after DNS resolution and any redirect. ]]>

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/alert.sh:36
Finding

Unsafe Webhook Destination Handling Permits Curl Option Injection and Internal Requests

Content
View full analysis
&1) if [ $? -eq 0 ]; then echo "Alert sent to webhook for $url" else echo "Failed to send webhook alert: $response" >&2 fi fi ``` ### Technical Analysis `WEBHOOK_URL`, sourced from the `ALERT_WEBHOOK_URL` environment variable, is passed to `curl` without an option terminator and without validating its scheme, host, or resolved destination. Quoting the variable protects against shell word splitting and shell metacharacter injection, but it does not prevent curl from interpreting a leading `-` as an option. The absence of destination restrictions also permits the alert request to target services reachable only from the host running the Skill. The POST body includes the monitored URL, status code, response time, error message, and timestamp. Consequently, redirecting the webhook may also expose operational monitoring information to an unintended destination. ### Attack Path 1. An attacker or untrusted execution environment controls `ALERT_WEBHOOK_URL`. 2. The attacker sets it to either: - A curl option-like value that modifies request behavior; or - An attacker-controlled or internal network URL. 3. A service-down event causes `alert.sh` to construct and send the webhook payload. 4. Curl processes the unsafe value and sends monitoring data to the selected destination or performs unintended network access. 5. The destination receives the alert metadata, subject to the network permissions of the Skill process. ### Impact Assessment Exploitation operates with the privileges and network access of the ...[truncated 451 chars]
Remediation
View remediation
&2 exit 2 fi response=$(curl --silent --show-error --max-time 10 \ --proto '=https' \ --max-redirs 0 \ -H "Content-Type: application/json" \ --data-binary "$payload" \ -- "$WEBHOOK_URL" 2>&1) ``` Host and resolved-address validation should supplement this syntax check. ]]>

T09 · Insecure Skill Coding Practices

Note
Location
scripts/alert.sh:15
Finding

Unescaped Alert Fields Permit Webhook JSON Injection

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (6)

Tp4

High
Category
MCP Tool Poisoning
Confidence
94% confidence
Finding

The documented behavior goes beyond simple uptime checks by including outbound alerts to webhook/email targets and local logging, yet these side effects are not clearly reflected in a scoped permission model. This mismatch can mislead reviewers and users about what the skill actually does, making data exfiltration or unauthorized external communication easier to hide behind an apparently benign monitoring purpose.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
95% confidence
Finding

The skill declares shell-based behavior and external/network-capable operations but does not define any explicit tool scope such as permissions or allowed-tools. This weakens containment and review because consumers cannot tell what execution and side effects are intended, increasing the chance of overbroad shell use or unintended access during execution.

Content

No source excerpt is available for this finding.

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/alert.sh (reported line 39)May include surrounding context.

sh
# Send webhook alert if configured
if [ -n "$WEBHOOK_URL" ]; then
  payload=$(build_webhook_payload)
  response=$(curl --silent --max-time 10 \
    -H "Content-Type: application/json" \
    -d "$payload" \
    "$WEBHOOK_URL" 2>&1)

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
84% confidence
Finding

This markdown file describes the skill's behavior and only notes near the end that it logs results to a path under the user's home directory. Because the skill affects local user data by creating/appending a log file, the description should more clearly disclose that file-writing behavior as a user warning rather than a brief implementation note.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Low
Category
Not specified by scanner
Confidence
82% confidence
Finding

The manifest describes monitoring reachability and sending downtime alerts. In addition to alerting, this script creates a logs directory and appends alert metadata to alerts.log, which is a broader behavior than the stated alerting-only description. While plausibly related operationally, it is still an undeclared behavior beyond the manifest's narrow wording.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
83% confidence
Finding

The script appends URL, status code, and error details to ../logs/alerts.log, which is a file write affecting potentially sensitive operational data. Although there is an internal comment, there is no user-facing warning in usage text, prompt, or output before persistence occurs.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.