Back to skill

Security audit

LLMWhisperer

Security checks for vulnerabilities and agentic risk

Overview

This skill is a straightforward LLMWhisperer document-extraction wrapper, but users should understand that selected files are uploaded to a third-party API and the suggested API-key storage is basic.

Install only if you are comfortable uploading the files you choose to LLMWhisperer/Unstract for processing. Store the API key with restrictive permissions, prefer an environment variable or secret manager if available, and avoid using this on confidential documents unless your privacy and compliance requirements allow third-party processing.

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:13
Finding

Insecure API Key Storage and Unsafe Environment File Parsing

Content
View full analysis
> ~/.clawdbot/.env ``` ``` ```bash if [ -z "$LLMWHISPERER_API_KEY" ]; then if [ -f ~/.clawdbot/.env ]; then # shellcheck disable=SC2046 export $(grep -v '^#' ~/.clawdbot/.env | grep 'LLMWHISPERER_API_KEY' | xargs) fi fi ``` ### Technical Analysis The documented setup command appends the API key to a plaintext file without explicitly creating the parent directory with restrictive permissions or enforcing mode `0600` on the file. The resulting permissions depend on the existing file mode and the user's `umask`. On a multi-user system, permissive permissions could expose the credential to other local accounts. The loading logic also uses command substitution, unquoted word splitting, and `xargs` to construct arguments to the shell's `export` builtin. It selects every non-comment line containing the substring `LLMWHISPERER_API_KEY`, rather than parsing only an exact assignment for the expected variable. Consequently, a party able to modify `~/.clawdbot/.env` can place additional assignments on a matching line and cause them to be exported into the script's process. This construction does not, by itself, cause shell metacharacters produced by command substitution to be reevaluated as commands. Therefore, direct arbitrary command execution is not established by the reviewed code. Nevertheless, exporting unintended variables can alter the behavior of `curl` or other process components and is unnecessary for obtaining the single credential required by the Skill. Reading the specifically declared API key is necessary for the Skill's cloud API functionality, but importing arbitrary assignments from a shared configuratio ...[truncated 2132 chars]
Remediation
View remediation
"$HOME/.clawdbot/.env" unset api_key ``` 3. Parse and export only the exact expected variable. Do not use `export $(...)` or `xargs`: ```bash if [ -z "${LLMWHISPERER_API_KEY:-}" ] && [ -f "$HOME/.clawdbot/.env" ]; then LLMWHISPERER_API_KEY=$( sed -n 's/^LLMWHISPERER_API_KEY=//p' "$HOME/.clawdbot/.env" | head -n 1 ) export LLMWHISPERER_API_KEY fi ``` 4. Reject malformed, empty, or duplicate assignments and verify that the file is a regular file owned by the current user. Refuse to load it when its permissions allow group or world access. 5. Prefer receiving the key through the calling environment or a platform-provided secret manager so that the Skill does not need to read a general-purpose credential file. 6. Clearly disclose that the supplied document is uploaded to `llmwhisperer-api.us-central.unstract.com`, and advise users not to submit sensitive material unless permitted by their security and privacy requirements. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
Findings (6)

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

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

Requires LLMWHISPERER_API_KEY in ~/.clawdbot/.env:

bash
echo "LLMWHISPERER_API_KEY=your_key_here" >> ~/.clawdbot/.env

Get an API Key

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

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

Requires LLMWHISPERER_API_KEY in ~/.clawdbot/.env:

bash
echo "LLMWHISPERER_API_KEY=your_key_here" >> ~/.clawdbot/.env

Get an API Key

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

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

Requires LLMWHISPERER_API_KEY in ~/.clawdbot/.env:

bash
echo "LLMWHISPERER_API_KEY=your_key_here" >> ~/.clawdbot/.env

Get an API Key

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

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

md
fi

if [ -z "$LLMWHISPERER_API_KEY" ]; then
  echo "Error: LLMWHISPERER_API_KEY not found in env or ~/.clawdbot/.env"
  exit 1
fi

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The skill uploads the full contents of the user-supplied file to a third-party API, but the description and configuration/usage sections do not clearly warn users that their documents leave the local environment. This creates a meaningful privacy and data-handling risk because users may submit sensitive PDFs or images without informed consent.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
99% confidence
Finding

The script sends the entire input file via curl to an external API endpoint, which is a real external data transmission behavior. In this skill's context that behavior is expected, but it is still security-relevant because any file provided—including potentially sensitive documents—will be exfiltrated to a third party.

Content

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

md
exit 1
fi

curl -s -X POST "https://llmwhisperer-api.us-central.unstract.com/api/v2/whisper?mode=high_quality&output_mode=layout_preserving" \
  -H "Content-Type: application/octet-stream" \
  -H "unstract-key: $LLMWHISPERER_API_KEY" \
  --data-binary "@$FILE"

Static analysis

No suspicious patterns detected.