Back to skill

Security audit

huawei-cloud-ges-graph

Security checks for vulnerabilities and agentic risk

Overview

This skill is a real Huawei GES cloud database client, but it can change or delete cloud data and uses credentials with weak transport safeguards, so it needs review before install.

Install only if you intend to let an agent operate a Huawei Cloud GES graph with the configured credentials. Use narrowly scoped, revocable credentials, avoid storing long-lived secrets in the skill directory, review all import/export and delete requests before execution, and do not use this against production data until TLS verification and destructive-operation confirmations are fixed.

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
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
Findings (18)

Lp3

Medium
Category
MCP Least Privilege
Confidence
95% confidence
Finding
The skill documentation instructs use of local scripts that read environment variables, access files such as `.env/ges_env.csv`, and make live network requests, yet the skill declares no permissions. This undermines transparency and sandboxing assumptions, making it easier for an agent or user to invoke capabilities with credential, file, and network access without an explicit permission boundary.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding
The skill is presented as an 'access guide' but its content clearly enables and encourages active execution against Huawei IAM, GES, and OBS using local scripts and credentials. That mismatch is dangerous because operators may approve or invoke the skill with lower scrutiny, not realizing it can authenticate, modify graph data, import/export data, manage remote objects, and perform destructive operations.

Intent-Code Divergence

Medium
Confidence
83% confidence
Finding
The dangerous-operation naming is inconsistent: guardrails reference `clear_graph()` while examples use `clear_all_memories()`. In a destructive admin skill, this kind of API/documentation divergence can cause reviewers and calling agents to miss or misclassify a graph-wiping operation, weakening safety checks and confirmation logic.

Description-Behavior Mismatch

High
Confidence
96% confidence
Finding
The manifest describes this as an access guide, but the implementation exposes live graph-query, mutation, import/export, and storage-affecting operations. This mismatch is dangerous because an agent or user may invoke the skill expecting read-only guidance while actually performing privileged changes to graph data and connected storage resources.

Context-Inappropriate Capability

Medium
Confidence
88% confidence
Finding
The skill includes a full OBS object-storage client with list, upload, download, and delete capabilities that go beyond a narrowly described GES terminal access guide. This expands the attack surface and grants file and object manipulation abilities that could be abused to exfiltrate, overwrite, or delete cloud data if the skill is invoked with available credentials.

Intent-Code Divergence

Medium
Confidence
84% confidence
Finding
The top-level comments present the module as an SDK with broad operational support including import/export, while the external metadata frames it as a guide. This inconsistency increases the risk of unsafe delegation because operators may approve or run the skill under a weaker trust model than its actual capabilities warrant.

Vague Triggers

Medium
Confidence
84% confidence
Finding
The trigger list includes broad phrases like 'graph database' and generic query-related wording, which can cause the skill to activate in contexts where the user did not intend live cloud graph operations. Because this skill can use credentials and perform networked, potentially destructive actions, accidental invocation increases the chance of unintended data access or modification.

Missing User Warnings

Medium
Confidence
97% confidence
Finding
The skill exposes graph-clearing functionality that can delete all graph contents, either via API or Cypher, without any confirmation, dry-run, or safety interlock. In an agent setting, a mistaken prompt, prompt injection, or misuse could cause immediate irreversible data destruction.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The OBS delete operation removes remote objects immediately without disclosure, confirmation, soft-delete handling, or scoped restrictions. This creates a straightforward path to destructive cloud storage actions if the function is called accidentally or through malicious prompt steering.

Missing User Warnings

High
Confidence
94% confidence
Finding
The skill exposes a graph-wide destructive operation that can wipe all data without any confirmation, dry-run, safeguard, or explicit warning at call time. In an agent skill context, this is dangerous because a mistaken prompt, tool misuse, or prompt injection could trigger irreversible data loss in a production graph.

Missing User Warnings

Medium
Confidence
84% confidence
Finding
The OBS delete operation permanently removes remote objects with no user disclosure, confirmation, or safety controls. In a tool-using agent environment, this creates a meaningful risk of accidental or induced deletion of backups, exports, or other stored data.

Ssd 3

Medium
Confidence
87% confidence
Finding
The examples explicitly encourage persisting user conversation content as graph 'Memory' records. Storing conversational content in an external graph database can create unnecessary retention of potentially sensitive or personal data, especially when no consent, minimization, encryption, or retention controls are described.

Credential Access

High
Category
Privilege Escalation
Content
edge_path="obs://bucket/edge"
)

# Export graph data (access_key/secret_key are read from .env automatically)
job_id = skill.client.export_graph(
    export_path="obs://bucket/export",
    vertex_set_name="set_vertex",
Confidence
90% confidence
Finding
The documentation normalizes automatic reading of access keys and secret keys from `.env`, which promotes credential use from local files during export operations. In an execution-capable skill with file-read and network access, this increases the risk of credential exposure, misuse, or unintended use of high-privilege cloud accounts for data movement.

Credential Access

High
Category
Privilege Escalation
Content
class EnvConfig:
    """环境配置管理 - 支持环境变量和配置文件读取"""

    ENV_DIR = os.path.join(SKILL_DIR, '.env')

    ENV_VAR_MAPPING = {
        'GES_GRAPH_IP': 'graph_ip',
Confidence
88% confidence
Finding
The skill loads credentials from a local .env CSV file inside the skill directory, which encourages long-lived secrets to be stored on disk in a predictable location. In shared agent/workspace environments, this increases the risk of credential exposure, accidental commit, local disclosure, or misuse by other components with filesystem access.

Unsafe Defaults

Medium
Category
Tool Misuse
Content
}
            }

        resp = requests.post(url, headers=headers, json=data, timeout=30, verify=False)

        if resp.status_code not in [200, 201]:
            raise Exception(f"密码获取Token失败: {resp.status_code}, {resp.text[:200]}")
Confidence
99% confidence
Finding
Disabling TLS certificate verification during password-based token retrieval allows man-in-the-middle interception or tampering of authentication traffic. Because this request carries credentials and receives an auth token, an attacker on the network path could steal secrets or return malicious responses.

Unsafe Defaults

Medium
Category
Tool Misuse
Content
'X-Identity-Sign': authorization_header
        }

        resp = requests.post(url, data=Body, headers=headers, timeout=30, verify=False)

        if resp.status_code not in [200, 201]:
            raise Exception(f"AKSK获取Token失败: {resp.status_code}, {resp.text[:200]}")
Confidence
98% confidence
Finding
The AK/SK token acquisition request also disables TLS verification, exposing signed authentication traffic and the returned token to interception or tampering by a network attacker. Even if the secret key is not sent directly, the integrity and confidentiality of the authentication exchange are still compromised.

Unsafe Defaults

Medium
Category
Tool Misuse
Content
url=url,
            headers=request_headers,
            data=body,
            verify=False
        )

        if response.status_code >= 400:
Confidence
98% confidence
Finding
OBS requests are made with TLS verification disabled, which undermines the confidentiality and integrity of file uploads, downloads, listings, and deletions. An attacker could intercept data in transit, tamper with objects, or spoof the storage endpoint.

Unsafe Defaults

Medium
Category
Tool Misuse
Content
url = f"{self.base_url}{path}"
        headers = self._get_headers()

        resp = requests.request(method, url, headers=headers, **kwargs, verify=False)

        if resp.status_code >= 400:
            raise Exception(f"API请求失败 [{resp.status_code}]: {resp.text}")
Confidence
99% confidence
Finding
All GES API requests disable TLS verification, making graph queries, mutations, tokens, and returned data vulnerable to interception and modification. In this skill context, that is especially dangerous because the client performs administrative and destructive graph operations against a remote service.

Static analysis

Detected: suspicious.insecure_tls_verification

HTTPS certificate verification is disabled.

Warn
Code
suspicious.insecure_tls_verification
Location
scripts/ges_graph_skill.js:603

HTTPS certificate verification is disabled.

Warn
Code
suspicious.insecure_tls_verification
Location
scripts/ges_graph_skill.py:179