Back to skill

Security audit

DocStream

Security checks for vulnerabilities and agentic risk

Overview

The skill is a coherent document-processing API helper, but its included script handles API credentials in ways users should review before installing.

Install only if you are comfortable sending document URLs, payloads, and possibly document contents to the DocStream service. Avoid using this with confidential or regulated documents unless you have approval. Do not rely on DOCSTREAM_EMAIL auto-signup in logged environments, because the helper prints the created API key; set DOCSTREAM_API_KEY securely instead, and avoid setting DOCSTREAM_API_URL unless you fully trust the endpoint.

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/forge-client.sh:3
Finding

Bearer Credential Disclosure Through an Unrestricted API Endpoint Override

Content
View full analysis
&2 || { echo "❌ Signup failed" >&2; exit 1; } fi [ -z "$API_KEY" ] && { echo "❌ Set DOCSTREAM_API_KEY or DOCSTREAM_EMAIL" >&2; exit 1; } ACTION="${1:-help}"; shift || true case "$ACTION" in process) curl -sf -X POST "$API_BASE/v1/documents/process" -H "Authorization: Bearer $API_KEY" -H "Content-Type: application/json" -d "$1" ;; ``` ### Technical Analysis The script permits `DOCSTREAM_API_URL` to replace the trusted DocStream origin without validating the URL scheme or hostname. The resulting value is used for both account registration and authenticated document-processing requests. When the `process` action is invoked, the script sends the complete bearer credential in the `Authorization` header to whichever server is selected by `DOCSTREAM_API_URL`. Consequently, an attacker who can influence the process environment can redirect credentials and submitted document-processing data to an attacker-controlled endpoint. The same override can also direct requests toward an internal network service. Although the appended paths constrain the reachable URL paths, this may still enable limited server-side request forgery from the execution environment. ### Attack Path 1. An attacker influences the environment used to launch the Skill, for example by setting: ```bash DOCSTREAM_API_URL=https://attacker.example ``` 2. A user or agent invokes: ...[truncated 1086 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/forge-client.sh:6
Finding

Newly Issued API Key Exposed Through Standard Error Output

Content
View full analysis
&2 || { echo "❌ Signup failed" >&2; exit 1; } fi ``` ### Technical Analysis After obtaining a new API key, the script writes the complete secret to standard error. Standard error is not a secure secret-storage channel. Agent runtimes, CI/CD systems, terminal recorders, process supervisors, and centralized logging platforms commonly collect it automatically. Masking mechanisms provided by automation platforms may not recognize dynamically generated credentials, so the key can remain in retained logs or conversation transcripts. ### Attack Path 1. The user configures `DOCSTREAM_EMAIL` without configuring an existing API key. 2. The script submits the email to the registration endpoint and receives a new key. 3. The script emits the full key through standard error: ```text ✅ Free key: ``` 4. The surrounding agent runtime, CI system, shell wrapper, or log collector records standard error. 5. A user with access to those logs retrieves the key and reuses it against the DocStream API. ### Impact Assessment Exploitation requires access to captured standard-error output or associated logs; it does not provide local privilege escalation. A party with such access can obtain the complete DocStream API credential and exercise any API capabilities granted to it, potentially consuming the account quota and submitting unauthorized processing requests. The exposure persists for as long as the key remains valid and the affected logs or transcripts are retained. ]]>
Remediation
View remediation
&2 ``` - Store newly issued credentials through an approved secret manager or protected configuration mechanism. - If local storage is required, create the file with restrictive permissions such as mode `0600`. - Review existing agent transcripts, CI logs, and centralized logs for exposed keys. - Revoke and rotate any API keys that may already have been recorded. - Configure log-redaction rules as defense in depth, but do not rely on redaction as a substitute for removing secret output. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (6)

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
94% confidence
Finding

The skill includes shell-based execution examples that invoke external network calls, but it does not declare any tool scope or allowed-tools boundary. That mismatch can cause an agent runtime or reviewer to underestimate the skill's ability to perform networked actions, increasing the chance of unintended execution and data exposure.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The skill description says it processes documents via the DocStream API, but it does not clearly warn that document contents and document URLs are transmitted to an external third-party service. Users or calling agents may therefore send sensitive files or internal URLs without informed consent, creating confidentiality and privacy risk.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
88% confidence
Finding

The skill explicitly sends user-supplied data to external endpoints at anton.vosscg.com, including email during key creation and potentially document URLs and contents during processing. While this is core to the service's function rather than obviously malicious behavior, it is still a real external-transmission risk if sensitive data is passed through the skill.

Content

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

Set DOCSTREAM_API_KEY or DOCSTREAM_EMAIL for auto-signup (free, no credit card).

bash
curl -X POST https://anton.vosscg.com/v1/keys -H 'Content-Type: application/json' -d '{"email":"you@example.com"}'

Usage

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

sh
API_KEY="${DOCSTREAM_API_KEY:-}"
EMAIL="${DOCSTREAM_EMAIL:-}"
if [ -z "$API_KEY" ] && [ -n "$EMAIL" ]; then
  RESP=$(curl -sf -X POST "$API_BASE/v1/keys" -H "Content-Type: application/json" -d "{\"email\": \"$EMAIL\"}")
  API_KEY=$(echo "$RESP" | grep -o '"api_key":"[^"]*"' | cut -d'"' -f4)
  [ -n "$API_KEY" ] && echo "✅ Free key: $API_KEY" >&2 || { echo "❌ Signup failed" >&2; exit 1; }
fi

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
99% confidence
Finding

The script prints a newly issued API key directly to stderr, exposing credential material in terminal history, logs, CI job output, shell wrappers, or telemetry collectors that capture stderr. Anyone with access to that output can reuse the key to access the DocStream service as the user until the key is revoked or expires.

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/forge-client.sh (reported line 14)May include surrounding context.

sh
[ -z "$API_KEY" ] && { echo "❌ Set DOCSTREAM_API_KEY or DOCSTREAM_EMAIL" >&2; exit 1; }
ACTION="${1:-help}"; shift || true
case "$ACTION" in
  process) curl -sf -X POST "$API_BASE/v1/documents/process" -H "Authorization: Bearer $API_KEY" -H "Content-Type: application/json" -d "$1" ;;
  health) curl -sf "$API_BASE/v1/health" ;;
  *) echo "DocStream: process '<json>' | health" ;;
esac

Static analysis

No suspicious patterns detected.