Back to skill

Security audit

TranslateFlow

Security checks for vulnerabilities and agentic risk

Overview

This translation skill mostly matches its stated purpose, but its helper script can expose newly created API keys and can send keys, email, and translation text to an arbitrary configured endpoint.

Review before installing. Use only a pre-created TRANSLATEFLOW_API_KEY, avoid TRANSLATEFLOW_EMAIL auto-signup in logged environments, do not send confidential text unless you trust the external service, and avoid setting TRANSLATEFLOW_API_URL except in a controlled development environment.

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

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

Configurable API endpoint can expose bearer credentials and translation content

Content
View full analysis
&2 || { echo "❌ Signup failed" >&2; exit 1; } fi [ -z "$API_KEY" ] && { echo "❌ Set TRANSLATEFLOW_API_KEY or TRANSLATEFLOW_EMAIL" >&2; exit 1; } ACTION="${1:-help}"; shift || true case "$ACTION" in translate) curl -sf -X POST "$API_BASE/v1/translate" -H "Authorization: Bearer $API_KEY" -H "Content-Type: application/json" -d "$1" ;; batch) curl -sf -X POST "$API_BASE/v1/translate/batch" -H "Authorization: Bearer $API_KEY" -H "Content-Type: application/json" -d "$1" ;; health) curl -sf "$API_BASE/v1/health" ;; *) echo "TranslateFlow: translate '' | batch '' | health" ;; esac ``` ### Technical Analysis The script permits `TRANSLATEFLOW_API_URL` to replace the trusted TranslateFlow origin without validating the URL scheme or hostname. The selected endpoint receives security-sensitive information: - The configured email address during key registration. - The bearer API key in the `Authorization` header during translation requests. - User-supplied translation or batch content in the request body. An attacker who can influence the process environment can set the variable to an attacker-controlled HTTPS server or a plaintext HTTP endpoint. Subsequent requests will treat that server as trusted and transmit credentials and content to it. Use of HTTP would additionally expose data to network interception. This issu ...[truncated 1557 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Note
Location
scripts/forge-client.sh:8
Finding

Newly issued API key is exposed through standard error

Content
View full analysis
&2 || { echo "❌ Signup failed" >&2; exit 1; } ``` ### Technical Analysis After obtaining an API key from the registration response, the script writes the complete credential to standard error. Standard error is commonly captured by CI systems, agent transcripts, service journals, terminal recorders, and centralized logging platforms. Those systems may retain the key for substantially longer than the process execution and expose it to users who have log-reading access but should not have secret access. The disclosure occurs only when the email-based signup path successfully returns a key. Existing keys supplied through `TRANSLATEFLOW_API_KEY` are not printed by this statement. ### Attack Path 1. A user configures `TRANSLATEFLOW_EMAIL` without configuring `TRANSLATEFLOW_API_KEY`. 2. The script requests and receives a new API key. 3. The complete key is printed to standard error. 4. The execution environment captures standard error in a build log, agent transcript, service journal, or terminal recording. 5. An attacker or lower-privileged user with access to that output retrieves the key. 6. The attacker reuses the key against the TranslateFlow API, subject to its assigned permissions, quota, and validity period. ### Impact Assessment The issue can expose a valid TranslateFlow credential to parties with access to captured process output. Such parties may submit API requests, consume account quota, and access any service capabilities available to the key. The finding does not grant local system privileges by itself, and its scope is limited to the permissions and lifetime of the disclosed API credential. ]]>
Remediation
View remediation
&2 || { echo "❌ Signup failed" >&2 exit 1 } ``` 3. Store newly issued credentials through an approved secret manager or a protected configuration file with restrictive permissions. 4. If a user-visible identifier is required, display only a short masked suffix that is insufficient to reconstruct the credential. 5. Configure CI and centralized logging systems to redact known credential patterns as a defense-in-depth measure. 6. Rotate any API key that has already appeared in retained logs, and remove or restrict access to those logs where feasible. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (9)

Missing User Warnings

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

Printing the newly created API key to stderr exposes a live credential to logs, terminal history capture tools, CI systems, and agent transcripts. Any party with access to those outputs can reuse the key to access the service as the user.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
88% confidence
Finding

The skill demonstrates shell-based network actions but does not declare any tool scope or allowed-tools restrictions. This creates an authorization and review gap: an agent may invoke shell commands and contact external services without explicit least-privilege boundaries, increasing the chance of unintended command execution or data egress.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill invites users to submit text for translation but does not warn that the content will be transmitted to an external third-party API. This can lead to unintentional disclosure of sensitive, proprietary, or regulated data because users and orchestrators may assume the processing is local or platform-native.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
91% confidence
Finding

The skill explicitly posts user-controlled data such as email addresses and translation text to an external domain, which is a genuine external transmission path. In a translation skill this behavior is expected, but it is still security-relevant because it enables third-party data exposure and potential privacy/compliance issues if sensitive content is sent.

Content

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

Set TRANSLATEFLOW_API_KEY or TRANSLATEFLOW_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

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The script can mint a new API key automatically from only an email address, which expands its behavior beyond simple translation requests into account or credential provisioning. In an agent-skill context, this increases the chance of silent account creation, unexpected data sharing, and unauthorized credential generation tied to a user's email.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
86% confidence
Finding

This line transmits user-controlled personal data (email) to an external service at a default third-party domain. External transmission is expected for a translation service, but this specific transmission is more sensitive because it is unrelated to translation content and creates credentials remotely.

Content

Scanner excerpt · scripts/forge-client.sh (reported line 7)May include surrounding context.

sh
API_KEY="${TRANSLATEFLOW_API_KEY:-}"
EMAIL="${TRANSLATEFLOW_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
93% confidence
Finding

The script sends the user's email address to a remote endpoint without any in-file disclosure or consent prompt. In a skill environment, that can cause silent exfiltration of personal data and trigger unwanted account creation or tracking.

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 TRANSLATEFLOW_API_KEY or TRANSLATEFLOW_EMAIL" >&2; exit 1; }
ACTION="${1:-help}"; shift || true
case "$ACTION" in
  translate) curl -sf -X POST "$API_BASE/v1/translate" -H "Authorization: Bearer $API_KEY" -H "Content-Type: application/json" -d "$1" ;;
  batch) curl -sf -X POST "$API_BASE/v1/translate/batch" -H "Authorization: Bearer $API_KEY" -H "Content-Type: application/json" -d "$1" ;;
  health) curl -sf "$API_BASE/v1/health" ;;
  *) echo "TranslateFlow: translate '<json>' | batch '<json>' | health" ;;

Vague Triggers

Low
Category
Not specified by scanner
Confidence
86% confidence
Finding

The description says to use the skill whenever the user needs text translated, content localized, or multi-language support, but it does not define tighter trigger constraints or exclusions. In a manifest/markdown context, this broad natural-language activation guidance may cause unintended invocation for general requests that mention language support.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.