T09 · Insecure Skill Coding Practices
- Location
report_bot.py:67- Finding
Prompt Injection Through Untrusted Task Data
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This is a coherent report generator with advertised AI and webhook integrations, but users should avoid sending sensitive task or report data without reviewing the destinations.
Install only in an isolated environment with reviewed dependency versions. Before using weekly reports or webhook delivery, check whether task data contains customer, employee, financial, roadmap, incident, or other confidential information, and confirm that the OpenClaw AI service and webhook destination are approved for that data. Do not use the advertised monthly, Slack, WeCom, scheduling, or template features unless the publisher implements them.
report_bot.py:67Prompt Injection Through Untrusted Task Data
SKILL.md:23Unpinned and Incomplete Third-Party Dependency Installation
report_bot.py:67Potentially Sensitive Task Data Is Sent to an External AI Service Without an Explicit Privacy Boundary
The documentation promotes scheduled delivery of generated reports to external IM platforms via webhooks, but it provides no warning that report contents may contain sensitive business data and will be transmitted to third-party services. In a reporting automation skill, this omission increases the risk of accidental data leakage because users may enable push delivery without considering data classification, retention, or audience exposure.
The file-level description, report templates, prompts, and CLI messages are all hard-coded in Chinese, which imposes a specific language on users. The policy allows locale constraints only when opt-in or clearly justified, neither of which is present here.
The top-level docstring states 'AI 自动生成日报/周报/月报' (daily/weekly/monthly reports), and the CLI help at L126 also advertises 'monthly'. However, generate_from_tasks only implements daily and weekly; any other type falls through without producing a report. This is an active contradiction between documented capability and code behavior.
In weekly mode, the code serializes the full task list and sends it to an external AI service automatically, without an explicit warning or consent step at the moment of transmission. Task data may contain internal project details, customer information, or other sensitive business context, making this an avoidable data disclosure risk.
The generated report is posted directly to a configured webhook endpoint, which is an external transmission of potentially sensitive operational data. Because the destination is fully configuration-driven and there is no validation, allowlist, timeout, or explicit safety warning, a misconfigured or malicious webhook can exfiltrate internal information to an attacker-controlled endpoint.
return False
if platform == "feishu":
response = requests.post(webhook, json={"msg_type": "text", "content": {"text": report}})
elif platform == "dingtalk":
response = requests.post(webhook, json={"msgtype": "text", "text": {"content": report}})
else:
This branch also transmits the full report to an externally configured webhook, creating the same data exfiltration risk as the Feishu branch. In this skill context, reports are likely to contain internal status, plans, blockers, or project details, so sending them to an untrusted or mistyped endpoint can leak sensitive business information.
if platform == "feishu":
response = requests.post(webhook, json={"msg_type": "text", "content": {"text": report}})
elif platform == "dingtalk":
response = requests.post(webhook, json={"msgtype": "text", "text": {"content": report}})
else:
print(f"❌ 不支持的平台: {platform}")
return False
The argument help explicitly documents '报告类型:daily/weekly/monthly', but the generator only has branches for daily and weekly. This is not just incomplete documentation; it directly claims a supported mode that the code lacks.
The file content is entirely in Chinese aside from product names and package commands, and it does not indicate that other languages are supported or that Chinese is an optional locale. Under the stated policy, forcing a specific language without user opt-in can be a natural-language policy violation unless clearly justified as region-specific.
No suspicious patterns detected.