Back to skill

Security audit

Roundtable Skill

Security checks for vulnerabilities and agentic risk

Overview

This appears to be a real multi-agent discussion skill, but it starts costly remote sub-agent work after only sending a confirmation prompt and also reads private OpenClaw configuration files by default.

Review this skill before installing. It is best used only for non-secret topics where you are comfortable sending the topic and generated discussion summaries to multiple sub-agents. Require a real confirmation gate before running, use explicit model configuration instead of default private config discovery, and keep chat broadcasting and report persistence disabled for sensitive discussions.

Vulnerability Patterns
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
Findings (2)

T09 · Insecure Skill Coding Practices

Warning
Location
roundtable_notifier.py:69
Finding

User Confirmation Gate Is Bypassed by an Unconditional Success Result

Content
View full analysis
bool: """ Send RoundTable confirmation request. Note: The caller is responsible for actually waiting for confirmation. """ message = ( f"🔄 **RoundTable multi-Agent deep discussion**\n\n" f"**Discussion topic**: {self.topic}\n\n" f"📋 **Discussion details**:\n" f"- Participating Agents: {', '.join(engine.agents[:5])}\n" f"- Discussion rounds: five rounds (R1-R5)\n" f"- Estimated duration: **10-30 minutes**\n" f"- Output: complete proposal, multiple viewpoints, and recommendations\n\n" f"⚠️ **Notice**:\n" f"- RoundTable is intended for scenarios requiring deep analysis\n" f"- Use ordinary conversation if a fast answer is needed\n" f"- Progress can be viewed while the discussion is running\n\n" f"**Please confirm your request**:\n" f'Reply "**Confirm**" to start the RoundTable discussion\n' f'Reply "**Quick**" to receive a short proposal' ) self._send_message(engine, user_channel, message) print(f"Confirmation request sent to {user_channel}") # This method only sends the request and does not wait for a reply. # The caller is expected to implement actual confirmation handling. # In the current demonstration mode, execution continues directly. return True ``` The returned value is consumed as an authorization decision in `roundtable_engine.py:129-132`: ```python confirmed = await self.notifier.send_confirmation_request(self, user_channel) if not confirmed: print("User cancelled RoundTable") return False ``` ### Technical Analysis The notification explicitly instructs the user to reply with confirma ...[truncated 2177 chars]
Remediation
View remediation
bool: if not confirmed: await self.notifier.send_confirmation_request(self, user_channel) return False ``` 4. Bind authorization to the exact operation, including: - Requesting user identity. - Destination channel. - Discussion topic or a cryptographic digest of it. - Timestamp and expiration. - Unique operation ID. 5. Add tests proving that: - No `sessions_spawn` call occurs before confirmed authorization. - Responses from a different user or channel are rejected. - Expired and replayed confirmations are rejected. - Delivery failure cannot be interpreted as consent. ]]>

T05 · Unauthorized Access and Privilege Escalation

Note
Location
model_selector.py:188
Finding

Private OpenClaw Configuration Is Read Without Explicit Local-Scan Consent

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • System Prompt LeakageDirect Leakage, Indirect Extraction, Tool-Based Exfiltration
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (38)

Tp4

High
Category
MCP Tool Poisoning
Confidence
92% confidence
Finding

Undeclared access to messaging tools/sessions and confirmation workflows is risky because it extends the skill's reach beyond local reasoning into active communication channels. In a multi-agent skill, this context makes the issue more dangerous: generated content may be automatically propagated to users or channels, amplifying data leakage, spoofed status messaging, or unintended actions under the guise of orchestration.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
93% confidence
Finding

Undeclared access to messaging tools/sessions and confirmation workflows is risky because it extends the skill's reach beyond local reasoning into active communication channels. In a multi-agent skill, this context makes the issue more dangerous: generated content may be automatically propagated to users or channels, amplifying data leakage, spoofed status messaging, or unintended actions under the guise of orchestration.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

Undeclared access to messaging tools/sessions and confirmation workflows is risky because it extends the skill's reach beyond local reasoning into active communication channels. In a multi-agent skill, this context makes the issue more dangerous: generated content may be automatically propagated to users or channels, amplifying data leakage, spoofed status messaging, or unintended actions under the guise of orchestration.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

Undeclared access to messaging tools/sessions and confirmation workflows is risky because it extends the skill's reach beyond local reasoning into active communication channels. In a multi-agent skill, this context makes the issue more dangerous: generated content may be automatically propagated to users or channels, amplifying data leakage, spoofed status messaging, or unintended actions under the guise of orchestration.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

Undeclared access to messaging tools/sessions and confirmation workflows is risky because it extends the skill's reach beyond local reasoning into active communication channels. In a multi-agent skill, this context makes the issue more dangerous: generated content may be automatically propagated to users or channels, amplifying data leakage, spoofed status messaging, or unintended actions under the guise of orchestration.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
87% confidence
Finding

Undeclared access to messaging tools/sessions and confirmation workflows is risky because it extends the skill's reach beyond local reasoning into active communication channels. In a multi-agent skill, this context makes the issue more dangerous: generated content may be automatically propagated to users or channels, amplifying data leakage, spoofed status messaging, or unintended actions under the guise of orchestration.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

Undeclared access to messaging tools/sessions and confirmation workflows is risky because it extends the skill's reach beyond local reasoning into active communication channels. In a multi-agent skill, this context makes the issue more dangerous: generated content may be automatically propagated to users or channels, amplifying data leakage, spoofed status messaging, or unintended actions under the guise of orchestration.

Content

No source excerpt is available for this finding.

Direct Prompt Extraction

High
Category
System Prompt Leakage
Confidence
89% confidence
Finding

The code loads and returns raw prompt content from Markdown files selected from a scanned agent repository, including an optional external agent_source path. In an agent framework, prompt files are executable control input for the LLM; returning them directly without trust validation, allowlisting, integrity checks, or sanitization enables prompt injection and policy override if an attacker can place or influence agent files.

Content

Scanner excerpt · agent_selector.py (reported line 646)May include surrounding context.

python
selector = AgentSelector(agent_source)
    prompt = selector.load_agent_prompt(agent_id)
    print(f"✅ 已切换到 {agent_id} 人格")
    return prompt


def auto_select_agent(task: str, agent_source: str = "") -> str:

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · examples/full-test-20260319.md (reported line 288)May include surrounding context.

md
采用三层架构:客户端层(React Web/移动端/第三方 API)→ API 网关层(Nginx 负载均衡/SSL 终止/限流)→ 应用层(NestJS 集群)→ 数据层(PostgreSQL 主数据库 + Redis 缓存)。

### 四、关键实现细节
1. JWT 认证流程:Access Token 15 分钟,Refresh Token 7 天,Token 黑名单机制(Redis),支持多租户上下文隔离。
2. 数据模型:User(id, email, password, todos) 和 Todo(id, title, description, completed, userId) 两个核心表。
3. API 设计规范:RESTful 风格,统一响应格式,支持分页/过滤/排序。

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · examples/full-test-20260319.md (reported line 712)May include surrounding context.

md
采用三层架构:客户端层(React Web/移动端/第三方 API)→ API 网关层(Nginx 负载均衡/SSL 终止/限流)→ 应用层(NestJS 集群)→ 数据层(PostgreSQL 主数据库 + Redis 缓存)。

### 四、关键实现细节
1. JWT 认证流程:Access Token 15 分钟,Refresh Token 7 天,Token 黑名单机制(Redis),支持多租户上下文隔离。
2. 数据模型:User(id, email, password, todos) 和 Todo(id, title, description, completed, userId) 两个核心表。
3. API 设计规范:RESTful 风格,统一响应格式,支持分页/过滤/排序。

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · examples/full-test-20260319.md (reported line 1136)May include surrounding context.

md
采用三层架构:客户端层(React Web/移动端/第三方 API)→ API 网关层(Nginx 负载均衡/SSL 终止/限流)→ 应用层(NestJS 集群)→ 数据层(PostgreSQL 主数据库 + Redis 缓存)。

### 四、关键实现细节
1. JWT 认证流程:Access Token 15 分钟,Refresh Token 7 天,Token 黑名单机制(Redis),支持多租户上下文隔离。
2. 数据模型:User(id, email, password, todos) 和 Todo(id, title, description, completed, userId) 两个核心表。
3. API 设计规范:RESTful 风格,统一响应格式,支持分页/过滤/排序。

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · examples/full-test-20260319.md (reported line 1560)May include surrounding context.

md
采用三层架构:客户端层(React Web/移动端/第三方 API)→ API 网关层(Nginx 负载均衡/SSL 终止/限流)→ 应用层(NestJS 集群)→ 数据层(PostgreSQL 主数据库 + Redis 缓存)。

### 四、关键实现细节
1. JWT 认证流程:Access Token 15 分钟,Refresh Token 7 天,Token 黑名单机制(Redis),支持多租户上下文隔离。
2. 数据模型:User(id, email, password, todos) 和 Todo(id, title, description, completed, userId) 两个核心表。
3. API 设计规范:RESTful 风格,统一响应格式,支持分页/过滤/排序。

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The package description explicitly advertises multiple generic trigger phrases such as “RoundTable/圆桌会议/圆桌讨论等,” which are broad everyday-language terms rather than narrowly scoped activation commands. In an agent skill context, this increases the chance of unintended activation during normal conversation, causing the skill to run when the user did not clearly intend to invoke it and potentially exposing more context to spawned sub-agents.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The quick-start example uses natural-language phrasing — “请你 RoundTable 讨论一下:{你的议题}” — that closely resembles ordinary user requests. Because the skill is a multi-agent discussion engine that injects complete history and performs real sub-agent calls, a broad trigger in a common sentence form makes accidental or ambiguous invocation more dangerous than in a passive documentation-only skill.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The README promises 'fully isolated' sub-agents with no shared context leaks, but later describes injecting prior-round history into subsequent rounds. This is a security-relevant documentation flaw because operators may rely on a false confidentiality boundary and route sensitive content into the skill under the assumption that expert contexts remain isolated, when in fact prior content is intentionally propagated.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The README states that complete prior-round history is injected for R2-R5, while the transparency section says only summaries truncated to about 200 characters are injected. This inconsistency creates uncertainty about actual data exposure and retention, which can lead users to underestimate or overestimate privacy risk and make unsafe decisions when handling confidential material.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The trigger list includes broad natural-language phrases such as '圆桌会议', '圆桌讨论', and '深度讨论' that may appear in ordinary conversation outside intentional skill invocation. This can cause unintended activation of the multi-agent workflow, leading to unnecessary agent spawning, excess compute usage, and possible context exposure to sub-agents when the user did not explicitly request the skill.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
90% confidence
Finding

The skill describes capabilities that involve reading local model configuration, writing JSON/Markdown reports, and possibly accessing environment-related model discovery behavior, yet it declares no explicit tool scope or permissions. This creates a transparency and least-privilege problem: operators cannot easily tell that filesystem and possibly environment-adjacent access are required, increasing the chance of overbroad execution in sensitive contexts.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

The recommended model tags explicitly require chinese for the 产品/商业 expert role, which imposes a language preference in the skill's operating policy. The document does not present this as an optional user choice or narrowly justified locale requirement, so it can conflict with language/locale neutrality expectations.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

This Python file contains natural-language instructions stating the skill is an "Agent selector" in Chinese and the fallback prompt at L620-L628 is written only in Chinese, which effectively constrains outputs to a specific language. The file does not mention any user opt-in, language selection, or region-specific justification, so it violates the language/locale policy for all file types.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The manifest description is written entirely in Chinese, which can impose a specific language on users without offering a language choice or documenting a justified region-specific scope. Under the policy, language constraints should be optional or clearly justified rather than implicitly enforced.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

This markdown skill/report is written as a complete Chinese-language interaction artifact and repeatedly frames the agent setup around a Chinese-specific agent pool (agency-agents-zh) without any user opt-in or language-selection path. That can violate language/locale policy when a skill implicitly constrains responses to one language for all users.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The natural-language tag mapping hard-codes the product role to prefer a "chinese" model tag. This imposes a language preference in skill behavior without any visible user choice or documented opt-in, which matches the locale/language policy violation criteria.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The manifest describes a roundtable discussion engine focused on model routing, intent parsing, convergence control, and expert libraries. In this file, the skill also implements generic file export and import of configuration, including writing to any caller-supplied path, which is not an obvious or necessary part of model selection behavior as described.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

This markdown file presents all instructions, examples, and operational guidance exclusively in Chinese. Under the policy, forcing a specific language without user opt-in is a natural-language policy violation unless the locale constraint is explicitly justified, which is not stated here.

Content

No source excerpt is available for this finding.