Back to skill

Security audit

Short.io

Security checks for vulnerabilities and agentic risk

Overview

This Short.io skill is purpose-aligned, but its helper script has unsafe input and secrets-file handling that could run local commands under the user's account.

Review before installing. Only use this with a Short.io API key you are comfortable granting link-management authority to, avoid running the helper with untrusted URL inputs, and do not point SHORTIO_SECRETS_FILE at any file you do not fully control. The script should be fixed to pass URL input as a Python argument and parse the API key without sourcing shell code.

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

T09 · Insecure Skill Coding Practices

Error
Location
scripts/shortio.sh:217
Finding

Arbitrary Command Execution Through Unsafe URL Interpolation

Content
View full analysis
/dev/null \ || echo "$url" | sed 's|:|%3A|g; s|/|%2F|g') ``` ### Technical Analysis The value of the `--url` argument is interpolated directly into Python source code passed to `python3 -c`. Although shell variable expansion does not itself reevaluate shell metacharacters contained in the variable, the expanded value becomes part of the Python program and is parsed as Python syntax. An attacker can supply a URL containing a single quote, closing parentheses, and additional Python statements. This breaks out of the quoted Python string and permits arbitrary Python code execution. Python can then invoke operating-system commands through modules such as `os` or `subprocess`. The fallback to `sed` does not mitigate the vulnerability because the injected code is processed when Python parses and executes the generated source. ### Attack Path 1. An attacker causes the Skill or its user to invoke the `find` command with an attacker-controlled `--url` value. 2. The supplied value closes the Python string and the surrounding function calls. 3. Additional Python statements are inserted before a comment marker suppresses the remaining generated source. 4. For example, a value structurally equivalent to the following can execute a local command: ```text ')); __import__("os").system("id"); # ``` 5. The generated Python program executes the injected statement with the privileges and environment of the user running the Skill. 6. The attacker can replace the demonstration command with commands that read files, modify user data, access environment variables, or initiate network connections. ### Impact Assessment Successful exploitation ...[truncated 692 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/shortio.sh:27
Finding

Arbitrary Shell Execution Through Sourced Secrets File

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Rogue AgentSelf-Modification, Session Persistence
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
Findings (30)

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
70% confidence
Finding

Without declared permissions the skill's intent is opaque and cannot be validated.

Content

No source excerpt is available for this finding.

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 · SKILL.md (reported line 3)May include surrounding context.

md
---
name: short-io
description: "Use this skill to manage Short.io branded short links via their REST API. Triggers on: create short link, shorten URL, Short.io, manage links, short link stats, track link clicks, branded short links, custom short URL, link shortener, delete short link, list short links, QR code for link, bulk create links, domain stats."
homepage: https://short.io
license: MIT
metadata:

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The trigger description is broad enough to match generic requests like 'manage links' or 'shorten URL,' which can cause the skill to be invoked in contexts broader than intended. Overbroad activation increases the chance of unintended execution of shell/network actions and use of stored API credentials when another skill or a simpler response would have been more appropriate.

Content

No source excerpt is available for this finding.

Sudo/Root Execution

Medium
Category
Privilege Escalation
Confidence
80% confidence
Finding

Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.

Content

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

bash
mkdir -p ~/.secrets
echo "SHORT_IO_API_KEY=your_key_here" > ~/.secrets/shortio.env
chmod 600 ~/.secrets/shortio.env

Use the helper script at scripts/shortio.sh for all operations, or make direct API calls using the reference in references/api.md.

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 · references/api.md (reported line 14)May include surrounding context.

List Domains

bash
curl -s https://api.short.io/api/domains \
  -H "authorization: $SHORT_IO_API_KEY"

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% 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 · references/api.md (reported line 14)May include surrounding context.

List Domains

bash
curl -s https://api.short.io/api/domains \
  -H "authorization: $SHORT_IO_API_KEY"

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% 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 · references/api.md (reported line 22)May include surrounding context.

List Domains

bash
curl -s https://api.short.io/api/domains \
  -H "authorization: $SHORT_IO_API_KEY"

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% 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 · references/api.md (reported line 28)May include surrounding context.

List Domains

bash
curl -s https://api.short.io/api/domains \
  -H "authorization: $SHORT_IO_API_KEY"

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% 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 · references/api.md (reported line 36)May include surrounding context.

List Domains

bash
curl -s https://api.short.io/api/domains \
  -H "authorization: $SHORT_IO_API_KEY"

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% 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 · references/api.md (reported line 48)May include surrounding context.

List Domains

bash
curl -s https://api.short.io/api/domains \
  -H "authorization: $SHORT_IO_API_KEY"

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% 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 · references/api.md (reported line 59)May include surrounding context.

List Domains

bash
curl -s https://api.short.io/api/domains \
  -H "authorization: $SHORT_IO_API_KEY"

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% 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 · references/api.md (reported line 65)May include surrounding context.

List Domains

bash
curl -s https://api.short.io/api/domains \
  -H "authorization: $SHORT_IO_API_KEY"

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% 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 · references/api.md (reported line 71)May include surrounding context.

List Domains

bash
curl -s https://api.short.io/api/domains \
  -H "authorization: $SHORT_IO_API_KEY"

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% 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 · references/api.md (reported line 81)May include surrounding context.

List Domains

bash
curl -s https://api.short.io/api/domains \
  -H "authorization: $SHORT_IO_API_KEY"

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% 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 · references/api.md (reported line 113)May include surrounding context.

List Domains

bash
curl -s https://api.short.io/api/domains \
  -H "authorization: $SHORT_IO_API_KEY"

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% 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 · references/api.md (reported line 119)May include surrounding context.

List Domains

bash
curl -s https://api.short.io/api/domains \
  -H "authorization: $SHORT_IO_API_KEY"

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% 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 · references/api.md (reported line 130)May include surrounding context.

List Domains

bash
curl -s https://api.short.io/api/domains \
  -H "authorization: $SHORT_IO_API_KEY"

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% 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 · references/api.md (reported line 136)May include surrounding context.

List Domains

bash
curl -s https://api.short.io/api/domains \
  -H "authorization: $SHORT_IO_API_KEY"

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% 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 · references/api.md (reported line 147)May include surrounding context.

List Domains

bash
curl -s https://api.short.io/api/domains \
  -H "authorization: $SHORT_IO_API_KEY"

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% 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 · references/api.md (reported line 155)May include surrounding context.

List Domains

bash
curl -s https://api.short.io/api/domains \
  -H "authorization: $SHORT_IO_API_KEY"

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% 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 · references/api.md (reported line 163)May include surrounding context.

List Domains

bash
curl -s https://api.short.io/api/domains \
  -H "authorization: $SHORT_IO_API_KEY"

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% 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 · references/api.md (reported line 171)May include surrounding context.

List Domains

bash
curl -s https://api.short.io/api/domains \
  -H "authorization: $SHORT_IO_API_KEY"

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% 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 · references/api.md (reported line 179)May include surrounding context.

List Domains

bash
curl -s https://api.short.io/api/domains \
  -H "authorization: $SHORT_IO_API_KEY"

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

This markdown file documents both single and bulk delete operations, but provides no warning that these actions remove links and may be irreversible. For markdown files, safety-impacting behaviors that can affect user data or system integrity should be accompanied by clear user-facing warnings.

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

sh
fi
}

# ── Shared curl wrapper ────────────────────────────────────────────
api_get() {
  local url="$1"
  curl -sf "$url" \