T09 · Insecure Skill Coding Practices
- Location
qq_send_message.py:54- Finding
QQ messages may be sent to an unverified recipient or application
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill is a disclosed WeChat/QQ automation tool, but it can send messages through fragile GUI automation without reliably verifying the recipient or requiring explicit approval in all paths.
Review before installing. Use only in a trusted Windows desktop session, test with non-sensitive contacts first, delete saved screenshots when done, avoid uploading chat captures to outside AI/OCR services, and do not rely on it for sensitive or business-critical messages until recipient verification and stricter confirmation are added.
qq_send_message.py:54QQ messages may be sent to an unverified recipient or application
wechat_send_message.py:72WeChat messages may be sent through an unverified global screen location
qq_capture_and_reply.py:269Blank confirmation input is treated as approval to send an OCR-generated reply
qq_capture_and_reply.py:112Screenshot cleanup can delete unrelated PNG files and does not enforce the stated retention limit
SKILL.md:52Third-party packages and OCR artifacts are installed without version or integrity pinning
If QQ support, OCR analysis, smart reply generation, and user-confirmation-before-send are declared but not actually implemented, while clipboard access is used without disclosure, users are being misled about both functionality and risk. In this context, undisclosed clipboard manipulation and automated message sending can affect confidentiality and integrity by exposing copied data or sending unintended content.
If QQ support, OCR analysis, smart reply generation, and user-confirmation-before-send are declared but not actually implemented, while clipboard access is used without disclosure, users are being misled about both functionality and risk. In this context, undisclosed clipboard manipulation and automated message sending can affect confidentiality and integrity by exposing copied data or sending unintended content.
If QQ support, OCR analysis, smart reply generation, and user-confirmation-before-send are declared but not actually implemented, while clipboard access is used without disclosure, users are being misled about both functionality and risk. In this context, undisclosed clipboard manipulation and automated message sending can affect confidentiality and integrity by exposing copied data or sending unintended content.
If QQ support, OCR analysis, smart reply generation, and user-confirmation-before-send are declared but not actually implemented, while clipboard access is used without disclosure, users are being misled about both functionality and risk. In this context, undisclosed clipboard manipulation and automated message sending can affect confidentiality and integrity by exposing copied data or sending unintended content.
This markdown file advertises capabilities to automatically send messages via WeChat/QQ and save screenshots locally, both of which can affect user data and privacy. The description lists the features but provides no warning or disclosure about message automation, screenshot capture/storage, or the need to verify targets before use.
The skill declares sensitive behaviors such as screenshots and local file storage, but it does not define an explicit tool scope or permissions model. In an automation skill that reads and writes local workspace files, missing capability declarations weakens reviewability and increases the chance of overbroad file access being granted or overlooked.
The README explicitly instructs users to send chat screenshots to AI assistants or APIs and to use external OCR services, but it does not warn that those screenshots may contain sensitive personal messages, contact details, account identifiers, or business information. In the context of a tool for automating WeChat/QQ conversations, this omission increases the risk of inadvertent disclosure to third-party AI/OCR providers and could lead to privacy breaches or compliance issues.
The skill captures chat screenshots and stores them on disk in a predictable local directory without prior warning or explicit consent. Because chat screenshots can contain sensitive personal, business, or authentication information, local persistence increases exposure to other local users, malware, backup sync, or later unintended disclosure.
The send_message function automates clipboard paste and message submission to WeChat/QQ with no explicit confirmation or preview step. In a GUI automation context, this can cause accidental or misdirected message delivery, and if called by other code with untrusted input it could transmit sensitive or harmful content to the wrong recipient.
The manifest describes a tool that supports contact search, message sending, screenshot OCR analysis, and intelligent reply suggestions requiring user confirmation before sending. In this file, the main workflow searches contacts and performs screenshot capture plus OCR, but it never generates reply suggestions or performs a confirmation-gated send step; the output instead tells the user to send the screenshot to an external AI assistant for analysis.
The OCR call fixes recognition to chi_sim+eng, which imposes a language/locale constraint in behavior. The file also presents itself generally as an OCR helper, but does not offer opt-in or configuration for other languages, which can violate language-choice policy expectations.
The reader configuration ['ch_sim', 'en'] forces a specific language set for all uses of the helper. Because the file does not provide a user-selectable language option or clearly justify a region-specific constraint, this is a natural-language policy concern.
The trigger pattern 给.*发消息 is overly broad and can match a wide range of ordinary user requests, causing this automation skill to activate in situations the user may not intend. In the context of a Windows GUI automation tool that can search contacts, manipulate the clipboard, take screenshots, and send messages, accidental invocation increases the risk of unintended message delivery and exposure of on-screen sensitive information.
The script captures chat screenshots and persists them under ~/.openclaw/workspace/screenshots, which can retain sensitive conversation content on disk without explicit notice, consent, or retention controls. Local-only storage reduces exposure compared with exfiltration, but on shared systems, compromised accounts, backups, or forensic recovery, these files may disclose private messages and contacts.
The manifest description says the skill supports intelligent reply suggestions that require user confirmation before sending. In this file, once the user confirms in the console, the code directly focuses the QQ input box, pastes text, and presses Enter to send the message, implementing actual message transmission rather than only producing a suggestion.
The script temporarily replaces the user's clipboard with arbitrary message content and restores it afterward without any warning, consent, or safeguards. On Windows, the clipboard is globally accessible and can contain sensitive data such as passwords, tokens, wallet addresses, or private text; overwriting it can leak or destroy user data, and restoration may fail if the process crashes or the clipboard changes concurrently.
The manifest describes a Windows tool for both 微信 and QQ auto-messaging, with screenshot OCR analysis and smart reply suggestions requiring user confirmation. This file implements only WeChat window discovery and message sending via GUI automation; there is no QQ handling, no OCR logic, no screenshot analysis workflow, and no reply-suggestion step.
The natural-language instructions and headings are presented entirely in Chinese, which can constitute a language/locale policy issue when no user opt-in or locale limitation is stated. There is no indication that the skill is intentionally restricted to a Chinese-speaking or region-specific audience.
The natural-language description and runtime behavior are tailored specifically to Chinese platforms and initialize OCR with Chinese Simplified and English only. There is no user-facing option to select language or locale, which can violate language/locale policy when a skill imposes a specific language context by default.
After OCR, the variable result holds the recognized text returned by ocr_chat, not the screenshot filename. The message 完成!截图已保存: {result} therefore contradicts the actual value being displayed and misrepresents what the function produced.
No suspicious patterns detected.