Back to skill

Security audit

Equalang Translation

Security checks for vulnerabilities and agentic risk

Overview

This skill is a disclosed Equalang cloud translation helper that uploads user-selected files or text and stores an API key locally, with no hidden or unrelated behavior found.

Install only if you are comfortable sending selected files, text, or public URLs to Equalang's cloud service and spending Equalang credits for paid operations. Keep the API key private, review any EQUALANG_BASE_URL override before use, and avoid using the skill on sensitive documents unless Equalang's privacy terms fit your needs.

Vulnerability Patterns
  • 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
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Taint TrackingDirect Taint Flow, Variable-Mediated Taint Flow, Credential Exfiltration Chain
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
Findings (7)

Tainted flow: 'body' from os.environ.get (line 162, credential/environment) → urllib.request.urlopen (network output)

Critical
Category
Data Flow
Confidence
90% confidence
Finding

Credentials or environment variables flow to a network sink. This is a high-confidence indicator of credential exfiltration.

Content

Scanner excerpt · scripts/equalang.py (reported line 112)May include surrounding context.

python
failure = None
    for attempt in range(1, ATTEMPTS + 1):
        try:
            with request.urlopen(request.Request(f'{_base_url()}{path}', data=body, method=method, headers=headers), timeout=300) as response:
                return json.loads(response.read()).get('data'), response.headers
        except error.HTTPError as exc:
            try:

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.

bash
dir="${XDG_CONFIG_HOME:-$HOME/.config}/equalang"
mkdir -p "$dir" && (umask 077 && echo 'EQUALANG_API_KEY=el_...' > "$dir/.env")

EQUALANG_API_KEY in the environment wins over the file. Without a key every command answers with how to get one and where it goes. Never invent a key - ask the user.

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 · scripts/equalang.py (reported line 58)May include surrounding context.

python
updated -- a plugin lives in a cache named by its version -- and a key kept
    there goes with it. The Equalang MCP server reads the same file.
    """
    return Path(os.environ.get('XDG_CONFIG_HOME') or Path.home() / '.config') / 'equalang' / '.env'


def _setting(name):

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
91% confidence
Finding

The skill invokes local scripts that can read environment variables, access local files, write outputs, and make network requests, yet it declares no explicit tool scope or permissions boundary. In an agent environment, that omission increases the chance the skill is used with broader capabilities than intended, enabling unintended file upload or local file writes when processing user-supplied paths or URLs.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The code uploads local file contents to a third-party service, which can expose sensitive documents if a user or higher-level agent invokes it without realizing the data leaves the device. In an agent-skill context, this is more dangerous because the tool may be selected automatically based on a user's request, so the transfer can occur without a clear just-in-time privacy warning.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

When --file is used with the text translation command, the script reads the local file and sends its full contents to the remote API without an explicit off-device transmission warning. This is a real privacy/security issue in an agent setting because local notes, articles, or markdown may contain secrets or personal data, and the user may assume processing is local.

Content

No source excerpt is available for this finding.

Scope Creep

Low
Category
Excessive Agency
Confidence
70% confidence
Finding

Skill's behavior or capabilities extend beyond its stated purpose. Scope creep allows an agent to perform actions unrelated to its documented functionality, increasing the attack surface.

Content

Scanner excerpt · LICENSE (reported line 7)May include surrounding context.

text
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Static analysis

No suspicious patterns detected.