T06 · System Persistence
- Location
SKILL.md:132- Finding
Optional Scheduled Task Creates Persistent Unattended Message Processing
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This Redis messaging skill is not clearly malicious, but it needs Review because its auto mode lets Redis messages trigger local actions and automatic replies without strong sender authentication or secure transport.
Install only if you trust and secure the Redis server, understand that auto mode can process queued messages as commands, and are willing to accept automatic replies and local skill-name disclosure. Avoid scheduling auto mode, avoid exposing Redis directly, prefer TLS or a private tunnel with ACLs, and do not use it with sensitive messages until sender authentication and per-command authorization are added.
SKILL.md:132Optional Scheduled Task Creates Persistent Unattended Message Processing
scripts/a2a.py:246Redis Messages Are Treated as Authorized Commands Without Sender Authentication
scripts/a2a.py:36Redis Credentials and Messages May Be Transmitted Without TLS
scripts/a2a.py:174Hard-Coded Personal Skills Path Can Disclose Local Capability and Filesystem Information
The declared purpose is message passing over Redis, but the documented behavior includes automatically interpreting messages, listing local skills, executing local commands, and sending replies based on remote input. That mismatch hides a remote-action surface behind a benign description, which can lead users to enable a skill that effectively acts on untrusted messages.
The auto-processing trigger uses very vague commands like '自动处理' and 'auto' for a mode that interprets incoming messages and executes actions. Because the trigger lacks strong invocation constraints, the skill could be activated accidentally and then process attacker-controlled Redis messages as commands.
The auto mode description says AI will understand messages, execute corresponding operations, and automatically reply, but it does not clearly warn that untrusted remote messages can drive local actions. In this context, Redis acts as an external command channel, so lack of warning materially increases the chance that users enable behavior equivalent to remote instruction execution.
The skill is presented as Redis-based messaging, but it also auto-interprets inbound messages and performs local actions such as listing local skills, checking queues, and sending further messages. This creates a remote command surface over Redis, so anyone able to enqueue messages for this agent can trigger unintended local behaviors without user approval.
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
# 配置 - 从环境变量读取
# 设置方式(添加到 ~/.openclaw/.env 或系统环境变量):
# A2A_REDIS_HOST=Redis服务器地址
# A2A_REDIS_PORT=6379
# A2A_REDIS_PASSWORD=密码
auto_process consumes inbound Redis messages and immediately performs matched actions without confirmation, trust validation, or sender authentication. In this context, Redis becomes a remote trigger channel for local operations and automatic replies, enabling unauthorized actioning, information disclosure, and possible message-loop abuse.
The skill declares no explicit tool scope or permission boundaries despite requiring environment variables and documenting network, file access, and shell-based execution paths. This is dangerous because users and orchestrators cannot accurately assess or constrain what the skill may access, increasing the chance of unintended capability exposure.
The receive-message activation examples are broad phrases such as '查看消息' and 'poll', which may be triggered in normal conversation without clear user intent to invoke the skill. Overbroad triggers can cause unintended polling of external message queues and expose the agent to untrusted remote content unexpectedly.
The skill’s natural-language description and command interface are primarily Chinese-only, and the embedded help text assumes Chinese-language interaction without offering a language choice. This creates a locale/language policy concern because the file imposes a specific language experience without explicit user opt-in or justification.
The code pushes message content to Redis, which transmits user-provided data over the network or IPC boundary, but there is no explicit warning about this data transfer beyond an implementation docstring. For users invoking the send flow, the script does not disclose that message contents are being stored in and transmitted via Redis.
The message handler exposes local filesystem inventory by listing the skills directory in response to inbound text. This leaks environment details to remote peers and helps an attacker profile available capabilities for follow-on abuse.
The weather handler invokes subprocess.run, and this path is reachable from incoming message interpretation. Even though the subprocess currently only prints guidance text, process creation is a powerful local capability unrelated to the stated purpose of Redis-based instance communication.
subprocess module calls execute external commands. Without careful input validation, this enables command injection.
"""执行查天气"""
try:
# 调用天气skill
result = subprocess.run(
["python", "-c", "import urllib.request; print('请使用天气skill查询')"],
capture_output=True, text=True, timeout=5
)
Most of the skill description and usage guidance are presented only in Chinese, with only partial English trigger examples. There is no explicit statement that users may choose their preferred language, so this may conflict with a policy requiring language or locale choice unless the locale restriction is documented and justified.
The module docstring claims the skill 'supports AI understanding and automatic command execution,' suggesting broader semantic interpretation. In practice, process_message_with_ai only performs deterministic regex matching against a small set of hardcoded patterns and dispatches fixed functions, which does not match the documented behavior. This is an intent-level documentation overstatement rather than a mere omitted detail.
No suspicious patterns detected.