Back to skill

Security audit

opphub

Security checks for vulnerabilities and agentic risk

Overview

The skill mostly matches an OppHub bot integration, but it handles login tokens, uploads knowledge, and creates recurring tasks in ways that need review before installation.

Review this before installing. Only use it in an environment where you trust the OppHub service, the companion plugin, and inherited environment variables. Do not set OPPHUB_API_BASE or OPPHUB_OAUTH_TOKEN_URL outside a controlled test setup, check whether the daily cron job is acceptable, and inspect generated cards carefully for private local-history content before confirming upload.

Vulnerability Patterns
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • System PersistenceInstalls backdoors, hooks, services, or scheduled tasks that survive the run
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • 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 (5)

T06 · System Persistence

Warning
Location
bin/opphub-oauth-login.js:242
Finding

OAuth Login Automatically Installs a Persistent Daily Scheduled Task

Content
View full analysis
= 0) return JSON.parse(stdout.slice(objStart)); } catch {} return { action: "spawn_failed", cron_check: null }; } catch (e) { return { action: "spawn_error", cron_check: null, error: e?.message ?? String(e), }; } } await writeToken(t); clearStartState(); const cronSpawn = await runCronSetup(); ``` ```js // bin/opphub-cron-setup.js:168-210 async function cronAdd() { let delivery = { source: "alpha5_fallback" }; try { const raw = await darwinKeychainGet("opphub:default"); if (raw) { const token = JSON.parse(raw); const fromServer = await fetchDefaultChannel(token.access_token); if (fromServer.source === "server") { delivery = fromServer; } else { delivery.source = fromServer.source; delivery.reason = fromServer.reason; } } else { delivery.reason = "no token in keychain"; } } catch (e) { delivery.reason = e.message ?? String(e); } if (delivery.source !== "server") { delivery.channelType = "feishu"; delivery.accountId = "dev"; delivery.recipientId = await resolveDefaultUserOpenId(); } const argv = ["node", CHECK_UPDATE_BIN]; const args = [ "cron", "add", "--cron", DEFAULT_EXPR, "--tz", DEFAULT_TZ, "--name", CRON_NAME, "--description", "opphub skill daily check · check update, not 撮合", "--session", "isolated", `--channel=${delivery.channelType}`, `--account=${delive ...[truncated 2018 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
lib/opphub-plugin-client.js:174
Finding

Environment-Controlled OAuth Endpoint Can Exfiltrate Stored Refresh Tokens

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
bin/opphub-knowledge-submit.js:213
Finding

Environment-Controlled API Base Can Redirect Bearer Tokens and Private Knowledge

Content
View full analysis
Remediation
View remediation

T01 · Skill Instruction Hijacking

Warning
Location
bin/opphub-knowledge-discover.js:58
Finding

Discovery Workflow Mandates Access to Local Agent Memory and Wiki Sources

Content
View full analysis
`第${i + 1}步: 用 ${ q.category === "web" ? "web_search" : q.category === "memory" ? "memory_search" : "wiki_search" } 搜 "${q.query}" → 填入 rawText 的 ## ${i + 1}. ${q.name} 节` ); const result = { // ... _explicitInstructions: [ "‼️ 你必须执行以下搜索, 不能省略或跳过:", ...searchTasks, `第${queryPlan.length + 1}步: 把所有搜索结果拼成 rawText (每节搜到真实内容, 含业务描述/价格/案例)`, `第${queryPlan.length + 2}步: 调 opphub knowledge-discover --name "${args.name}" --raw-text "" --json 验证`, "‼️ 禁止: 传空骨架或占位符通过! 校验会检测骨架填空内容并拒绝。必须搜到实际数据。", "‼️ 业务描述节: 必须包含具体能力介绍+价格(如 KOL投放单次5-50万, 月费2-5万等)", "‼️ 项目案例节: 列具体客户行业", ].join("\n"), }; ``` ### Technical Analysis The command does not merely offer local memory and wiki data as optional enrichment. Its output instructs the Agent that all listed searches must be performed and cannot be omitted. Historical conversations and local wiki entries can contain confidential, unrelated, or user-specific inform ...[truncated 1642 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
docs/superpowers/plans/2026-07-23-phase4-bug-fixes.md:669
Finding

Shipped Operational Documentation Contains a Hardcoded Login Credential

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (180)

Credential Access

High
Category
Privilege Escalation
Confidence
95% confidence
Finding

The debug cheat sheet explicitly instructs operators to dump the stored token from Keychain and decode it in plaintext. This materially lowers the barrier to credential exposure through terminal scrollback, shell history, screen recording, support logs, or shoulder-surfing, turning secure storage into easily retrievable plaintext secrets.

Content

Scanner excerpt · INTERNAL.md (reported line 218)May include surrounding context.

9. 调试 cheat sheet

bash
# 验证 token 在 Keychain
security find-generic-password -s openclaw-opphub-uat -a "opphub:default" -w | base64 -d

# 看 status

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The README/metadata describe a narrow business workflow, but the analyzed behavior indicates additional local command execution, token handling, cron management, knowledge ingestion, and update/version logic. This mismatch is security-relevant because it can cause users to authorize a skill without understanding its actual access to local state, credentials, and outbound network operations.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

The README/metadata describe a narrow business workflow, but the analyzed behavior indicates additional local command execution, token handling, cron management, knowledge ingestion, and update/version logic. This mismatch is security-relevant because it can cause users to authorize a skill without understanding its actual access to local state, credentials, and outbound network operations.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
91% confidence
Finding

The README/metadata describe a narrow business workflow, but the analyzed behavior indicates additional local command execution, token handling, cron management, knowledge ingestion, and update/version logic. This mismatch is security-relevant because it can cause users to authorize a skill without understanding its actual access to local state, credentials, and outbound network operations.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
92% confidence
Finding

The README/metadata describe a narrow business workflow, but the analyzed behavior indicates additional local command execution, token handling, cron management, knowledge ingestion, and update/version logic. This mismatch is security-relevant because it can cause users to authorize a skill without understanding its actual access to local state, credentials, and outbound network operations.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The README/metadata describe a narrow business workflow, but the analyzed behavior indicates additional local command execution, token handling, cron management, knowledge ingestion, and update/version logic. This mismatch is security-relevant because it can cause users to authorize a skill without understanding its actual access to local state, credentials, and outbound network operations.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding

The README/metadata describe a narrow business workflow, but the analyzed behavior indicates additional local command execution, token handling, cron management, knowledge ingestion, and update/version logic. This mismatch is security-relevant because it can cause users to authorize a skill without understanding its actual access to local state, credentials, and outbound network operations.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

The README/metadata describe a narrow business workflow, but the analyzed behavior indicates additional local command execution, token handling, cron management, knowledge ingestion, and update/version logic. This mismatch is security-relevant because it can cause users to authorize a skill without understanding its actual access to local state, credentials, and outbound network operations.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
91% confidence
Finding

The README/metadata describe a narrow business workflow, but the analyzed behavior indicates additional local command execution, token handling, cron management, knowledge ingestion, and update/version logic. This mismatch is security-relevant because it can cause users to authorize a skill without understanding its actual access to local state, credentials, and outbound network operations.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
91% confidence
Finding

The README/metadata describe a narrow business workflow, but the analyzed behavior indicates additional local command execution, token handling, cron management, knowledge ingestion, and update/version logic. This mismatch is security-relevant because it can cause users to authorize a skill without understanding its actual access to local state, credentials, and outbound network operations.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The README/metadata describe a narrow business workflow, but the analyzed behavior indicates additional local command execution, token handling, cron management, knowledge ingestion, and update/version logic. This mismatch is security-relevant because it can cause users to authorize a skill without understanding its actual access to local state, credentials, and outbound network operations.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

The README/metadata describe a narrow business workflow, but the analyzed behavior indicates additional local command execution, token handling, cron management, knowledge ingestion, and update/version logic. This mismatch is security-relevant because it can cause users to authorize a skill without understanding its actual access to local state, credentials, and outbound network operations.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding

The README/metadata describe a narrow business workflow, but the analyzed behavior indicates additional local command execution, token handling, cron management, knowledge ingestion, and update/version logic. This mismatch is security-relevant because it can cause users to authorize a skill without understanding its actual access to local state, credentials, and outbound network operations.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

The README/metadata describe a narrow business workflow, but the analyzed behavior indicates additional local command execution, token handling, cron management, knowledge ingestion, and update/version logic. This mismatch is security-relevant because it can cause users to authorize a skill without understanding its actual access to local state, credentials, and outbound network operations.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

The README/metadata describe a narrow business workflow, but the analyzed behavior indicates additional local command execution, token handling, cron management, knowledge ingestion, and update/version logic. This mismatch is security-relevant because it can cause users to authorize a skill without understanding its actual access to local state, credentials, and outbound network operations.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The README/metadata describe a narrow business workflow, but the analyzed behavior indicates additional local command execution, token handling, cron management, knowledge ingestion, and update/version logic. This mismatch is security-relevant because it can cause users to authorize a skill without understanding its actual access to local state, credentials, and outbound network operations.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

The README/metadata describe a narrow business workflow, but the analyzed behavior indicates additional local command execution, token handling, cron management, knowledge ingestion, and update/version logic. This mismatch is security-relevant because it can cause users to authorize a skill without understanding its actual access to local state, credentials, and outbound network operations.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The README/metadata describe a narrow business workflow, but the analyzed behavior indicates additional local command execution, token handling, cron management, knowledge ingestion, and update/version logic. This mismatch is security-relevant because it can cause users to authorize a skill without understanding its actual access to local state, credentials, and outbound network operations.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The README/metadata describe a narrow business workflow, but the analyzed behavior indicates additional local command execution, token handling, cron management, knowledge ingestion, and update/version logic. This mismatch is security-relevant because it can cause users to authorize a skill without understanding its actual access to local state, credentials, and outbound network operations.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The README/metadata describe a narrow business workflow, but the analyzed behavior indicates additional local command execution, token handling, cron management, knowledge ingestion, and update/version logic. This mismatch is security-relevant because it can cause users to authorize a skill without understanding its actual access to local state, credentials, and outbound network operations.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

The README/metadata describe a narrow business workflow, but the analyzed behavior indicates additional local command execution, token handling, cron management, knowledge ingestion, and update/version logic. This mismatch is security-relevant because it can cause users to authorize a skill without understanding its actual access to local state, credentials, and outbound network operations.

Content

No source excerpt is available for this finding.

Credential Access

High
Category
Privilege Escalation
Confidence
95% confidence
Finding

The function explicitly invokes the macOS security tool to read a generic password from Keychain, which is direct credential access. Accessing stored secrets from a setup script is dangerous because it broadens trust boundaries and can enable token misuse or silent authenticated actions without the user's awareness.

Content

Scanner excerpt · bin/opphub-cron-setup.js (reported line 149)May include surrounding context.

js
}
}

async function darwinKeychainGet(account) {
  return new Promise((resolve) => {
    const sp = spawn("security", ["find-generic-password", "-s", "openclaw-opphub-uat", "-a", account, "-w"], { stdio: ["ignore", "pipe", "pipe"] });
    let out = "";

Credential Access

High
Category
Privilege Escalation
Confidence
91% confidence
Finding

After reading the secret, the script decodes and returns the credential material for later parsing and use, meaning the setup helper processes raw secret contents in application memory. Handling raw credential payloads increases exposure risk through logs, crashes, or future code changes that may leak the value.

Content

Scanner excerpt · bin/opphub-cron-setup.js (reported line 158)May include surrounding context.

js
const t = out.trim();
      if (!t) return resolve(null);
      try {
        // 与 plugin 同构: base64 decode (keychain -w 返 raw bytes 时会被 hex)
        return resolve(Buffer.from(t, "base64").toString("utf8"));
      } catch {
        return resolve(t);

Credential Access

High
Category
Privilege Escalation
Confidence
96% confidence
Finding

The script retrieves the 'opphub:default' Keychain entry and immediately parses it to obtain an access token for network use. This is a concrete instance of sensitive credential access that can enable unauthorized API actions if the script is run unexpectedly or modified downstream.

Content

Scanner excerpt · bin/opphub-cron-setup.js (reported line 171)May include surrounding context.

js
async function cronAdd() {
  let delivery = { source: "alpha5_fallback" };
  try {
    const raw = await darwinKeychainGet("opphub:default");
    if (raw) {
      const token = JSON.parse(raw);
      const fromServer = await fetchDefaultChannel(token.access_token);

Env Variable Harvesting

High
Category
Data Exfiltration
Confidence
80% confidence
Finding

Code enumerates, copies, or searches environment variables for secrets. Bulk environment access can collect credentials unrelated to the skill's stated purpose.

Content

Scanner excerpt · bin/opphub-cron-setup.js (reported line 182)May include surrounding context.

js
delivery.reason = fromServer.reason;
      }
    } else {
      delivery.reason = "no token in keychain";
    }
  } catch (e) {
    delivery.reason = e.message ?? String(e);

Static analysis

Detected: suspicious.dangerous_exec, suspicious.env_credential_access, suspicious.exposed_secret_literal

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
bin/opphub-cron-setup.js:42

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
bin/opphub-knowledge-ingest-batch.js:160

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
bin/opphub-knowledge-match.js:118

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
bin/opphub-oauth-login.js:112

Environment variable access combined with network send.

Critical
Code
suspicious.env_credential_access
Location
bin/opphub-knowledge-submit.js:49

Environment variable access combined with network send.

Critical
Code
suspicious.env_credential_access
Location
lib/opphub-plugin-client.js:176

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
docs/server-schema-v32-design.md:316

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
tests/e2e-verify.js:308