T09 · Insecure Skill Coding Practices
- Location
scripts/get_paste.sh:20- Finding
Paste Password Transmitted in URL Query String
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This is a coherent pastebin integration, but users should avoid sending secrets because created pastes and credentials are handled by shell scripts and a third-party service.
Install only if you are comfortable sending selected content and your COPYPASTE_API_KEY to copy-paste.cloud. Treat non-private pastes as public, do not paste credentials, tokens, private source code, regulated data, or sensitive internal material, and avoid using password-protected paste retrieval for secrets until the password-in-URL handling is fixed.
scripts/get_paste.sh:20Paste Password Transmitted in URL Query String
scripts/create_paste.sh:78API Credentials and Paste Data Exposed Through Process Arguments
The code chunk is a shell script solely for creating a paste using the copy-paste.cloud API. It validates inputs, constructs a JSON payload, and sends a POST request to /api/v1/pastes with an API key. There is no logic for listing recent public pastes or reading an existing paste by ID. Because the declared description explicitly includes read capabilities that are absent from the actual code chunk, the description does not accurately represent what this supplied code actually does.
The README encourages users to upload arbitrary file contents, including examples like $(cat myfile.py) and 'secret snippet', to a public pastebin but does not clearly warn that pastes may be publicly accessible, retained, or exposed through misconfiguration or user misunderstanding. In a skill whose primary purpose is publishing content to a third-party paste service, this omission increases the risk of accidental disclosure of source code, credentials, proprietary data, or other sensitive material.
The skill declares shell execution and network-capable behavior but does not define any explicit tool scope such as permissions or allowed-tools. That omission weakens containment and reviewability, making it easier for an agent runtime to invoke broader capabilities than users may expect when handling untrusted paste content or publishing data externally.
The skill explicitly transmits an API key to an external service and can send arbitrary user-provided paste content off-host. In this skill's context that behavior is expected, but it is still security-relevant because users may unintentionally exfiltrate sensitive data or secrets to a third-party paste service.
| URL | Method | Data sent |
|-----|--------|-----------|
| `https://api.copy-paste.cloud/api/v1/pastes/recent` | GET | API key (header) |
| `https://api.copy-paste.cloud/api/v1/pastes/{id}` | GET | paste ID (path) |
| `https://api.copy-paste.cloud/api/v1/pastes` | POST | API key (header), paste content, metadata |
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
| URL | Method | Data sent |
|-----|--------|-----------|
| `https://api.copy-paste.cloud/api/v1/pastes/recent` | GET | API key (header) |
| `https://api.copy-paste.cloud/api/v1/pastes/{id}` | GET | paste ID (path) |
| `https://api.copy-paste.cloud/api/v1/pastes` | POST | API key (header), paste content, metadata |
---
This endpoint sends both an API key and paste content/metadata to an external service, which creates a clear data-exfiltration path. Because the skill is specifically designed to publish text, the risk is contextual rather than malicious, but it becomes dangerous if agents can post local secrets, proprietary code, or user data without strong confirmation.
|-----|--------|-----------|
| `https://api.copy-paste.cloud/api/v1/pastes/recent` | GET | API key (header) |
| `https://api.copy-paste.cloud/api/v1/pastes/{id}` | GET | paste ID (path) |
| `https://api.copy-paste.cloud/api/v1/pastes` | POST | API key (header), paste content, metadata |
---
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
expiresInHours: (if $expires != "" then ($expires | tonumber) else null end)
}')
response=$(curl -sS --fail-with-body \
-X POST "${API_BASE}/api/v1/pastes" \
-H "Authorization: Bearer ${API_KEY}" \
-H "Content-Type: application/json" \
This code performs an outbound HTTP request and transmits a bearer token from an environment variable, but there is no confirmation prompt, log message, or nearby comment disclosing that authenticated network access will occur. For a code file, safety-relevant external communication using credentials should include some visible user disclosure unless clearly documented as part of the skill's stated purpose.