T03 · Remote Payload Retrieval and Execution
- Location
SKILL.md:2678- Finding
Unverified Remote Installer Is Piped Directly into a Shell
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill’s report-generation purpose is real, but it also self-modifies its instructions, scans other installed skills, and mandates external delivery of generated reports.
Review before installing. Use this only in an environment where automatic local logging, broad attachment processing, and external delivery are acceptable. Disable or remove self-repair writes to SKILL.md, make WeChat/email/Tencent Docs delivery opt-in per file, avoid curl-to-shell installation, pin dependencies, and restrict Ollama to localhost before handling confidential client materials.
SKILL.md:2678Unverified Remote Installer Is Piped Directly into a Shell
references/self_repair.py:142Runtime and User-Controlled Error Text Can Persistently Modify Skill Instructions
SKILL.md:1937Generated Reports Are Mandatorily Sent to an External Delivery Service
references/self_evolution.py:115Self-Evolution Component Enumerates and Reads Unrelated Installed Skills
SKILL.md:365Runtime Dependencies Are Installed Without Version or Integrity Pinning
references/generate_offline_content.py:9Unrestricted OLLAMA_HOST Can Redirect Prompts to an Arbitrary Plaintext Endpoint
The code constructs outbound HTTP requests from the OLLAMA_HOST environment variable without validating or constraining the destination. If an attacker can influence the process environment, they can redirect requests to arbitrary internal or external endpoints, creating SSRF-style behavior, unexpected data exfiltration, or interaction with sensitive local services.
try:
import urllib.request
req = urllib.request.Request(f"{OLLAMA_HOST}/api/tags")
with urllib.request.urlopen(req, timeout=5) as resp:
data = json.loads(resp.read())
return len(data.get("models", [])) > 0
except:
This request sends prompt content to a URL derived from the untrusted OLLAMA_HOST environment variable, so environment manipulation can redirect generated content and prompts to attacker-controlled infrastructure. In a skill context, prompts may include sensitive business content, making this both a confidentiality risk and a channel for SSRF against internal services.
)
try:
with urllib.request.urlopen(req, timeout=120) as resp:
data = json.loads(resp.read())
return data.get("response", "")
except Exception as e:
The trigger phrases include very broad everyday requests and even state that uploading any content should automatically trigger the skill. Overbroad triggers can cause the skill to activate unexpectedly on unrelated uploads, increasing the chance that sensitive files are processed, logged, searched externally, or delivered outward without the user's informed intent.
The self-repair design explicitly allows the skill to modify SKILL.md and reference files based on runtime issues and user feedback. A content-generation skill should not be self-modifying; this creates a durable persistence mechanism where prompt-injected content, malicious inputs, or faulty heuristics can alter future behavior and poison the local skill base.
The workflow includes automatic delivery to WeChat mini-program and optional email/Tencent Docs sharing, but the description does not present this as a clear, prominent warning requiring prior consent. External sharing of generated reports can disclose confidential client data to third-party platforms or unintended recipients.
The documentation includes a one-line remote install command that fetches and executes a shell script directly from the internet using curl piped to sh. This is a classic high-risk pattern because it executes unaudited remote code immediately, allowing supply-chain compromise or malicious script substitution to fully compromise the environment.
# 1. 安装Ollama
curl -fsSL https://ollama.com/install.sh | sh
# 2. 下载模型(需要一次联网)
ollama pull gemma4:e2b-it-q4_K_M
The use of a shell pipeline to pass downloaded content directly into sh compounds the risk by chaining retrieval and execution without inspection. In the context of a skill file, this is especially dangerous because users or downstream agents may treat it as an endorsed operational step and execute it automatically or with reduced scrutiny.
# 1. 安装Ollama
curl -fsSL https://ollama.com/install.sh | sh
# 2. 下载模型(需要一次联网)
ollama pull gemma4:e2b-it-q4_K_M
The skill specifies automatic network searches for images, icons, reference PPTs, and color sources, plus post-generation delivery to an external mini-program, without a clear warning about what user data or document-derived keywords may be transmitted. Because report-generation inputs often contain sensitive business content, silent outbound transmission materially increases confidentiality and data-leakage risk.
The main flow performs multiple persistent writes—error logs, summaries, and especially SKILL.md modifications—driven by runtime inputs with no approval, trust boundary checks, or integrity protections. In a skill context, this is more dangerous because it creates a self-modifying agent pattern: untrusted inputs can poison future instructions and behavior across runs, effectively turning transient input manipulation into persistent compromise.
The top-level description is written to generate Chinese-language executive consulting reports and repeatedly mandates Chinese-specific style choices such as 微软雅黑 and humanizer-zh, without offering the user a language or locale choice. This can violate language/locale policy when the skill is used in broader contexts or by users expecting multilingual support.
The skill claims local/offline support, yet large parts of the documented workflow make network-dependent scanning, web search, installation, and external delivery mandatory or default. This mismatch can mislead users about data residency and transmission, causing sensitive materials to be handled in ways the user did not expect.
The skill describes a self-evolution engine that scans local skill directories, recommends or auto-integrates other skills, and logs execution behavior. That capability is not necessary for generating consulting reports and expands the trust boundary to unrelated local content, creating a path for unintended data exposure, privilege creep, and execution of unreviewed functionality.
The self-evolution section says the skill will track usage patterns, record errors, and write logs, but this persistence is not surfaced as a clear user-facing warning. Silent local retention of user-derived activity and feedback increases privacy risk and can create long-lived stores of sensitive project information.
The skill persistently records usage data, execution patterns, and related logs for later reuse. Storing operational traces around user interactions can capture sensitive business context over time, especially in a consulting setting where uploaded materials may be confidential.
The skill description emphasizes automatic research and expansion of user materials but does not prominently warn users that uploaded content may be used in external web searches or transmitted to outside sources. Missing disclosure weakens informed consent and makes accidental leakage of confidential business data more likely.
The workflow requires writing extracted user material into persistent summary files and explicitly preserving every page and data point for report reuse. For consulting documents, this can create durable local copies of highly sensitive client information beyond the immediate task, increasing exposure if the host is compromised or shared.
The skill mandates storing execution issues and user feedback, then feeding them back into skill files and evolution records. This couples persistent storage with behavior modification, turning user-provided content into a long-term influence on future executions and increasing the risk of prompt-injection persistence or privacy leakage.
The workflow mandates automatic file delivery to WeChat and optionally email or Tencent Docs after report generation. Automatic outbound delivery is not required to create a report and can exfiltrate sensitive customer materials or derived outputs to external services without meaningful, per-run consent.
The template labels the report as confidential and includes client-specific fields, but it provides no handling guidance for the sensitive business and personal data likely to be collected. In a consulting/reporting workflow, this omission can lead to over-collection, insecure sharing, and accidental disclosure of customer, employee, or operational information.
The appendix explicitly asks for site photos, interview notes, participant lists, data collection summaries, and questionnaire analysis, all of which may contain personal data, trade secrets, or sensitive facility details. Without consent, privacy, and sanitization guidance, users may embed identifiable or confidential material directly into reusable reports and circulate it broadly.
The checklist explicitly recommends using recording equipment and taking on-site photos, but it does not clearly require prior consent, authorization, or adherence to privacy and confidentiality controls. In a real enterprise survey context, this can lead to unauthorized capture of employee information, customer data, trade secrets, or regulated operational details, creating privacy, contractual, and compliance risk.
The checklist asks consultants to collect customer complaints, return data, and other detailed operational metrics without warning that such information may be commercially sensitive, confidential, or contain personal data. This omission can normalize over-collection or mishandling of sensitive business information, increasing the risk of unauthorized disclosure or noncompliant data processing.
The module title and description are written entirely in Chinese, and all user-facing strings and comments in the file likewise assume Chinese as the required interaction language. There is no indication that the skill offers a language choice or that the Chinese-only behavior is a documented, region-specific requirement, which makes this a natural-language locale policy concern.
This markdown file is entirely written in Chinese and provides no indication that language choice is optional or limited to a justified region-specific context. Under the policy rule for natural-language violations, forcing a specific language without opt-in can be a locale/language policy issue.
subprocess module calls execute external commands. Without careful input validation, this enables command injection.
# 方法1: markitdown (推荐)
try:
import subprocess
result = subprocess.run(
["markitdown", file_path],
capture_output=True, text=True, timeout=120 # 大文件可能需要较长时间
)