T03 · Remote Payload Retrieval and Execution
- Location
agent/AGENTS.md:21- Finding
Automatic Retrieval and Execution of an Unpinned Remote Installer
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This deprecated installer contains powerful update, install, and agent-registration workflows that can change local agent state without clear approval gates.
Review this package carefully before installing. It should not be used in an environment where an agent may run update/install commands automatically; require explicit approval for package updates, script execution, destination paths, and agent registration, and use only a local trusted Futu OpenD endpoint unless transport security is fixed.
agent/AGENTS.md:21Automatic Retrieval and Execution of an Unpinned Remote Installer
agent/AGENTS.md:21Non-Interactive Registration of a Remotely Updated Agent Workspace
scripts/install.sh:49Workspace Path Traversal and Destructive Destination Replacement
agent/invest_agent/integrations/futu/futu_adapter.py:32Broker API Transport Encryption Explicitly Disabled for Configurable Hosts
A package presented as deprecated but capable of installing files, creating backups, modifying directories, and invoking external tooling is highly dangerous because it can change the local environment while evading scrutiny. In this context, concealed installer behavior materially increases the risk of unauthorized filesystem modification and supply-chain style abuse.
A package presented as deprecated but capable of installing files, creating backups, modifying directories, and invoking external tooling is highly dangerous because it can change the local environment while evading scrutiny. In this context, concealed installer behavior materially increases the risk of unauthorized filesystem modification and supply-chain style abuse.
A package presented as deprecated but capable of installing files, creating backups, modifying directories, and invoking external tooling is highly dangerous because it can change the local environment while evading scrutiny. In this context, concealed installer behavior materially increases the risk of unauthorized filesystem modification and supply-chain style abuse.
A package presented as deprecated but capable of installing files, creating backups, modifying directories, and invoking external tooling is highly dangerous because it can change the local environment while evading scrutiny. In this context, concealed installer behavior materially increases the risk of unauthorized filesystem modification and supply-chain style abuse.
A package presented as deprecated but capable of installing files, creating backups, modifying directories, and invoking external tooling is highly dangerous because it can change the local environment while evading scrutiny. In this context, concealed installer behavior materially increases the risk of unauthorized filesystem modification and supply-chain style abuse.
A package presented as deprecated but capable of installing files, creating backups, modifying directories, and invoking external tooling is highly dangerous because it can change the local environment while evading scrutiny. In this context, concealed installer behavior materially increases the risk of unauthorized filesystem modification and supply-chain style abuse.
The default workflow states that a feature request should lead to repository modification, git commit, publishing a new installer version, and automatic deployment, without warning the user that this is a release-and-deploy pipeline. That creates a serious integrity and supply-chain risk because ordinary conversational requests can be escalated into persistent code changes and distribution events.
The manifest says the skill is a deprecated installer and points users to another agent, but this code reads multiple investment-analysis JSON artifacts, fills an approval packet template, and writes a completed markdown report. That behavior is semantically unrelated to an installer and indicates the implemented functionality diverges from the skill's declared purpose.
Without declared permissions the skill's intent is opaque and cannot be validated.
The visible user-facing instructions are entirely in Chinese ('此 skill 已废弃。请改用...') with no alternative language or opt-in, which can violate language/locale policy requirements. Nothing in the file indicates that the skill is region-specific or that the user can choose the language.
The operational instructions and trigger phrases are defined entirely in Chinese, and the file does not indicate that users may choose another language or that the locale is intentionally restricted for a documented regional purpose. This can constitute a language/locale policy issue when a skill effectively forces one language without opt-in.
The trigger phrases are broad and designed to cause automatic execution from short natural-language prompts, with only a limited exclusion about not upgrading the OpenClaw core. This increases the chance of ambiguous or accidental activation of privileged update actions, especially when the commands include forceful update behavior.
The documented behavior goes well beyond a passive deprecated reference: it performs forced package updates, runs an installer script, modifies a local workspace, and registers an agent. In a deprecated installer, this creates hidden operational authority and can mislead users into invoking impactful system changes under a narrow or outdated description.
The instructions direct the agent to perform local system modifications automatically, including forced updates, running a shell installer, synchronizing files into a user workspace, and registering the agent, without an explicit warning or consent checkpoint. This is dangerous because it normalizes silent execution of privileged and state-changing operations from a conversational trigger.
The skill includes a default workflow to modify code, commit it, publish a new installer version, and immediately deploy it, which materially expands its authority beyond a simple installer. That creates a supply-chain risk: a user request framed as a feature change could trigger code publication and propagation without a separate approval boundary.
The entire skill documentation is presented in Chinese and names a specific approver (生哥) without indicating that language is configurable or optional. Under the policy criteria, forcing a specific language or locale without user opt-in can constitute a natural-language policy violation.
The instruction specifies the skill's style in Chinese and directs a fixed communication mode without indicating that users may choose another language or locale. This can violate language/locale policy when the skill is used in broader contexts where user language preference is not explicitly collected.
This manifest file contains a natural-language note in Chinese at L13, while the rest of the file is in English. That creates a language/locale policy concern because the skill content implicitly forces a specific language for part of the policy without user opt-in or an explicit region-specific justification.
This markdown file presents the skill plan and operating instructions entirely in Chinese, beginning with the title and continuing through most procedural content. Under the language/locale policy rule, forcing a specific language without user opt-in is a natural-language policy violation unless the constraint is documented and justified.
The title and stated goal are written as fixed Chinese instructions, and the file does not indicate that language is selectable by the user. Under the policy, forcing a specific language or locale without opt-in is a natural-language policy concern.
The README is written entirely in Chinese and includes user-facing trigger and usage instructions only in Chinese, with no indication that another language is supported or that Chinese is a justified locale constraint. Under the policy rule for language/locale, this is a natural-language policy concern because the skill effectively imposes a specific language without user opt-in.
The note at L13 is written in Chinese while the rest of the policy file is in English-like identifiers, which can impose a specific language on readers or operators without opt-in. The stated policy requires flagging language or locale constraints when no user choice or justification is provided.
The top-level documentation explicitly limits the adapter to quotes and health checks, and notes no order placement. However, the class implements get_options_chain_summary, which fetches option chains, market snapshots for options, and computes derivatives analytics like ATM IV and put skew. This is an active contradiction in documented scope, not merely missing detail.
The file-level description states the adapter is for "quotes + healthcheck only," which implies a narrow market-data role. The implemented get_options_chain_summary method goes beyond that by accessing option contract chains and computing analytics such as ATM implied volatility, bid/ask spread summaries, and put skew. That behavior exceeds the stated scope.
When broker spot data is unavailable, the adapter silently falls back to a public yfinance integration, introducing an undocumented external network dependency and data-source change. In security-sensitive or regulated environments, this can bypass expected egress restrictions, leak user interest in specific tickers to a third party, and violate trust assumptions that this adapter is Futu-only.