Back to skill

Security audit

Aquarium Plant Health Monitor | 水族箱水草健康监测

Security checks for vulnerabilities and agentic risk

Overview

This skill mostly behaves like a cloud aquarium-plant analysis tool, but it silently creates and reuses identities, persists account tokens locally, and accepts a hidden caller-controlled identity value that can affect cloud history access.

Review carefully before installing. Use it only if you are comfortable sending aquarium media and history queries to lifeemergence.com services, allowing the skill to create or reuse a local identity, and storing service tokens in a workspace SQLite database. Avoid exposing this skill to untrusted local callers or automation that could pass hidden identity parameters, and prefer a version with explicit authentication, consent, token storage controls, and report-ownership enforcement.

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

T05 · Unauthorized Access and Privilege Escalation

Error
Location
scripts/smyx_aquarium_plant_health_monitor_analysis.py:47
Finding

Unverified caller-controlled identity enables service account impersonation

Content
View full analysis

Vulnerability Details

File Location: scripts/smyx_aquarium_plant_health_monitor_analysis.py:47, 55-58; skills/smyx_common/scripts/util.py:454-470, 551-565, 578-612
Vulnerability Type: Improper authentication and user-controlled identity binding
Risk Level: High

Vulnerable Code

scripts/smyx_aquarium_plant_health_monitor_analysis.py:47, 55-58:

python
parser.add_argument("--open-id", required=False, help=argparse.SUPPRESS)

args = parser.parse_args()

try:
    # Initialize internal user identity.
    OpenIdUtil.resolve_current_open_id(
        args.open_id,
        use_current=bool(args.open_id)
    )

skills/smyx_common/scripts/util.py:454-470:

python
@classmethod
def resolve_current_open_id(cls, open_id=None, use_current=True):
    """Resolve and initialize the current open-id."""
    resolved_open_id = (open_id or "").strip() if isinstance(open_id, str) else open_id
    if not resolved_open_id and use_current:
        resolved_open_id = ConstantEnum.CURRENT__OPEN_ID or ConstantEnum.CURRENT__USER_NAME
    if not resolved_open_id:
        resolved_open_id = cls.get_api_key_file_open_id()
    if not resolved_open_id:
        resolved_open_id = cls.get_or_create_default_open_id()

    ConstantEnum.CURRENT__OPEN_ID = resolved_open_id
    if not ConstantEnum.CURRENT__USER_NAME:
        ConstantEnum.CURRENT__USER_NAME = resolved_open_id
    return resolved_open_id

skills/smyx_common/scripts/util.py:551-565:

python
def _get_or_create_user(username):
    _url = ApiEnum.BASE_URL_HEALTH + "/sys/phoneLogin"
    open_id = username
    _data = {
        "silent": 1,
        "register": 1,
        "openId": open_id,
        "mobile": username,
        "source": ConstantEnum.DEFAULT__SKILL_HUB_NAME
    }
    try:
        _response = requests.post(_url, json=_data)
        if _response.status_code == 200:
            _response_json = _response.json()
            if _response_json and _response_json.get("success"):
            
...[truncated 4714 chars]
Remediation
View remediation

Remediation Suggestions

  1. Remove direct caller control over --open-id. Internal identity values should be supplied only through a trusted integration boundary, not an ordinary CLI argument.
  2. If upstream identity propagation is required, accept a signed identity assertion and validate its signature, issuer, audience, subject, expiry, and nonce before assigning identity state.
  3. Do not use an openId or mobile value as sufficient evidence for silent login. The server should require established account credentials, a trusted service credential, or a verifiable one-time authentication flow.
  4. Disable automatic registration during authenticated history access. Registration and login should be separate operations with explicit authorization requirements.
  5. Enforce report ownership and tenant isolation on every server-side analysis, result, page, and export endpoint. Never rely solely on pnaUserName or another client-supplied identity field.
  6. Require the documented API-key or equivalent trusted client authentication before issuing user-scoped tokens.
  7. Bind locally cached tokens to a verified subject, issuer, audience, and tenant. Reject a cached token if those properties do not match the current authenticated context.
  8. Avoid storing reusable access tokens in a shared workspace database unless necessary. Use operating-system credential storage, restrictive file permissions, encryption at rest, and short token lifetimes.
  9. Add negative tests confirming that one user cannot request tokens, history, report exports, or analysis operations by supplying another user's identifier.
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
  • YARA SignaturesMalware Match, Webshell Match, Cryptominer Match
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
Findings (55)

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

Authenticated outbound requests, identity creation/resolution, token persistence, local file IO, database interaction, and runtime-context detection are powerful capabilities unrelated to the narrow description of aquarium image analysis. In this context, the mismatch makes the skill more dangerous because it operates in a consumer-facing, trust-based scenario where users would not reasonably expect account and storage side effects.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
94% confidence
Finding

Authenticated outbound requests, identity creation/resolution, token persistence, local file IO, database interaction, and runtime-context detection are powerful capabilities unrelated to the narrow description of aquarium image analysis. In this context, the mismatch makes the skill more dangerous because it operates in a consumer-facing, trust-based scenario where users would not reasonably expect account and storage side effects.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
93% confidence
Finding

Authenticated outbound requests, identity creation/resolution, token persistence, local file IO, database interaction, and runtime-context detection are powerful capabilities unrelated to the narrow description of aquarium image analysis. In this context, the mismatch makes the skill more dangerous because it operates in a consumer-facing, trust-based scenario where users would not reasonably expect account and storage side effects.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

Authenticated outbound requests, identity creation/resolution, token persistence, local file IO, database interaction, and runtime-context detection are powerful capabilities unrelated to the narrow description of aquarium image analysis. In this context, the mismatch makes the skill more dangerous because it operates in a consumer-facing, trust-based scenario where users would not reasonably expect account and storage side effects.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

Authenticated outbound requests, identity creation/resolution, token persistence, local file IO, database interaction, and runtime-context detection are powerful capabilities unrelated to the narrow description of aquarium image analysis. In this context, the mismatch makes the skill more dangerous because it operates in a consumer-facing, trust-based scenario where users would not reasonably expect account and storage side effects.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

Authenticated outbound requests, identity creation/resolution, token persistence, local file IO, database interaction, and runtime-context detection are powerful capabilities unrelated to the narrow description of aquarium image analysis. In this context, the mismatch makes the skill more dangerous because it operates in a consumer-facing, trust-based scenario where users would not reasonably expect account and storage side effects.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

Authenticated outbound requests, identity creation/resolution, token persistence, local file IO, database interaction, and runtime-context detection are powerful capabilities unrelated to the narrow description of aquarium image analysis. In this context, the mismatch makes the skill more dangerous because it operates in a consumer-facing, trust-based scenario where users would not reasonably expect account and storage side effects.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

Authenticated outbound requests, identity creation/resolution, token persistence, local file IO, database interaction, and runtime-context detection are powerful capabilities unrelated to the narrow description of aquarium image analysis. In this context, the mismatch makes the skill more dangerous because it operates in a consumer-facing, trust-based scenario where users would not reasonably expect account and storage side effects.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

Authenticated outbound requests, identity creation/resolution, token persistence, local file IO, database interaction, and runtime-context detection are powerful capabilities unrelated to the narrow description of aquarium image analysis. In this context, the mismatch makes the skill more dangerous because it operates in a consumer-facing, trust-based scenario where users would not reasonably expect account and storage side effects.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

Authenticated outbound requests, identity creation/resolution, token persistence, local file IO, database interaction, and runtime-context detection are powerful capabilities unrelated to the narrow description of aquarium image analysis. In this context, the mismatch makes the skill more dangerous because it operates in a consumer-facing, trust-based scenario where users would not reasonably expect account and storage side effects.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

Authenticated outbound requests, identity creation/resolution, token persistence, local file IO, database interaction, and runtime-context detection are powerful capabilities unrelated to the narrow description of aquarium image analysis. In this context, the mismatch makes the skill more dangerous because it operates in a consumer-facing, trust-based scenario where users would not reasonably expect account and storage side effects.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

Authenticated outbound requests, identity creation/resolution, token persistence, local file IO, database interaction, and runtime-context detection are powerful capabilities unrelated to the narrow description of aquarium image analysis. In this context, the mismatch makes the skill more dangerous because it operates in a consumer-facing, trust-based scenario where users would not reasonably expect account and storage side effects.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

Authenticated outbound requests, identity creation/resolution, token persistence, local file IO, database interaction, and runtime-context detection are powerful capabilities unrelated to the narrow description of aquarium image analysis. In this context, the mismatch makes the skill more dangerous because it operates in a consumer-facing, trust-based scenario where users would not reasonably expect account and storage side effects.

Content

No source excerpt is available for this finding.

YARA rule 'agent_skill_mcp_tool_poisoning_metadata': MCP/tool metadata poisoning indicators in tool schemas or skill manifests [agent_skills]

High
Category
YARA Match
Confidence
80% confidence
Finding

Tool/metadata poisoning indicators in a manifest are concerning because agent systems often trust manifest fields for routing and safety decisions. Even if this instance is only malformed or suspicious metadata, in combination with the many description-behavior mismatches it raises the risk that the skill is attempting to manipulate how tools or policies interpret it.

Content

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

md
---
name: "smyx-aquarium-plant-health-monitor-analysis"
description: "AI-powered aquatic plant health monitoring from aquarium camera images. Detects leaf color changes (yellowing, bleaching, blackening), morphological anomalies (melting, curling, holes), and iron deficiency symptoms in submerged plants. Outputs health assessment and care suggestions (e.g., supplement iron fertilizer, adjust lighting, increase CO₂). Helps early detection of aquatic plant issues and maintains aquarium ecological balance. Scenarios: smart fish tanks, aquascaping tanks, aquarium shops. | 通过智能鱼缸或水下摄像头拍摄水草的图像,利用AI视觉分�

Description-Behavior Mismatch

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The file’s behavior materially diverges from the advertised skill purpose: it analyzes videos and lists video history rather than performing aquarium plant image analysis. This kind of capability mismatch is dangerous because users, reviewers, or higher-level orchestration may grant permissions or trust based on the manifest, while the code actually processes different inputs and exposes additional functionality, increasing the risk of unintended data handling and deceptive behavior.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The file defines a full user/account persistence layer, including identity fields and account lookup logic, which does not align with an aquarium plant image analysis skill. This mismatch increases suspicion because unrelated identity-management functionality expands the attack surface and may enable unauthorized data collection or reuse beyond the user's expected plant-health workflow.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

High
Category
Not specified by scanner
Confidence
96% confidence
Finding

The User model stores token, open_token, email, birthday, and real identity fields, none of which are justified by the stated purpose of analyzing aquarium plant health from images. Unnecessary collection and local persistence of authentication and personal data materially raise the consequences of compromise and suggest overcollection beyond user expectations.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The code reads a local API-key file, reuses or creates persistent user identities in a local database, and stores a default open-id automatically. For a plant-health image analyzer, this is unjustified identity persistence and silent credential/identity harvesting behavior, which can bind user activity to hidden accounts and enable unauthorized downstream API usage.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
Not specified by scanner
Confidence
97% confidence
Finding

The file contains generic authenticated HTTP request logic, token management, local user lookup, and automatic account provisioning that are unrelated to aquarium plant image analysis. This significantly expands the skill's privilege and data-access surface, enabling remote service interaction under locally discovered credentials or auto-created identities without clear user consent.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
84% confidence
Finding

The skill advertises and instructs use of shell execution, network access, and local file handling but does not declare any explicit tool scope or allowed-tools boundary. That creates an overprivileged and opaque execution model where an agent may invoke sensitive capabilities without manifest-level restriction or review.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

Line L030 instructs the skill to output only visual assessment and explicitly not provide specific water-parameter adjustment plans. Elsewhere, the skill documentation advertises actionable husbandry recommendations including fertilization, lighting, CO₂, and pruning, which contradicts the narrower role definition and creates intent ambiguity.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

An overly broad default trigger can cause the skill to activate on loosely related aquarium or plant requests and automatically save attachments or invoke remote processing. In a skill with undeclared network, identity, and persistence behaviors, accidental activation increases privacy and unauthorized-processing risk.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The skill claims a visual-only assessment role but also includes cloud history-query and report-link retrieval features tied to internal identity handling. That broadens the data exposure surface beyond image analysis and can surprise users with remote retrieval of prior records they did not explicitly understand were being stored and linked.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The documentation describes cloud history-report lookup tied to user-associated data without a clear user-facing warning or consent flow for remote transmission and retrieval. This is dangerous because users may unknowingly trigger access to stored records or send identifiers to a backend service under the guise of a simple plant-health skill.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The script exposes a history-listing function for prior analyses via --list, which goes beyond the stated purpose of analyzing aquarium plant images. If prior reports are tied to a user identity and can be retrieved without clear authorization boundaries, this creates a privacy and data exposure risk by expanding the skill into undocumented data access behavior.

Content

No source excerpt is available for this finding.

Static analysis

Detected: suspicious.install_untrusted_source

Install source points to URL shortener or raw IP.

Warn
Code
suspicious.install_untrusted_source
Location
skills/smyx_common/scripts/config-dev.yaml:2