Back to skill

Security audit

User Interview

Security checks for vulnerabilities and agentic risk

Overview

The skill’s purpose is coherent, but it tells the agent to print a live API key to the terminal and recommends persistent plaintext shell-profile storage.

Review this skill before installing. It appears intended to create Usercall interview studies, but you should not let it print your API key; use a presence-only check instead, and prefer a credential manager or session-only environment variable over storing the key in shell startup files. Avoid sending confidential product plans, personal data, or unreleased material to Usercall unless you intend that third-party transmission.

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

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:15
Finding
API Key Disclosure Through Terminal Output and Plaintext Shell-Profile Storage## Vulnerability Details **File Location**: `SKILL.md`, lines 15–29 **Vulnerability Type**: Plaintext sensitive-data exposure **Risk Level**: Medium ### Vulnerable Code ```bash echo "$USERCALL_API_KEY" ``` If the variable is empty, the Skill instructs the user to configure it as follows: ```bash export USERCALL_API_KEY="your_key_here" ``` It then recommends persistent plaintext storage: ```text Add that line to your `~/.zshrc` or `~/.bashrc` to make it permanent, then restart your terminal. ``` ### Technical Analysis The API-key availability check prints the complete value of `USERCALL_API_KEY` to standard output. This is unnecessary because the Skill only needs to determine whether the variable is configured. Exposing the value can place the bearer token in terminal recordings, command-execution logs, agent transcripts, CI logs, or shared terminal output. The setup instructions also recommend storing the API key directly in a shell initialization file. These files are plaintext, are commonly included in workstation backups or configuration repositories, and may be readable by other local processes or users when permissions are insufficient. The combination of persistent plaintext storage and explicit terminal disclosure increases the likelihood of credential compromise. ### Attack Path 1. A user follows the Skill instructions and places the Usercall API key in `~/.zshrc` or `~/.bashrc`. 2. The shell loads the key into `USERCALL_API_KEY`. 3. The Skill executes `echo "$USERCALL_API_KEY"`, exposing the complete credential in terminal output. 4. An attacker obtains the output through a recorded agent transcript, terminal log, CI log, screen-sharing session, or another process with access to captured output. Alternatively, the attacker reads the plaintext shell profile or an associated backup. 5. The attacker reuses the disclosed value as a bearer token against the Usercall API. 6. Subject to the token's server-side permissions, the attacker may create o ...[truncated 756 chars]
Remediation
## Remediation Suggestions 1. Replace the secret-printing command with a presence-only test: ```bash if [ -n "${USERCALL_API_KEY:-}" ]; then echo "USERCALL_API_KEY is configured" else echo "USERCALL_API_KEY is not configured" fi ``` 2. Do not display the key, even partially, in normal execution output. Ensure error handling and debugging modes also redact the `Authorization` header and environment-variable value. 3. Recommend storage in an operating-system credential manager, dedicated secrets manager, or another access-controlled secret store instead of a shell startup file. 4. If environment-file or shell-profile storage must be documented, clearly warn that the file contains a secret, require restrictive permissions such as `chmod 600`, and advise users not to commit it to version control or include it in publicly accessible backups. 5. Advise users to rotate the API key immediately if it has appeared in logs, transcripts, screenshots, shared terminal sessions, or repositories. 6. Where supported by Usercall, use narrowly scoped, revocable API tokens and monitor account activity for unauthorized requests.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Rogue AgentSelf-Modification, Session Persistence
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (3)

Session Persistence

Medium
Category
Rogue Agent
Content
> To use openclaw you need a Usercall API key.
>
> **1. Sign up at https://app.usercall.co**
> Go to Home → Developer → Create API key
>
> **2. Set your API key**
> ```bash
Confidence
88% confidence
Finding
The skill recommends adding the API key export to shell startup files such as ~/.zshrc or ~/.bashrc, which persists the credential across sessions in plain text. While common, this increases exposure to local compromise, accidental disclosure through dotfile syncing/sharing, or leakage via shell environment inheritance.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The skill instructs the agent to collect user research goals, business context, and optional prototype/image URLs, then transmit that data to Usercall, but the skill description does not clearly warn that user-provided content will be sent to a third-party service. This creates a real privacy and data-handling risk because users may disclose confidential product plans, internal context, or personal data without informed consent.

External Transmission

Medium
Category
Data Exfiltration
Content
## Step 3 — Create the study

```bash
curl -s -X POST https://app.usercall.co/api/v1/agent/studies \
  -H "Authorization: Bearer $USERCALL_API_KEY" \
  -H "Content-Type: application/json" \
  -d '<json>'
Confidence
97% confidence
Finding
The skill performs a direct external POST request to Usercall using collected user inputs, which is an intentional external data transmission. In this context that behavior is core to the skill, but it is still security-relevant because sensitive research goals, business context, and media URLs may be exfiltrated to an external API if the user is not clearly informed.

Static analysis

No suspicious patterns detected.