T03 · Remote Payload Retrieval and Execution
- Location
references/cli-installation-guide.md:11- Finding
Unverified Remote Payloads Are Downloaded and Executed
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill is mostly a coherent Alibaba Cloud APM troubleshooting helper, but its setup and data-handling guidance creates avoidable risk around cloud credentials, unpinned executable updates, and persisted sensitive diagnostic data.
Review this skill before installing if you will run it on a machine with Alibaba Cloud credentials. Prefer OAuth or managed roles, do not paste access-key secrets into chat or shell history, avoid auto-updating unpinned plugins, and store generated APM reports only in a private directory because they may contain user, device, IP, log, and crash details.
references/cli-installation-guide.md:11Unverified Remote Payloads Are Downloaded and Executed
SKILL.md:52Automatic Installation and Updating of an Unpinned CLI Plugin
references/cli-installation-guide.md:74Cloud Credentials Are Recommended in Plaintext Command-Line Arguments
scripts/dig_issue.sh:101Sensitive APM Sample Data Is Persisted Without Explicit Access Controls
The cleanup step instructs running rm -rf ./emas-apm-dig-*, which performs irreversible recursive deletion based on a glob in the current working directory. Although scoped to a prefix and marked optional, it still relies on cwd semantics and can delete unintended directories or files if the user is in the wrong location or if similarly named paths exist.
aliyun configure ai-mode disable
rm -rf ./emas-apm-dig-*
## 10. Best Practices
This JSON manifest defines user-facing filter names and option labels entirely in Chinese, such as "异常类型", "设备ID", and status values like "未处理". Because the file does not indicate that this skill is region-specific or offer a language choice, it appears to impose a specific locale on all users, which matches the language/locale policy violation criteria.
This JSON defines user-facing natural-language labels such as "应用版本", "设备ID", and many others entirely in Chinese, but the file provides no opt-in, alternative locale, or documentation that the skill is intentionally China-specific. Under the policy, forcing a specific language without user choice or clear regional justification is a natural-language policy violation.
This JSON manifest contains user-facing filter names and option labels entirely in Chinese, such as "异常类型", "是否自定义", and status values like "未处理". Because the file provides no indication that the skill is intentionally region-specific or that users can opt into a language/locale, it appears to force a specific language in a way that may violate locale-choice policy.
This JSON manifest contains many user-facing names such as "应用版本", "设备ID", and status labels in Chinese, but provides no alternate locale values or opt-in mechanism. Under the policy, forcing a specific language without user choice is a natural-language locale violation unless the locale restriction is clearly documented and justified.
This JSON manifest contains many user-facing filter names and option labels entirely in Chinese, such as "应用版本", "设备ID", and status values like "未处理". Because the file does not provide any alternate locale values, opt-in mechanism, or documentation that this is a China-specific/Chinese-only deployment, it appears to force a specific language without user choice.
This JSON manifest contains user-facing natural-language labels entirely in Chinese, such as filter names and option names, but provides no indication that the skill is China-specific or that users can opt into a locale. That creates a language/locale policy concern because the skill appears to force a specific language in its interface strings without documented justification.
The manifest says the skill covers only four read-only OpenAPIs: get-issues, get-issue, get-errors, and get-error. This file explicitly treats additional commands such as get-activity-event and get-activity-events as part of the expected subcommand set, which broadens the documented behavior beyond the manifest's stated scope.
These instructions require global CLI state changes (aliyun configure ai-mode enable/disable and set-user-agent) that are outside the declared read-only troubleshooting scope. Even though not directly credential-stealing, mutating client configuration creates hidden side effects, can affect other sessions or tools on the same environment, and expands the skill from passive querying into environment reconfiguration.
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.
## Detection order
1. First determine which project type the user currently has open (or has provided): existence of `build.gradle` / `AndroidManifest.xml` -> Android; `*.xcodeproj` / `Info.plist` -> iOS; `module.json5` + `ets/` -> HarmonyOS; `pubspec.yaml` -> Flutter; `Assets/` + `ProjectSettings/` + `*.cs` -> Unity; `package.json` plus an H5 SDK -> H5.
2. Run the grep / AST rules from the matching platform section.
3. Exactly one hit -> echo and ask the user to confirm; multiple hits -> list all candidates; zero hits -> ask the user proactively.
4. Flutter / Unity cross-platform apps usually ship **AppKeys for both Android and iOS**; the user must additionally pick which side this query targets.
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.
## Detection order
1. First determine which project type the user currently has open (or has provided): existence of `build.gradle` / `AndroidManifest.xml` -> Android; `*.xcodeproj` / `Info.plist` -> iOS; `module.json5` + `ets/` -> HarmonyOS; `pubspec.yaml` -> Flutter; `Assets/` + `ProjectSettings/` + `*.cs` -> Unity; `package.json` plus an H5 SDK -> H5.
2. Run the grep / AST rules from the matching platform section.
3. Exactly one hit -> echo and ask the user to confirm; multiple hits -> list all candidates; zero hits -> ask the user proactively.
4. Flutter / Unity cross-platform apps usually ship **AppKeys for both Android and iOS**; the user must additionally pick which side this query targets.
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.
## Detection order
1. First determine which project type the user currently has open (or has provided): existence of `build.gradle` / `AndroidManifest.xml` -> Android; `*.xcodeproj` / `Info.plist` -> iOS; `module.json5` + `ets/` -> HarmonyOS; `pubspec.yaml` -> Flutter; `Assets/` + `ProjectSettings/` + `*.cs` -> Unity; `package.json` plus an H5 SDK -> H5.
2. Run the grep / AST rules from the matching platform section.
3. Exactly one hit -> echo and ask the user to confirm; multiple hits -> list all candidates; zero hits -> ask the user proactively.
4. Flutter / Unity cross-platform apps usually ship **AppKeys for both Android and iOS**; the user must additionally pick which side this query targets.
The manifest explicitly states that client coverage is native Android/iOS/HarmonyOS, Flutter, and Unity, and that H5 is out of scope. However, the detection order instructs the skill to identify H5 projects as a first-class project type, which expands behavior beyond the declared scope.
This section provides concrete H5 SDK patterns and grep rules for extracting H5 app keys from JavaScript/TypeScript/HTML projects. That operational guidance goes beyond the manifest's stated scope, which excludes H5 support.
This markdown file enumerates filter fields such as clientIp, userNick, userId, and device identifiers across multiple biz-modules and platforms, but does not include any warning that these fields may contain personal or sensitive data. For markdown files, SQP-2 applies when the skill description omits warnings about behaviors that could affect user data or privacy; here the reference encourages use of such fields without any disclosure or handling guidance.
The guide instructs users to execute a remote installer script directly via curl piped to Bash. This prevents inspection of the script before execution and creates a supply-chain risk: if the hosting endpoint, CDN, DNS, or transport chain is compromised, arbitrary code would run immediately on the user's machine.
Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.
x86_64
wget --connect-timeout=10 --read-timeout=120 --tries=3 -qO- https://aliyuncli.alicdn.com/aliyun-cli-linux-latest-amd64.tgz | tar xz
sudo mv aliyun /usr/local/bin/
ARM64
Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.
x86_64
wget --connect-timeout=10 --read-timeout=120 --tries=3 -qO- https://aliyuncli.alicdn.com/aliyun-cli-linux-latest-amd64.tgz | tar xz
sudo mv aliyun /usr/local/bin/
ARM64
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.
1. Log in to Aliyun Console: https://ram.console.aliyun.com/
2. Navigate to: AccessKey Management
3. Create a new AccessKey pair
4. Save the secret immediately — it's only shown once
### Configuration Modes
Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.
# Restrict permissions
chmod 600 ~/.aliyun/config.json
The documentation explicitly describes retrieving complete crash sample details that include sensitive identifiers and telemetry such as ClientIp, UserId, UserNick, device attributes, logs, and memory snapshots, yet provides no privacy, minimization, redaction, or retention guidance. In a troubleshooting skill, this omission can lead operators to collect and handle personal or sensitive diagnostic data in unsafe ways, increasing the risk of accidental exposure or policy noncompliance.
The example directs users to write the full GetError response to /tmp, which commonly has broad local visibility and weak lifecycle guarantees, while the payload may contain logs, identifiers, crash reports, and memory-related data. This creates a practical risk of sensitive crash data being exposed to other local users, backup/indexing processes, or left behind after troubleshooting.
The documentation explicitly surfaces and recommends passing plaintext device identifiers (Did) in CLI queries and follow-up API usage, but does not include a privacy or data-handling warning. Device identifiers are sensitive telemetry data that can enable device-level tracking, correlation across events, and accidental disclosure through logs, shell history, screenshots, or copied troubleshooting output.
The examples write aggregated issue data and full sample details to predictable files under /tmp without warning that these outputs can contain sensitive diagnostic information, including stack traces and per-sample identifiers. On multi-user systems or in shared/containerized environments, temporary files may be accessible to other processes, retained longer than expected, or later exfiltrated via backups, support bundles, or agent tooling.
The documentation explicitly recommends using --log-level DEBUG and notes it includes the HTTP body, but it does not warn that APM requests and responses may contain sensitive diagnostic content such as stack traces, device identifiers, UUIDs, UTDIDs, app metadata, and other sample details. In an agent-assisted troubleshooting workflow, debug logs are likely to be persisted to terminals, CI logs, chat transcripts, or observability systems, creating an avoidable data exposure risk.