T03 · Remote Payload Retrieval and Execution
- Location
README_EN.md:16- Finding
Mutable Remote Scripts Are Executed Directly During Installation
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill needs review because it directs automatic installation and daily updating of mutable remote code, while also containing unrelated bot-server behavior and unsafe symptom guidance.
Do not install this as-is in an agent or public bot environment. Only consider it after removing auto-install/auto-update persistence, replacing pipe-to-shell installation with a pinned and verified release, deleting or separating the unrelated development-bot roles, adding real webhook authentication and rate limits, and changing urgent symptom guidance to direct users to qualified medical care first.
README_EN.md:16Mutable Remote Scripts Are Executed Directly During Installation
install.sh:47Installers Establish an Unattended Persistent Update and Code-Execution Channel
README_EN.md:27Documentation Encourages Persistent Agent Auto-Installation Rules
bot-server/main.py:52Public AI and Webhook Endpoints Lack Effective Authentication
bot-server/ai_client.py:137Undeclared Software-Development Agent Roles Override the Skill's Customer-Service Purpose
SKILL.md:103Emergency Ear Symptoms Are Inappropriately Redirected to Retail Technicians Before Medical Care
bot-server/platforms/wecom.py:79AI Output Is Inserted into XML Unsafely and Internal Exceptions Are Returned to Callers
{int(import('time').time())} """
return xml_response
Several routes expose raw exception strings:
```python
try:
return await handle_feishu(request)
except Exception as e:
return {"code": -1, "msg": str(e)}
try:
return await handle_dingtalk(request)
except Exception as e:
return {"msgtype": "text", "text": {"content": f"系统异常: {e}"}}
The WeCom response is assembled through string interpolation. CDATA does not safely contain the sequence ]]>. Because reply is model-generated from attacker-influenced input and from_user is taken from an unauthenticated request, either value may terminate its CDATA section and alter or invalidate the surrounding XML.
Separately, raw exception strings are returned to remote clients. Provider errors, parser failures, file paths, dependency details, or configuration-related messages may therefore be disclosed. Such information can help attackers profile the deployment and refine subsequent attacks.
]]> or places that sequence in a forged sender field.str(e), disclosing internal error details....[truncated 298 chars]
The installation instructions tell users to pipe remote shell and PowerShell scripts directly into interpreters without any warning about the security consequences. Omitting warnings and verification guidance increases the likelihood that users execute unreviewed code, enabling arbitrary code execution if the source is tampered with.
The README explicitly instructs users or agents to fetch and immediately execute remote shell/PowerShell installer code, then enable automatic updates. This creates a direct remote code execution and supply-chain risk: compromise of the repository, account, branch, or transport target would execute arbitrary code on customer systems without meaningful review.
The use of a pipe into bash chains network retrieval directly into command execution, eliminating any inspection boundary. Combined with the documented auto-install behavior, this creates a high-likelihood remote code execution path that could be abused through repository compromise, malicious updates, or prompt-induced triggering in agent environments.
Agent 会自动执行:
curl -sSL https://raw.githubusercontent.com/Liubuq-sys/wenqisheng-ear-care-skill/main/install.sh | bash
Windows 用户:
The trigger terms include generic everyday phrases such as '采耳' and '耳部护理', and the documented behavior is to auto-install on mention. Broad triggers increase accidental activation and can be abused by untrusted users in ordinary conversation to cause the agent to fetch code, update repositories, or change local state without clear intent.
The README documents background auto-install and git-based auto-update behavior triggered from conversation keywords, but does not warn that this may execute commands and modify the host system. Silent command execution in response to user text is especially dangerous in an agent environment because untrusted prompts can induce state changes and code retrieval.
The README normalizes unattended execution of downloaded scripts and states that auto-update is configured without clearly warning users that arbitrary code from the remote repository may later run or change. Users are not informed of the trust boundary, persistence, or the security implications of ongoing background updates.
The pipe to bash is a classic command-chaining pattern that turns network data directly into executable shell input, bypassing inspection and increasing exploitability. In this skill's context, the danger is amplified because the README encourages customer-side execution for a low-trust, non-essential business service rather than a tightly controlled administrative workflow.
Or runs directly:
curl -sSL https://raw.githubusercontent.com/Liubuq-sys/wenqisheng-ear-care-skill/main/install.sh | bash
Windows:
The auto-discovery instructions direct the agent to install the skill and update it automatically whenever matching keywords appear, without any user warning or approval for code execution. This is especially dangerous in a customer-service skill context because the trigger terms are common and the install path fetches remote shell code, combining prompt-triggering with unattended code execution.
The trigger list includes generic terms such as 'ear cleaning' and 'ear care', so ordinary conversation can invoke installation logic even when the user did not intend to install software. In an agent environment, overly broad auto-trigger phrases increase the risk of prompt-triggered capability activation and make the attack surface much wider.
The declared description says this skill is a store-specific intelligent customer-service assistant for a visible ear-cleaning shop, focused on answering business and service questions in a beauty/ear-care context. However, the supplied code does not contain any store knowledge, business rules, address/hours data, structured query logic, trigger handling for the named shop, or domain-specific ear/eye care FAQ behavior. Instead, it is infrastructure code for a general-purpose LLM chat client with support for multiple AI providers and an additional, materially different capability: role prompts for a collaborative software-development bot system (reviewer/frontend/backend). That software-development orchestration purpose is unrelated to the declared customer-service use case. While using an LLM backend could be a supporting implementation detail, the prominent embedded role-prompt system and generic provider-switching/chat-memory framework indicate behavior substantially broader and different from the declared purpose.
The declared description says this skill is a store-specific intelligent customer-service skill for answering questions about 闻其声耳轻松可视采耳. However, the provided code chunk primarily implements generic bot server infrastructure: HTTP endpoints, platform routing for Feishu/DingTalk/WeCom, health checks, and a generic /test chat endpoint. Its exposed metadata and comments repeatedly describe the system as '协同开发 Bot Server · 多角色任务编排' with reviewer/frontend/backend roles, which is materially different from a beauty-store customer service skill. While such infrastructure could potentially host the declared skill, this code chunk itself does not demonstrate store-specific knowledge handling, reservation rules, service catalog lookup, or the declared trigger behavior. The primary purpose represented by the code is therefore mismatched with the declared purpose.
The declared description is narrowly scoped to a specific store’s AI customer service use case and specific information categories. The supplied code does not implement store knowledge, structured store information lookup, guided scripts, keyword-based triggering, or any domain restrictions. Instead, it is a general-purpose DingTalk bot transport layer that forwards any incoming message to a generic AI chat backend and stores conversation history. This is a materially different primary behavior from the declared store-specific skill, so it should be flagged as a mismatch.
The declared description presents a domain-specific smart customer service skill for a beauty/ear-care storefront, focused on answering structured store information and care knowledge. The supplied code does not contain any store data, reservation rules, service catalog, promotional logic, Wi‑Fi information, or ear/eye care knowledge handling. Instead, it is infrastructure code for a Feishu multi-bot system with reviewer, frontend, and backend roles, signature verification, event handling, conversation logging, and outbound messaging. Its primary purpose and triggers are materially different from the declared description, so this is a clear mismatch.
The declared description is narrowly about a store-specific intelligent customer-service skill for 闻其声耳轻松可视采耳, with defined topics and trigger keywords. The supplied code does not implement store-specific knowledge retrieval, business info lookup, guided scripts, structured query handling, or trigger filtering. Instead, it provides a generic Enterprise WeChat webhook handler that accepts incoming text messages, passes them to a general chat function, stores conversation history, and returns the result. While this infrastructure could be used to host the described skill, the code chunk itself primarily implements a platform integration layer with broader behavior than the declared purpose, so the description does not accurately represent what this code actually does.
声明描述的是一个面向终端用户的门店咨询客服能力,但实际代码块仅是部署/安装器,而非客服功能实现本身。其主要行为是访问远程仓库、写入本地目录、并设置自动更新定时任务,这些都是未在声明中体现的能力。虽然安装脚本可能是该 Skill 的配套组件,但就所提供代码块而言,其实际用途与声明的业务功能明显不一致,因此应判定为描述与行为不匹配。
声明描述的是门店咨询型客服能力,但给出的代码块并未实现任何客服问答、门店信息检索、触发词处理或对话逻辑。相反,这段代码的主要功能是对 skill 代码库进行自动更新与版本记录,属于运维/部署辅助脚本。虽然自动更新脚本可能是技能包的配套实现细节,但就该代码块本身而言,其实际行为与所宣称的业务功能明显不一致,并且包含未在描述中体现的代码拉取、日志写入和执行测试等能力。因此应判定为描述与代码行为不匹配。
声明描述的是一个门店智能客服技能,应当体现对用户咨询内容的处理、门店信息查询或客服话术逻辑。但实际代码仅执行开发测试辅助任务:定位并读取 test-report.json,然后打印测试报告摘要。这与门店营业信息、预约规则、服务项目、护理知识问答等核心用途完全不一致。代码访问的资源也是本地测试报告,而非任何门店知识库或客服数据,因此属于明显的描述与行为不匹配。
描述强调的是面向终端用户的门店 AI 客服能力,但代码并未实现任何用户问答、意图触发、信息查询接口或对话逻辑。相反,它是一个开发/质检用途的审计脚本,用于检查技能文档和参考资料是否满足安全、完整性、一致性及更新机制要求。其主要目的与声明的客服场景明显不同,且还访问和校验 Git、工作流、更新脚本等工程资源,属于未声明且不相关的能力,因此应判定为明显不匹配。
The declared description says this is an end-user intelligent customer-service skill for a store, triggered by store/ear-care queries. The supplied code does not implement customer interactions, structured store information lookup, booking guidance, or ear/eye care Q&A. Instead, it is an internal maintenance/verification script for the skill repository, checking documentation content, reference files, safety text, version metadata, git initialization, and workflow files. This is a materially different primary purpose and includes undeclared capabilities related to project validation and filesystem auditing, so the description does not accurately represent the code chunk.
声明描述的是一个用户侧智能客服技能,核心能力应是根据用户提问进行信息检索与回答;但提供的代码并未实现问答、意图识别、触发词处理或客服对话逻辑。相反,它是一个后台运维/内容编辑脚本,负责更新 markdown 参考资料、版本信息和备份文件。虽然这些数据可能支撑客服技能运行,但该代码块本身的主要行为与声明的主要用途明显不一致,因此应判定为描述与行为不匹配。
The trigger scope includes generic terms like '采耳', '耳部护理', and '眼部护理', which can activate the skill on broad health-related conversations unrelated to the specific store. In a health-adjacent skill that contains problematic triage guidance, over-broad activation increases the chance of inappropriate or unsafe responses outside intended context.
The urgent-symptom guidance lacks a clear instruction to seek immediate medical care first and instead prioritizes coming to the store for visual inspection and cleaning. For potentially serious ear conditions, this could materially delay diagnosis and treatment, worsening injury or hearing outcomes.
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
pip install -r requirements.txt
# 2. 配置
cp .env.example .env
# 编辑 .env,填入 ANTHROPIC_API_KEY
# 3. 启动
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
"""
AI 客户端 —— 支持多模型供应商,通过 .env 切换。
支持的供应商:
- deepseek : DeepSeek API (国内直连,便宜,推荐)
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
"""
AI 客户端 —— 支持多模型供应商,通过 .env 切换。
支持的供应商:
- deepseek : DeepSeek API (国内直连,便宜,推荐)