T09 · Insecure Skill Coding Practices
- Location
references/configuration.md:91- Finding
Concrete Feishu Webhook Token Embedded in Documentation
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This literature-monitoring skill is mostly purpose-related, but it overstates its capabilities and handles webhooks, research interests, local archives, scheduling, and outbound integrations with insufficient security disclosure.
Review before installing. Replace and rotate the documented Feishu webhook if it was real, change arXiv access to HTTPS, protect ~/.openclaw/research-monitor/config.json with owner-only permissions, and enable cron, webhooks, email, Zotero, or cloud backup only if you are comfortable sending research interests and paper metadata to those services.
references/configuration.md:91Concrete Feishu Webhook Token Embedded in Documentation
scripts/monitor.py:68Research Keywords Transmitted Through Plaintext HTTP
scripts/config.py:153Webhook Secret Stored Without Explicit Owner-Only File Permissions
references/advanced-usage.md:92Documented SMTP Authentication Does Not Enable TLS
该代码的总体方向与声明相近,都是科研文献监测、筛选、摘要和报告归档,因此不是完全无关的技能。但描述明显高估了实现能力。最关键的差异在于:多信源监测并未真正实现,实际可用采集仅有 arXiv;中文摘要是静态模板而非真正摘要;飞书通知未实际发送;也未见每周推送逻辑。因此,声明与实际行为存在实质性不一致,应判定为 mismatch。
声明描述的是一个较完整的文献监测、摘要生成和推送系统,而代码实际只是一段用于搜索论文的CLI脚本骨架。它没有定时监测、没有推送、没有摘要生成,也没有真实调用 arXiv、PubMed、CNKI 等外部信源接口;所谓搜索结果是硬编码的示例数据。虽然“按信源、关键词、时间范围搜索论文”与声明中的一部分场景相关,但整体主功能与宣称能力存在明显落差,因此应判定为描述与实际行为不匹配。
Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).
删除配置文件后重新运行 config.py:
rm ~/.openclaw/research-monitor/config.json
python3 config.py
The skill documents capabilities that involve local file access, file writes, and network access, but it does not declare any explicit tool scope or permissions boundary. In agent ecosystems, missing scope declarations can cause overbroad execution privileges or make risky behavior less visible to reviewers and users, increasing the chance of unintended data access or outbound requests.
The manifest description states that the system will '生成中文摘要并推送', which imposes a specific output language as a default behavior. Under the policy, forcing a language or locale without user choice is a natural-language policy violation unless the locale constraint is explicitly justified or optional.
The overview and core features describe the skill as generating Chinese summaries, but do not indicate that users may select another language. This is a natural-language policy concern because the skill appears to enforce a specific language across normal operation without opt-in.
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.
# 编辑 crontab
crontab -e
# 添加每日8点执行任务
0 8 * * * /usr/bin/python3 ~/.openclaw/workspace/skills/research-paper-monitor/scripts/monitor.py >> ~/.openclaw/research-monitor/cron.log 2>&1
The manifest says delivery requires configuring a Feishu channel and frames the skill as a literature monitor with summary push notifications. This advanced-usage section instructs users to modify the skill to send email via SMTP, introducing a new outbound messaging and credential-handling capability not justified by the stated scope of the skill file being audited.
The email notification example automates sending paper content/summary data through SMTP without warning users that information leaves the local environment and may be stored by email providers. Because this skill handles research-monitoring outputs, users may inadvertently disclose sensitive topics, notes, or institution-specific monitoring interests.
The manifest only mentions push delivery through Feishu configuration, but this section documents adding Enterprise WeChat webhook delivery. That is a separate external integration and outbound network capability not described in the skill’s stated purpose and channel scope.
The WeCom webhook example posts monitored content to an external service but does not warn users that paper metadata or summaries are being transmitted outside the local system. Webhook endpoints are easy to misconfigure or share, which increases the chance of unintended disclosure of monitored research interests or generated summaries.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
"content": format_papers_for_wechat(papers) } } requests.post(url, json=data)
---
The documentation recommends automatic cloud backup with rclone but provides no warning that locally stored research data and derived summaries may be transmitted off-device to a third-party service. In a research-monitoring context, exported paper lists, notes, and summaries can contain sensitive or proprietary information, so silent backup guidance can lead to unintentional disclosure.
The manifest describes monitoring academic sources, filtering papers, generating Chinese summaries, and pushing updates. This section goes further by creating records in a third-party bibliography service through its API, which is a separate data-export/write capability not necessary for the described purpose.
The Zotero API upload example automatically sends bibliographic data to a third-party service without any disclosure. Even if the uploaded fields are limited, users may not expect outbound transmission of collected research records, and API-key-based integrations can expose or persist data outside the skill’s local environment.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
def add_to_zotero(paper, zotero_api_key, user_id):
"""添加论文到 Zotero"""
url = f"https://api.zotero.org/users/{user_id}/items"
headers = {
"Zotero-API-Key": zotero_api_key,
"Content-Type": "application/json"
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
"date": paper['published_date'] }
response = requests.post(url, headers=headers, json=data)
return response.status_code == 200
The documentation includes a realistic-looking Feishu webhook URL without clearly warning that webhook endpoints are secrets that should not be shared, logged, or committed. Users may copy real webhooks into config files or repositories, enabling unauthorized parties to send messages to their Feishu groups or abuse the integration.
This markdown file is written entirely in Chinese, beginning with a Chinese-only title, and does not indicate that the skill is region-specific or that users may opt into another language. Under the language/locale policy, forcing a specific language without user choice is a natural-language policy violation.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
**API/搜索方式**:
- 网站: https://www.semanticscholar.org/
- API: https://api.semanticscholar.org/
- 无需API Key即可使用
**注意事项**:
This code file contains user-facing natural-language prompts and descriptions exclusively in Chinese, starting with the module docstring and continuing throughout the interactive setup flow. Because the skill does not offer the user a language/locale choice or explain that it is intentionally limited to a Chinese-speaking context, it creates a language policy concern under the locale-choice rule.
This code file contains user-facing natural-language descriptions in Chinese, including the module docstring and CLI help/output text, but provides no opt-in or alternative language support. Under the stated policy, forcing a specific language without user choice is a natural-language policy violation unless the locale constraint is clearly justified.
The index file records titles, URLs, scores, matched keywords, and local file paths, creating a durable history of the user's research monitoring activity. The write is silent from a user perspective beyond internal docstrings/comments, so users are not explicitly informed that this tracking data is retained.
The skill description claims automatic monitoring of multiple sources such as arXiv, PubMed, and CNKI. In code, search_pubmed, search_google_scholar, and the CNKI/IEEE/Semantic Scholar handlers are placeholder implementations that return empty lists, so the actual behavior is much narrower than advertised.
The function name, docstring, and returned summary structure enforce Chinese output regardless of user preference. This is a natural-language locale constraint embedded in the skill with no opt-in, fallback, or explanation that the tool is intentionally region- or language-specific.
No suspicious patterns detected.