Back to skill

Security audit

Easy English Tool 英语学习速通工具

Security checks for vulnerabilities and agentic risk

Overview

This English-learning skill appears purpose-aligned, but it needs review because it sends account and study data to a remote service and documents user-ID-based REST access for actions that can change or delete learning records.

Install only if you trust english.geeyo.com with your login and learning data. Prefer the MCP login flow over the REST fallback, avoid sharing raw user IDs, and confirm before using actions that submit scores, change levels, create content, or delete articles.

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 (1)

T09 · Insecure Skill Coding Practices

Error
Location
SKILL.md:115
Finding

Caller-Controlled User Identifier Used as REST Authorization Credential

Content
View full analysis
`. Get a userId by calling `POST /api/users/ensure`. | MCP Tool | REST Equivalent | |----------|----------------| | `account_login` | `POST /api/users/login` `{username, password}` | | `get_profile` | `GET /api/profile` | | `get_today` | `GET /api/today` | | `vocab_add` | `POST /api/vocab` `{word, chinese, context?}` | | `vocab_list` | `GET /api/vocab` | | `vocab_review` | `POST /api/vocab/review` `{id}` | | `articles_create` | `POST /api/user-articles` `{title, content}` | | `articles_list` | `GET /api/user-articles` | | `articles_get` | `GET /api/user-articles/:id` | | `articles_delete` | `DELETE /api/user-articles/:id` | | `tts` | `POST /api/tts` `{text, speed?}` | | `checkin_poster` | `GET /api/checkin/poster` → PNG binary | | `get_history` | `GET /api/history` | | `quiz_submit` | `POST /api/quiz` `{correctCount, totalCount, points?, articleId?}` | | `level_set` | `POST /api/level` `{level}` | | `levels_list` | `GET /api/levels` | | `diagnose` | `POST /api/diagnose` `{}` | | `copy_load` | `POST /api/copy` `{articleId, source?, action:"load"}` | | `copy_submit` | `POST /api/copy` `{articleId, source?, action:"submit"}` | | `copy_stash` | `POST /api/copy` `{articleId, draft, source?, action:"stash"}` | | `evaluate` | `POST /api/evaluate` `{text, articleId?}` | ``` ### Technical Analysis The documented REST fallback identifies requests through a caller-supplied `x-user-id` header and explicitly describes this mechanism as “Anonymous auth.” No password, authenticated session, signed token, expiration mechanism, or proof of possession is documented for subsequent requests. A user identifier is an identity attri ...[truncated 2133 chars]
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (3)

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
80% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

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

md
| `articles_create` | `POST /api/user-articles` `{title, content}` |
| `articles_list` | `GET /api/user-articles` |
| `articles_get` | `GET /api/user-articles/:id` |
| `articles_delete` | `DELETE /api/user-articles/:id` |
| `tts` | `POST /api/tts` `{text, speed?}` |
| `checkin_poster` | `GET /api/checkin/poster` → PNG binary |
| `get_history` | `GET /api/history` |

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The trigger phrases include very broad terms like 'study English', 'my vocab', 'my progress', and generic Chinese learning phrases, which can cause the skill to activate during ordinary conversation rather than from clear user intent to use this remote service. Because the skill can access personal learning data and perform state-changing actions, accidental invocation increases the risk of unintended data disclosure or account actions.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The skill explicitly instructs the agent to collect usernames and passwords and to access personal learning data through a remote server, but it does not clearly warn the user that credentials and profile/history data will be transmitted off-platform. This creates a consent and privacy risk, especially because the skill also offers REST fallback and session-cached identity handling that may make remote transmission less obvious to users.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.