Back to skill

Security audit

huawei-cloud-mrs-list

Security checks for vulnerabilities and agentic risk

Overview

Review before installing: command overrides exceed the advertised read-only scope, and the installer source needs verification.

Prefer a version that removes or restricts the command overrides and corrects the installation guide. If using this version, leave both MRS_LIST_HCLOUD_* overrides unset, use a trusted KooCLI executable, and configure a dedicated read-only cloud identity outside chat. Obtain KooCLI through Huawei's official instructions and verify its checksum. Cluster details appear in agent output. The review found concrete scope weaknesses, without evidence of malicious intent.

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
  • Behavioral ASTexec() Call, eval() Call, Dynamic Import
  • Taint TrackingDirect Taint Flow, Variable-Mediated Taint Flow, Credential Exfiltration Chain
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (5)

Skill declares no tool scope ('permissions' or 'allowed-tools') but code capabilities were detected: env, shell.

Medium
Category
MCP Least Privilege
Confidence
70% confidence
Finding

Without declared permissions the skill's intent is opaque and cannot be validated.

Content

No source excerpt is available for this finding.

Environment overrides bypass the promised read-only execution guard.

Medium
Category
Excessive Agency
Confidence
98% confidence
Finding

The read-only guard checks user arguments and the requested operation, but the actual executable and prefixed arguments come from unchecked environment variables. Consequently, an attacker able to influence that environment can replace the intended ListClusters execution entirely, potentially performing writes or accessing credentials despite the advertised guard; actual cloud-write impact depends on the effective IAM permissions.

Content

No source excerpt is available for this finding.

subprocess module call

Medium
Category
Dangerous Code Execution
Confidence
70% confidence
Finding

subprocess module calls execute external commands. Without careful input validation, this enables command injection.

Content

Scanner excerpt · scripts/list_mrs.py (reported line 184)May include surrounding context.

python
cmd.extend(extra)
    cmd.extend(argv)
    try:
        proc = subprocess.run(
            cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE,
            timeout=120, universal_newlines=True,
        )

Tainted flow: 'cmd' from os.environ.get (line 178, credential/environment) → subprocess.run (code execution)

Medium
Category
Data Flow
Confidence
90% confidence
Finding

MRS_LIST_HCLOUD_BIN selects an arbitrary executable, and MRS_LIST_HCLOUD_ARGS supplies arguments before the fixed MRS command without validation. If an attacker can influence the inherited environment across a trust boundary, they can select an interpreter or other program and execute code with the agent's privileges and inherited credentials; this is executable/argument injection, not shell interpolation, and ordinary filter inputs alone do not provide that control.

Content

Scanner excerpt · scripts/list_mrs.py (reported line 184)May include surrounding context.

python
cmd.extend(extra)
    cmd.extend(argv)
    try:
        proc = subprocess.run(
            cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE,
            timeout=120, universal_newlines=True,
        )

The write-intent guard rejects the explicitly supported terminated-state filter.

Medium
Category
Excessive Agency
Confidence
100% confidence
Finding

The manifest explicitly supports filtering terminated clusters, and L336 advertises the same capability. However, --cluster-state terminated is rejected because L347 scans all argument values and the substring matcher at L136-L138 matches the keyword terminate from L057, treating a read-only state filter as a mutation.

Content

No source excerpt is available for this finding.