Back to skill

Security audit

BluTranslate

Security checks for vulnerabilities and agentic risk

Overview

The skill is a real Bluente file-translation helper, but its instructions can upload whole folders to a third party, overwrite original documents, and leave the API key in a generated script.

Review before installing or using. Only run it on documents you are allowed to send to Bluente, prefer a separate output directory, keep backups of originals, avoid pointing it at broad folders unless you have reviewed the file list, and rotate the Bluente API key if it was written into a generated script or logs.

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
SKILL.md:58
Finding

Plaintext API Key Embedded in Generated Script

Content
View full analysis
" BASE = "https://api.bluente.com/api/20250924/blu_translate" HEADERS = {"Authorization": f"Bearer {API_KEY}"} ``` ### Technical Analysis The Skill instructs the agent to substitute the user's Bluente API key directly into a generated Python script. This leaves the bearer credential in plaintext source code. Depending on how the agent creates and executes the script, the credential may persist in the workspace, temporary files, backups, source-control history, agent transcripts, or tool logs. File permissions are not restricted, and the instructions do not require deletion of the generated script after execution. Sending the key to Bluente in an authorization header is necessary for the declared cloud translation function. Persistently embedding it in generated code is not necessary and exceeds minimum secure credential-handling requirements. ### Attack Path 1. A user provides a valid Bluente API key to the Skill. 2. The agent inserts the key into the generated Python script as `API_KEY = "..."`. 3. The script or its contents remain accessible through the workspace, logs, backups, source control, or agent execution history. 4. An attacker with access to one of those locations extracts the bearer token. 5. The attacker submits authenticated requests to Bluente using the compromised token. ### Impact Assessment Successful exploitation exposes the privileges granted to the Bluente API key. An attacker could consume translation services, incur usage against the victim's account, and potentially access other account-scoped API resources available to that credential. This issue does not grant local operating-system privilege escalation by itself. Its scope is limited primarily to the API permissions associated with the exposed key. ]]>
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
SKILL.md:26
Finding

Translated Output Can Overwrite and Destroy Source Files

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
Findings (5)

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The skill instructs users to translate local files through a third-party API but does not clearly warn that document contents will be uploaded off-system. This creates a real privacy and data-handling risk because users may submit sensitive documents without informed consent.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% 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 · SKILL.md (reported line 37)May include surrounding context.

If the user picks a language NOT in this list, call the supported languages endpoint:

text
GET https://api.bluente.com/api/20250924/blu_translate/supported_languages
Header: Authorization: Bearer <API_KEY>

Response format: {"message": "success", "code": 0, "data": [{"name": "French", "svcCode": "fra", ...}, ...]}

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% 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 · SKILL.md (reported line 159)May include surrounding context.

If the user picks a language NOT in this list, call the supported languages endpoint:

text
GET https://api.bluente.com/api/20250924/blu_translate/supported_languages
Header: Authorization: Bearer <API_KEY>

Response format: {"message": "success", "code": 0, "data": [{"name": "French", "svcCode": "fra", ...}, ...]}

External Transmission

Medium
Category
Data Exfiltration
Confidence
90% confidence
Finding

The embedded script is designed to upload local files to an external translation service using a bearer API key, creating a real data exfiltration path from the user's machine to a third party. Although this is aligned with the skill's function, it remains security-relevant because the files may contain sensitive information and the script encourages bulk processing of folders.

Content

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

md
import requests, time, sys, os

API_KEY = "<API_KEY>"
BASE = "https://api.bluente.com/api/20250924/blu_translate"
HEADERS = {"Authorization": f"Bearer {API_KEY}"}
FILES = [<list of absolute file paths>]
FROM_LANG = "en"  # or other source language code

External Transmission

Medium
Category
Data Exfiltration
Confidence
92% confidence
Finding

This step initiates translation of user-provided document content via an external API, which necessarily sends potentially sensitive file contents and language metadata to a third party. In the context of a file-handling skill, that is dangerous if not tightly disclosed and consented to, especially for proprietary or regulated documents.

Content

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

md
continue

    # Start translation
    r = requests.post(f"{BASE}/translate?engine=3", headers=HEADERS,
                      json={"id": task_id, "action": "start", "from": FROM_LANG, "to": TO_LANG})
    resp = r.json()
    if resp.get("code") != 0:

Static analysis

No suspicious patterns detected.