Back to skill

Security audit

huawei-cloud-cce-cluster-management

Security checks across malware telemetry and agentic risk

Overview

This appears to be a real Huawei Cloud CCE management skill, but it needs review because it can make high-impact cloud changes and its credential-handling guarantees do not fully match the implementation.

Install only if you are comfortable giving the skill authority over real Huawei Cloud CCE infrastructure. Use least-privilege or temporary credentials, avoid broad CCE Administrator credentials when possible, verify remote installers before running them, treat returned kubeconfig as a secret, and manually review any operation that creates public EIPs, changes node scheduling, deletes resources, or changes production capacity.

SkillSpector

By NVIDIA
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (52)

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding
The description claims a full-featured Huawei Cloud CCE management skill with extensive operational capabilities. However, the supplied code chunk is only an empty package initializer containing a docstring and no functional code. This is a material mismatch because the declared primary purpose and capabilities are not represented in the provided implementation.

Ae1

High
Category
analysis-evasion
Content
See [verification-method.md](references/verification-method.md) for detailed verification steps. Quick checklist:
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Ae1

High
Category
analysis-evasion
Content
See [verification-method.md](references/verification-method.md) for detailed verification steps. Quick checklist:
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Credential Access

High
Category
Privilege Escalation
Content
> **⚠️ Cost Warning:**
> - **Bind EIP** (5.1, 5.2): EIP incurs bandwidth charges. If auto-creating (5.2), inform the user that a new EIP with traffic billing (5 Mbps) will be created.

## 6. Kubeconfig Retrieval

| # | Acceptance Item | Verification Method | Expected Result |
|---|-----------------|---------------------|-----------------|
Confidence
87% confidence
Finding
The section introduces kubeconfig retrieval as a supported capability in a production cluster-management skill. While credential retrieval is expected in this context, kubeconfig is effectively an access credential; if exposed to an unauthorized user or logged insecurely, it can enable full cluster compromise depending on RBAC permissions.

Credential Access

High
Category
Privilege Escalation
Content
> **⚠️ Cost Warning:**
> - **Bind EIP** (5.1, 5.2): EIP incurs bandwidth charges. If auto-creating (5.2), inform the user that a new EIP with traffic billing (5 Mbps) will be created.

## 6. Kubeconfig Retrieval

| # | Acceptance Item | Verification Method | Expected Result |
|---|-----------------|---------------------|-----------------|
Confidence
87% confidence
Finding
The section introduces kubeconfig retrieval as a supported capability in a production cluster-management skill. While credential retrieval is expected in this context, kubeconfig is effectively an access credential; if exposed to an unauthorized user or logged insecurely, it can enable full cluster compromise depending on RBAC permissions.

External Script Fetching

High
Category
Supply Chain
Content
```bash
# hcloud (KooCLI 7.2+) — Huawei Cloud API calls
curl -sSL https://cn-north-4-hdn-koocli.obs.cn-north-4.myhuaweicloud.com/cli/latest/hcloud_install.sh -o ./hcloud_install.sh && bash ./hcloud_install.sh

# kubectl cce — Kubernetes node operations (cordon/uncordon/drain/status)
#   install per https://kubernetes.io/docs/tasks/tools/
Confidence
98% confidence
Finding
The documentation recommends downloading a remote shell script and executing it immediately with bash, which is a classic supply-chain risk. If the hosting location, network path, or script contents are compromised, users can execute attacker-controlled code on their systems.

External Script Fetching

High
Category
Supply Chain
Content
```bash
# hcloud (KooCLI 7.2+) — Huawei Cloud API calls
curl -sSL https://cn-north-4-hdn-koocli.obs.cn-north-4.myhuaweicloud.com/cli/latest/hcloud_install.sh -o ./hcloud_install.sh && bash ./hcloud_install.sh

# kubectl cce — Kubernetes node operations (cordon/uncordon/drain/status)
#   install per https://kubernetes.io/docs/tasks/tools/
Confidence
98% confidence
Finding
The documentation recommends downloading a remote shell script and executing it immediately with bash, which is a classic supply-chain risk. If the hosting location, network path, or script contents are compromised, users can execute attacker-controlled code on their systems.

External Script Fetching

High
Category
Supply Chain
Content
```bash
# hcloud (KooCLI 7.2+) — Huawei Cloud API calls
curl -sSL https://cn-north-4-hdn-koocli.obs.cn-north-4.myhuaweicloud.com/cli/latest/hcloud_install.sh -o ./hcloud_install.sh && bash ./hcloud_install.sh

# kubectl cce — Kubernetes node operations (cordon/uncordon/drain/status)
#   install per https://kubernetes.io/docs/tasks/tools/
Confidence
98% confidence
Finding
The documentation recommends downloading a remote shell script and executing it immediately with bash, which is a classic supply-chain risk. If the hosting location, network path, or script contents are compromised, users can execute attacker-controlled code on their systems.

Env Variable Harvesting

High
Category
Data Exfiltration
Content
# Pass credentials via environment — only set if not already present
    # (if HW_ACCESS_KEY is already in os.environ, subprocess inherits it naturally)
    env = dict(os.environ)
    if not env.get("HW_ACCESS_KEY"):
        env["HW_ACCESS_KEY"] = ctx.ak
    if not env.get("HW_SECRET_KEY"):
Confidence
93% confidence
Finding
Copying the entire parent environment into a child process handling cloud credentials is an overbroad propagation of secrets and runtime context. In a privileged infrastructure-management skill, this can expose unrelated tokens, API keys, proxy credentials, or CI secrets to the `kubectl cce` plugin and any subprocesses it spawns.

Credential Access

High
Category
Privilege Escalation
Content
return result


def get_cce_kubeconfig(params: Dict[str, str]) -> Dict[str, Any]:
    """Get cluster kubeconfig via CreateKubernetesClusterCert.

    The API requires duration (integer days, 1-1827) or expire_at.
Confidence
97% confidence
Finding
This function is a credential-access path: it calls CreateKubernetesClusterCert and returns the resulting kubeconfig to the caller. A kubeconfig commonly contains client certificates or tokens sufficient to administer the cluster, so unauthorized access, accidental disclosure, or logging of this response can lead to full Kubernetes control.

Credential Access

High
Category
Privilege Escalation
Content
return result


def get_cce_kubeconfig(params: Dict[str, str]) -> Dict[str, Any]:
    """Get cluster kubeconfig via CreateKubernetesClusterCert.

    The API requires duration (integer days, 1-1827) or expire_at.
Confidence
97% confidence
Finding
This function is a credential-access path: it calls CreateKubernetesClusterCert and returns the resulting kubeconfig to the caller. A kubeconfig commonly contains client certificates or tokens sufficient to administer the cluster, so unauthorized access, accidental disclosure, or logging of this response can lead to full Kubernetes control.

Credential Access

High
Category
Privilege Escalation
Content
return result


def get_cce_kubeconfig(params: Dict[str, str]) -> Dict[str, Any]:
    """Get cluster kubeconfig via CreateKubernetesClusterCert.

    The API requires duration (integer days, 1-1827) or expire_at.
Confidence
97% confidence
Finding
This function is a credential-access path: it calls CreateKubernetesClusterCert and returns the resulting kubeconfig to the caller. A kubeconfig commonly contains client certificates or tokens sufficient to administer the cluster, so unauthorized access, accidental disclosure, or logging of this response can lead to full Kubernetes control.

Credential Access

High
Category
Privilege Escalation
Content
return result


def get_cce_kubeconfig(params: Dict[str, str]) -> Dict[str, Any]:
    """Get cluster kubeconfig via CreateKubernetesClusterCert.

    The API requires duration (integer days, 1-1827) or expire_at.
Confidence
97% confidence
Finding
This function is a credential-access path: it calls CreateKubernetesClusterCert and returns the resulting kubeconfig to the caller. A kubeconfig commonly contains client certificates or tokens sufficient to administer the cluster, so unauthorized access, accidental disclosure, or logging of this response can lead to full Kubernetes control.

Credential Access

High
Category
Privilege Escalation
Content
return result


def get_cce_kubeconfig(params: Dict[str, str]) -> Dict[str, Any]:
    """Get cluster kubeconfig via CreateKubernetesClusterCert.

    The API requires duration (integer days, 1-1827) or expire_at.
Confidence
97% confidence
Finding
This function is a credential-access path: it calls CreateKubernetesClusterCert and returns the resulting kubeconfig to the caller. A kubeconfig commonly contains client certificates or tokens sufficient to administer the cluster, so unauthorized access, accidental disclosure, or logging of this response can lead to full Kubernetes control.

Credential Access

High
Category
Privilege Escalation
Content
return result


def get_cce_kubeconfig(params: Dict[str, str]) -> Dict[str, Any]:
    """Get cluster kubeconfig via CreateKubernetesClusterCert.

    The API requires duration (integer days, 1-1827) or expire_at.
Confidence
97% confidence
Finding
This function is a credential-access path: it calls CreateKubernetesClusterCert and returns the resulting kubeconfig to the caller. A kubeconfig commonly contains client certificates or tokens sufficient to administer the cluster, so unauthorized access, accidental disclosure, or logging of this response can lead to full Kubernetes control.

Credential Access

High
Category
Privilege Escalation
Content
return result


def get_cce_kubeconfig(params: Dict[str, str]) -> Dict[str, Any]:
    """Get cluster kubeconfig via CreateKubernetesClusterCert.

    The API requires duration (integer days, 1-1827) or expire_at.
Confidence
97% confidence
Finding
This function is a credential-access path: it calls CreateKubernetesClusterCert and returns the resulting kubeconfig to the caller. A kubeconfig commonly contains client certificates or tokens sufficient to administer the cluster, so unauthorized access, accidental disclosure, or logging of this response can lead to full Kubernetes control.

Credential Access

High
Category
Privilege Escalation
Content
return result


def get_cce_kubeconfig(params: Dict[str, str]) -> Dict[str, Any]:
    """Get cluster kubeconfig via CreateKubernetesClusterCert.

    The API requires duration (integer days, 1-1827) or expire_at.
Confidence
97% confidence
Finding
This function is a credential-access path: it calls CreateKubernetesClusterCert and returns the resulting kubeconfig to the caller. A kubeconfig commonly contains client certificates or tokens sufficient to administer the cluster, so unauthorized access, accidental disclosure, or logging of this response can lead to full Kubernetes control.

Credential Access

High
Category
Privilege Escalation
Content
return result


def get_cce_kubeconfig(params: Dict[str, str]) -> Dict[str, Any]:
    """Get cluster kubeconfig via CreateKubernetesClusterCert.

    The API requires duration (integer days, 1-1827) or expire_at.
Confidence
97% confidence
Finding
This function is a credential-access path: it calls CreateKubernetesClusterCert and returns the resulting kubeconfig to the caller. A kubeconfig commonly contains client certificates or tokens sufficient to administer the cluster, so unauthorized access, accidental disclosure, or logging of this response can lead to full Kubernetes control.

Credential Access

High
Category
Privilege Escalation
Content
return result


def get_cce_kubeconfig(params: Dict[str, str]) -> Dict[str, Any]:
    """Get cluster kubeconfig via CreateKubernetesClusterCert.

    The API requires duration (integer days, 1-1827) or expire_at.
Confidence
97% confidence
Finding
This function is a credential-access path: it calls CreateKubernetesClusterCert and returns the resulting kubeconfig to the caller. A kubeconfig commonly contains client certificates or tokens sufficient to administer the cluster, so unauthorized access, accidental disclosure, or logging of this response can lead to full Kubernetes control.

Credential Access

High
Category
Privilege Escalation
Content
return result


def get_cce_kubeconfig(params: Dict[str, str]) -> Dict[str, Any]:
    """Get cluster kubeconfig via CreateKubernetesClusterCert.

    The API requires duration (integer days, 1-1827) or expire_at.
Confidence
97% confidence
Finding
This function is a credential-access path: it calls CreateKubernetesClusterCert and returns the resulting kubeconfig to the caller. A kubeconfig commonly contains client certificates or tokens sufficient to administer the cluster, so unauthorized access, accidental disclosure, or logging of this response can lead to full Kubernetes control.

Credential Access

High
Category
Privilege Escalation
Content
return result


def get_cce_kubeconfig(params: Dict[str, str]) -> Dict[str, Any]:
    """Get cluster kubeconfig via CreateKubernetesClusterCert.

    The API requires duration (integer days, 1-1827) or expire_at.
Confidence
97% confidence
Finding
This function is a credential-access path: it calls CreateKubernetesClusterCert and returns the resulting kubeconfig to the caller. A kubeconfig commonly contains client certificates or tokens sufficient to administer the cluster, so unauthorized access, accidental disclosure, or logging of this response can lead to full Kubernetes control.

Credential Access

High
Category
Privilege Escalation
Content
return result


def get_cce_kubeconfig(params: Dict[str, str]) -> Dict[str, Any]:
    """Get cluster kubeconfig via CreateKubernetesClusterCert.

    The API requires duration (integer days, 1-1827) or expire_at.
Confidence
97% confidence
Finding
This function is a credential-access path: it calls CreateKubernetesClusterCert and returns the resulting kubeconfig to the caller. A kubeconfig commonly contains client certificates or tokens sufficient to administer the cluster, so unauthorized access, accidental disclosure, or logging of this response can lead to full Kubernetes control.

Credential Access

High
Category
Privilege Escalation
Content
return result


def get_cce_kubeconfig(params: Dict[str, str]) -> Dict[str, Any]:
    """Get cluster kubeconfig via CreateKubernetesClusterCert.

    The API requires duration (integer days, 1-1827) or expire_at.
Confidence
97% confidence
Finding
This function is a credential-access path: it calls CreateKubernetesClusterCert and returns the resulting kubeconfig to the caller. A kubeconfig commonly contains client certificates or tokens sufficient to administer the cluster, so unauthorized access, accidental disclosure, or logging of this response can lead to full Kubernetes control.

Credential Access

High
Category
Privilege Escalation
Content
return result


def get_cce_kubeconfig(params: Dict[str, str]) -> Dict[str, Any]:
    """Get cluster kubeconfig via CreateKubernetesClusterCert.

    The API requires duration (integer days, 1-1827) or expire_at.
Confidence
97% confidence
Finding
This function is a credential-access path: it calls CreateKubernetesClusterCert and returns the resulting kubeconfig to the caller. A kubeconfig commonly contains client certificates or tokens sufficient to administer the cluster, so unauthorized access, accidental disclosure, or logging of this response can lead to full Kubernetes control.

Credential Access

High
Category
Privilege Escalation
Content
return result


def get_cce_kubeconfig(params: Dict[str, str]) -> Dict[str, Any]:
    """Get cluster kubeconfig via CreateKubernetesClusterCert.

    The API requires duration (integer days, 1-1827) or expire_at.
Confidence
97% confidence
Finding
This function is a credential-access path: it calls CreateKubernetesClusterCert and returns the resulting kubeconfig to the caller. A kubeconfig commonly contains client certificates or tokens sufficient to administer the cluster, so unauthorized access, accidental disclosure, or logging of this response can lead to full Kubernetes control.

VirusTotal

VirusTotal findings are pending for this skill version.

View on VirusTotal

Static analysis

No suspicious patterns detected.