Back to skill

Security audit

earth2037

Security checks for vulnerabilities and agentic risk

Overview

This game skill is broadly purpose-aligned, but it can handle credentials, perform live account actions, and forward local file contents to configurable servers without enough guardrails.

Install only if you trust the Earth2037 service and are comfortable with an agent using your game credentials/token to perform live account actions. Avoid custom apiBase values unless you fully control the endpoint, do not pass real passwords in logged command lines, review raw @file payload use carefully, and treat config.json plus generated cache files as sensitive account data.

Vulnerability Patterns
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • 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
Findings (3)

T09 · Insecure Skill Coding Practices

Error
Location
2037.py:15
Finding

Credentials and bearer tokens can be transmitted to an untrusted or plaintext endpoint

Content
View full analysis
EARTH2037_API_BASE > apiBase""" base_dir = os.path.dirname(os.path.abspath(__file__)) config_path = os.path.join(base_dir, "config.json") api_base = "https://2037en1.9235.net" if os.path.exists(config_path): try: with open(config_path, "r", encoding="utf-8") as f: cfg = json.load(f) api_base = cfg.get("apiBase", api_base) except (json.JSONDecodeError, IOError): pass if api_base_override: return api_base_override.rstrip("/") env_base = os.environ.get("EARTH2037_API_BASE", "").strip() if env_base: return env_base.rstrip("/") return api_base.rstrip("/") ``` ```python def cmd_login(api_base, username, password): url = f"{api_base}/auth/token" try: r = http_post(url, {"username": username, "password": password}) ``` ```python def _game_command(api_base, token, cmd, args=""): import urllib.request import urllib.error url = f"{api_base}/game/command" body = json.dumps({"cmd": cmd, "args": args or ""}).encode("utf-8") req = urllib.request.Request(url, data=body, method="POST") req.add_header("Content-Type", "application/json") req.add_header("Authorization", f"Bearer {token}") req.add_header("Accept", "application/json") try: resp = urllib.request.urlopen(req, timeout=30) ``` ### Technical Analysis The API base URL may be supplied through `config.json`, `EARTH2037_API_BASE`, or the `--api-base` command-line option. The value is used directly without validating its scheme, hostname, port, embedded credentials, or relationship t ...[truncated 2050 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
2037.py:383
Finding

Passwords and registration keys are exposed through process command-line arguments

Content
View full analysis
[tribe]") sys.exit(1) u, pw = args[1], args[2] if len(args) >= 4: tribe_token = args[3] else: tribe_token = _prompt_tribe_interactive() cmd_register(api_base, u, pw, tribe_token) elif cmd == "recover": if len(args) < 3: print("Usage: 2037.py recover ") sys.exit(1) cmd_recover(api_base, args[1], args[2]) elif cmd == "login": if len(args) < 3: print("Usage: 2037.py login ") sys.exit(1) cmd_login(api_base, args[1], args[2]) elif cmd == "apply": if len(args) < 4: print("Usage: 2037.py apply [tribe]") sys.exit(1) tribe_id = args[4] if len(args) > 4 else None cmd_apply(api_base, args[1], args[2], args[3], tribe_id=tribe_id) ``` The Skill documentation explicitly instructs these invocations: ```text 2037 register (tribe chosen) → python3 skills/earth2037/2037.py register <1|2|3|name> 2037 login X Y → python3 skills/earth2037/2037.py login X Y 2037 apply with key → python3 skills/earth2037/2037.py apply X Y [1|2|3|name] 2037 recover key → python3 skills/earth2037/2037.py recover ``` ### Technical Analysis The authentication interface accepts passwords and registration keys as positional command-line arguments. Command-line secrets may be exposed through process inspection facilities, shell history, command auditing, terminal logs, agent tool-call records, crash reports, or telemetry. Sending credentials to the declared authentication service is part o ...[truncated 1462 chars]
Remediation
View remediation

T05 · Unauthorized Access and Privilege Escalation

Error
Location
build_ops.py:85
Finding

Arbitrary local files can be read and forwarded as authenticated game payloads

Content
View full analysis
Remediation
View remediation
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
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (19)

Tp4

High
Category
MCP Tool Poisoning
Confidence
94% confidence
Finding

The documented behavior includes troop recruitment and raw queue submission through separate operational scripts, which goes well beyond the declared key/register/login workflow. Because these are authenticated, state-changing actions against a live game backend, the mismatch can lead to unintended account actions and undermines transparency around what the skill will do.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The documented behavior includes troop recruitment and raw queue submission through separate operational scripts, which goes well beyond the declared key/register/login workflow. Because these are authenticated, state-changing actions against a live game backend, the mismatch can lead to unintended account actions and undermines transparency around what the skill will do.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The documented behavior includes troop recruitment and raw queue submission through separate operational scripts, which goes well beyond the declared key/register/login workflow. Because these are authenticated, state-changing actions against a live game backend, the mismatch can lead to unintended account actions and undermines transparency around what the skill will do.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding

The documented behavior includes troop recruitment and raw queue submission through separate operational scripts, which goes well beyond the declared key/register/login workflow. Because these are authenticated, state-changing actions against a live game backend, the mismatch can lead to unintended account actions and undermines transparency around what the skill will do.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding

The documented behavior includes troop recruitment and raw queue submission through separate operational scripts, which goes well beyond the declared key/register/login workflow. Because these are authenticated, state-changing actions against a live game backend, the mismatch can lead to unintended account actions and undermines transparency around what the skill will do.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The skill sends usernames, passwords, keys, and tokens to remote endpoints for recover, login, register, apply, and newkey operations, but it provides no clear user-facing warning that these secrets are being transmitted over the network to a third-party game service. Although HTTPS is used by default, the code also allows API base override via CLI, environment, or config, which increases the risk of accidental secret disclosure to an untrusted endpoint.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The manifest describes this skill as handling key/apikey, register, and login, but the CLI also exposes broader game-operation and cache-management commands such as setcity, sync, bootstrap, show, airinfo, and airdrop. This scope expansion increases the attack surface and can cause users or orchestrators to invoke state-changing operations they did not consent to, especially because some commands mutate local caches and potentially remote game state.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

An authentication-oriented skill is expected to obtain keys or login tokens, but this file also performs local session and cache mutation through commands like setcity, sync, and bootstrap. Mixing auth with disk-writing/session-management behavior can mislead users and higher-level agents, leading to unintended persistence of sensitive session data or hidden state changes outside the advertised purpose.

Content

No source excerpt is available for this finding.

Skill Enumeration

Medium
Category
Agent Snooping
Confidence
80% confidence
Finding

Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.

Content

Scanner excerpt · MAP_FOR_AI.md (reported line 91)May include surrounding context.

md
| `skills/earth2037/build_ops.py` | Build / cancel queue |
| `skills/earth2037/march_ops.py` | March |
| `skills/earth2037/chat_ops.py` | World / alliance chat |
| `skills/earth2037/SKILL.md` | Full command map |

---

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
96% confidence
Finding

The skill declares no explicit tool scope or permissions despite clearly instructing use of shell execution, remote network access, environment variables, and local file reads/writes. This creates an over-privileged integration surface where a host agent may grant broader capabilities than users expect, increasing the chance of credential exposure, unintended API actions, or abuse of local files.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The trigger pattern includes broad matching on '2037|earth2037|earth 2037', which can cause accidental activation from generic mentions of the number or game name. In a skill that handles credentials, tokens, shell execution, and live account actions, unintended activation raises the chance of exposing secrets or performing unintended operations.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The skill instructs collection and handling of usernames, passwords, API keys, and bearer tokens without any visible privacy notice, secure-handling guidance, or minimization controls. In context, the skill also writes local cache files and uses environment/config values, so poor secret-handling practices could expose long-lived credentials or account access tokens.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

The code sends a CANCELBUILDQUEUE command directly when the cancel-queue subcommand is used, but there is no confirmation prompt, warning message, or explanatory comment/docstring describing that this operation alters game state. Because canceling a queue is a potentially destructive or irreversible action, the file should disclose that behavior to the user before executing it.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
84% confidence
Finding

This code file performs outbound network actions for send-world and send-ally by packaging message text, username, user ID, and alliance ID into request payloads and sending them via gc(...). While the script prints errors and final output, it does not provide a visible warning, confirmation, or explanatory comment/docstring about transmitting this data to a remote service.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
95% confidence
Finding

The top-level description explicitly labels the skill as '(English)', which indicates a fixed language choice. Under the policy rule, language constraints should either offer a user choice or be clearly justified as region-specific; no such opt-in or justification appears in this file.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
83% confidence
Finding

Commands in this range write or update local cache files such as userinfo.json, citys.json, and session_cache.json, but the skill does not clearly disclose in advance that it will modify files on disk. Undisclosed local persistence can surprise users, leak game/session metadata to other local processes, or leave behind sensitive artifacts in shared environments.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
84% confidence
Finding

The title explicitly labels the skill as "English" and the document otherwise presents behavior as fixed rather than offering a language choice. This can violate language/locale policy when a specific language is imposed without user opt-in or documented justification.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
89% confidence
Finding

The code writes authenticated session/bootstrap data and user/game state to plaintext JSON files in the skill directory. Even if this is intended as local caching, those files may contain account identifiers, city/state data, and possibly other sensitive session details that can be read by other local users, included in backups, or exposed if the workspace is shared.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
95% confidence
Finding

The script performs state-changing game actions such as RECRUITQUEUE and ADDCONSCRIPTIONQUEUE immediately from CLI arguments without any confirmation, dry-run mode, or explicit warning to the operator. In a skill context where an agent may invoke commands on a user's behalf, this increases the chance of accidental troop recruitment or queue modification, causing unintended in-game resource expenditure and irreversible gameplay changes.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.