T03 · Remote Payload Retrieval and Execution
- Location
docs/user_guide.md:86- Finding
Privileged Execution of an Unverified Remote Installation Script
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill does what it claims by creating WeChat drafts, but it needs review because it handles account secrets unsafely, recommends risky privileged installs, and inserts hardcoded/fabricated publishing content.
Install only after reviewing and changing the setup flow: avoid sudo/curl-to-bash instructions, do not put AppSecret in shell history or ordinary shared files, inspect the generated draft before publishing, remove hardcoded footer/author/source claims, and use a restricted WeChat credential that can be rotated.
docs/user_guide.md:86Privileged Execution of an Unverified Remote Installation Script
templates/v5-simple.html:62Undisclosed Third-Party Branding Is Injected into Published Articles
数据来源
TechCrunch AI · MIT Technology Review · The Verge
心识孤独的猎手
AI 行业前沿资讯 · 每日更新
scripts/publish.py:108WeChat AppSecret and Access Tokens Are Stored in Plaintext Files
docs/user_guide.md:218Documentation Encourages Passing the AppSecret as a Command-Line Argument
docs/user_guide.md:24Unpinned Packages Are Installed Globally and Sometimes with Root Privileges
Credentials or environment variables flow to a network sink. This is a high-confidence indicator of credential exfiltration.
for i in range(1, retry_count + 1):
try:
self.logger.info(f"获取 Token(尝试 {i}/{retry_count})")
response = requests.get(token_url, params=params, timeout=30)
response.raise_for_status()
result = response.json()
Credentials or environment variables flow to a network sink. This is a high-confidence indicator of credential exfiltration.
for i in range(1, retry_count + 1):
try:
self.logger.info(f"创建草稿(尝试 {i}/{retry_count})")
response = requests.post(
draft_url,
params=params,
json=data,
Chaining curl directly into sudo bash creates a one-step path from network content to privileged code execution. In a skill installation guide, this is especially dangerous because users are primed to trust and execute setup commands without inspection, amplifying supply-chain and MITM risk.
# 1. 打开终端
# 2. 安装 Node.js(如未安装)
curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -
sudo apt-get install -y nodejs
# 3. 安装 OpenClaw
The use of sudo -E preserves the caller's environment while invoking a root shell on a remotely fetched script. Preserving environment variables can unintentionally influence privileged execution and broadens the attack surface beyond the already dangerous curl-to-bash pattern.
# 1. 打开终端
# 2. 安装 Node.js(如未安装)
curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -
sudo apt-get install -y nodejs
# 3. 安装 OpenClaw
The use of sudo -E preserves the caller's environment while invoking a root shell on a remotely fetched script. Preserving environment variables can unintentionally influence privileged execution and broadens the attack surface beyond the already dangerous curl-to-bash pattern.
# 1. 打开终端
# 2. 安装 Node.js(如未安装)
curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -
sudo apt-get install -y nodejs
# 3. 安装 OpenClaw
Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.
# 1. 打开终端
# 2. 安装 Node.js(如未安装)
curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -
sudo apt-get install -y nodejs
# 3. 安装 OpenClaw
sudo npm install -g openclaw
Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.
# 1. 打开终端
# 2. 安装 Node.js(如未安装)
curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -
sudo apt-get install -y nodejs
# 3. 安装 OpenClaw
sudo npm install -g openclaw
The guide instructs users to pass the WeChat AppSecret directly as a command-line argument. Secrets provided this way can be exposed through shell history, terminal logging, CI logs, and process listings visible to other local users, creating a realistic credential leakage path.
The manual shows a full AppSecret embedded in a plaintext configuration example and gives only minimal permission guidance later in the FAQ. This normalizes storing sensitive credentials in cleartext files without adequate storage warnings, increasing the chance of accidental disclosure via backups, screenshots, source control, or weak file permissions.
Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.
npm install -g openclaw
sudo npm install -g openclaw
**Q2: openclaw 命令找不到?**
Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.
# 检查配置文件权限
# macOS/Linux:
chmod 600 ~/.agents/skills/wechat-publisher/config/config.json
# Windows: 以管理员身份运行配置命令
文件头部说明、类与日志文案均以中文固定呈现,未见用户可选择语言/区域的机制,也没有声明该技能仅面向特定中文环境。按照语言/locale 政策,强制单一语言而无用户选择或合理限定,属于自然语言层面的策略问题。
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
# 获取新 Token
app_secret = self._get_app_secret()
token_url = "https://api.weixin.qq.com/cgi-bin/token"
params = {
"grant_type": "client_credential",
"appid": self.config["app_id"],
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
# 获取新 Token
app_secret = self._get_app_secret()
token_url = "https://api.weixin.qq.com/cgi-bin/token"
params = {
"grant_type": "client_credential",
"appid": self.config["app_id"],
The script claims to automatically publish AI news, but the content is hardcoded placeholder text rather than sourced current news. In a publishing automation context, this mismatch can cause unauthorized or misleading publication of fabricated/stale content, creating integrity and reputational risk for the account owner.
The script includes trial enforcement, local license checks, usage tracking, and purchase upsell behavior unrelated to the core publishing function. In an agent skill context, this is risky because it introduces hidden business logic, local state manipulation, and user-pressure behavior that can interfere with automation and may not be expected by operators reviewing a publishing tool.
The script performs a remote draft-creation action against a live WeChat account without an explicit confirmation prompt, dry-run mode, or strong risk notice at the point of execution. In an agent skill setting, this increases the chance of unintended external publication actions when run automatically or by a user who misunderstands the effect.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
for i in range(1, retry_count + 1):
try:
self.logger.info(f"创建草稿(尝试 {i}/{retry_count})")
response = requests.post(
draft_url,
params=params,
json=data,
The skill explicitly automates publishing to a WeChat public account draft box and requires app_id and app_secret, but it does not warn users that content and credentials will be used to write data to an external third-party platform. This can cause users to disclose sensitive credentials or trigger unintended publication workflows without informed consent, especially because the skill markets convenience and automation rather than data-handling risks.
The config hard-codes "Asia/Shanghai" as the timezone, which is a locale-specific setting. Under the policy, forcing a specific locale without user opt-in or clear region-specific justification is a natural-language policy concern.
The natural-language content presents the entire skill guide exclusively in Chinese and does not indicate that the user can choose another language or that the skill is intentionally limited to a Chinese-speaking audience for a documented reason. Under the stated policy, forcing a specific language without opt-in can be a locale-policy issue.
The documentation sets timezone to Asia/Shanghai by default without clearly documenting that this is a China-specific locale assumption or emphasizing user choice. In an automation skill that schedules external publication, an implicit timezone default can cause posts to be published at unintended times, which may lead to operational mistakes or accidental release of content.
This HTML template hard-codes Chinese headings and footer text alongside an English subtitle, which imposes a specific language/locale presentation on generated output. Under the policy, language constraints should either be user-selectable or clearly justified as region-specific.