Back to skill

Security audit

Alibaba Cloud Media VOD

Security checks for vulnerabilities and agentic risk

Overview

The skill is coherent for Alibaba Cloud VOD management, but it gives agents high-impact cloud media authority and asks them to save sensitive operation evidence without enough deletion-confirmation or redaction guidance.

Install only if you are comfortable giving the agent access to an Alibaba Cloud identity scoped for the exact VOD task. Use least-privilege RAM or STS credentials, require explicit confirmation before DeleteVideo or other destructive changes, and redact or delete saved evidence that contains upload authorization, playback authorization, signed URLs, tokens, or sensitive media identifiers.

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

Warning
Location
references/templates.md:43
Finding
Unredacted Persistence of Authorization-Bearing API Responses<![CDATA[ ## Vulnerability Details **File Location**: `references/templates.md:43` **Vulnerability Type**: Plaintext storage of potentially sensitive API responses **Risk Level**: Medium ### Vulnerable Code Snippet ```markdown ## 5) Delete media assets - API: `DeleteVideo` - Required params template: - `VideoIds`: `<video-id-1,video-id-2>` ## Evidence Checklist - Save request payloads and API responses under `output/aliyun-vod-manage/`. - Keep a mapping of input file names to returned media IDs. ``` The affected instruction is: ```markdown - Save request payloads and API responses under `output/aliyun-vod-manage/`. ``` ### Technical Analysis The evidence policy instructs the agent to persist complete request payloads and API responses without requiring secret-field redaction, restrictive file permissions, encryption, or retention limits. This workflow explicitly includes authorization-producing operations such as `CreateUploadVideo` and `GetVideoPlayAuth` in `references/templates.md:5-25`. Responses from these operations may contain temporary upload credentials, upload authorization data, playback authorization material, or signed resource information. Persisting complete responses can therefore place reusable authorization data in plaintext under the output directory. The risk is not caused by the metadata-download script, which only retrieves public OpenAPI metadata and does not access credentials. It arises when the broader Skill workflow applies the evidence instruction to authenticated VOD operations. ### Attack Path 1. A user invokes the Skill for an operation such as `CreateUploadVideo` or `GetVideoPlayAuth`. 2. Alibaba Cloud returns temporary upload or playback authorization material. 3. Following the evidence checklist, the agent saves the complete API response under `output/aliyun-vod-manage/`. 4. The generated file inherits default filesystem permissions and remains available without a defined deletion period. 5. Another local user, a ...[truncated 953 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Replace the blanket response-retention instruction with an allowlist-based evidence policy. 2. Never persist fields containing upload authorization, playback authorization, security tokens, signatures, cookies, AccessKey secrets, or signed URLs. 3. Store only non-sensitive evidence such as request IDs, API names, timestamps, region identifiers, operation status, and redacted resource identifiers. 4. Add operation-specific redaction for responses from `CreateUploadVideo`, `CreateUploadImage`, `GetVideoPlayAuth`, and similar authorization-producing APIs. 5. Create evidence files with owner-only permissions, such as mode `0600`, and create the output directory with mode `0700`. 6. Define a short retention period and securely delete authorization-bearing evidence after troubleshooting or validation is complete. 7. Prevent generated evidence from entering source control, CI artifacts, shared logs, or backups unless it has passed an explicit secret scan. 8. Continue delegating credential resolution to official Alibaba Cloud SDK credential providers rather than directly parsing `~/.alibabacloud/credentials`. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Rogue AgentSelf-Modification, Session Persistence
  • Taint TrackingDirect Taint Flow, Variable-Mediated Taint Flow, Credential Exfiltration Chain
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
Findings (11)

Tainted flow: 'timeout' from os.getenv (line 30, credential/environment) → urllib.request.urlopen (network output)

Critical
Category
Data Flow
Content
def fetch_json(url: str, timeout: int) -> dict:
    req = urllib.request.Request(url, headers={"User-Agent": "codex-skill"})
    with urllib.request.urlopen(req, timeout=timeout) as resp:
        return json.loads(resp.read().decode("utf-8"))
Confidence
90% confidence
Finding
Credentials or environment variables flow to a network sink. This is a high-confidence indicator of credential exfiltration.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding
The declared purpose says the skill manages VOD resources and workflows, but the described executable behavior primarily performs API metadata discovery, external fetches, and local artifact generation rather than actual VOD operations. This mismatch can mislead users and higher-level agents about what the skill will do and what data it may access or transmit, undermining informed consent and safe orchestration.

Lp3

Medium
Category
MCP Least Privilege
Confidence
90% confidence
Finding
The skill uses capabilities with security implications—environment credential access, outbound network access, and local file writes—without declaring an explicit tool scope or permission boundary. This makes the operational trust model unclear and can enable broader-than-expected access when the skill is invoked, especially because it handles cloud credentials and writes execution artifacts.

Session Persistence

Medium
Category
Rogue Agent
Content
## Validation

```bash
mkdir -p output/aliyun-vod-manage
python -m py_compile skills/media/vod/aliyun-vod-manage/scripts/list_openapi_meta_apis.py
echo "py_compile_ok" > output/aliyun-vod-manage/validate.txt
```
Confidence
60% confidence
Finding
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.

Missing User Warnings

Medium
Confidence
93% confidence
Finding
The skill explicitly instructs operators to preserve region, media IDs, template IDs, and request parameters in evidence files, but provides no minimization, masking, retention, or privacy guidance. Those artifacts can contain sensitive operational metadata, identifiers, and request details that may expose customer assets or facilitate later abuse if logs are shared or retained insecurely.

Missing User Warnings

Medium
Confidence
93% confidence
Finding
The template documents a permanent delete operation (`DeleteVideo`) with only raw parameter guidance and no warning, confirmation step, or mention of irreversibility. In an agent skill context, this increases the chance that an operator or autonomous workflow will execute destructive actions without adequate user intent verification, leading to accidental media loss.

External Transmission

Medium
Category
Data Exfiltration
Content
output_dir.mkdir(parents=True, exist_ok=True)

    url = (
        f"https://api.aliyun.com/meta/v1/products/{args.product_code}"
        f"/versions/{args.version}/api-docs.json"
    )
    payload = fetch_json(url, timeout)
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
output_dir.mkdir(parents=True, exist_ok=True)

    url = (
        f"https://api.aliyun.com/meta/v1/products/{args.product_code}"
        f"/versions/{args.version}/api-docs.json"
    )
    payload = fetch_json(url, timeout)
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
output_dir.mkdir(parents=True, exist_ok=True)

    url = (
        f"https://api.aliyun.com/meta/v1/products/{args.product_code}"
        f"/versions/{args.version}/api-docs.json"
    )
    payload = fetch_json(url, timeout)
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
output_dir.mkdir(parents=True, exist_ok=True)

    url = (
        f"https://api.aliyun.com/meta/v1/products/{args.product_code}"
        f"/versions/{args.version}/api-docs.json"
    )
    payload = fetch_json(url, timeout)
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
output_dir.mkdir(parents=True, exist_ok=True)

    url = (
        f"https://api.aliyun.com/meta/v1/products/{args.product_code}"
        f"/versions/{args.version}/api-docs.json"
    )
    payload = fetch_json(url, timeout)
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Static analysis

No suspicious patterns detected.