Back to plugin

Security audit

OppHub

Security checks for vulnerabilities and agentic risk

Overview

This plugin has a real messaging-bridge purpose, but it needs Review because it automatically starts, reads local messaging/account state, uploads channel and device metadata, logs message contents locally, and manages cron/message delivery with broad local authority.

Install only if you are comfortable giving this plugin ongoing access to your local OpenClaw messaging configuration and letting it run automatically as a bridge to OppHub. Before use, review the plaintext logs under ~/.opphub-plugin, the automatic channel inventory sync, the device metadata sent during WebSocket connection, and the cron/update-notification behavior created by configure.

SkillSpector was not run because this plugin release contains no bundled skills.

Static analysis

Detected: suspicious.dangerous_exec, suspicious.env_credential_access, suspicious.potential_exfiltration

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
dist/cli-helper.js:59
Evidence
const r = spawnSync(openclawBin(), argv, {

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
dist/cli.js:679
Evidence
const editRes = spawnSync("openclaw", editArgs, { encoding: "utf8", timeout: 15_000 });

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
dist/index.js:642
Evidence
const r = cp.spawnSync(process.execPath, helperArgv, {

Environment variable access combined with network send.

Critical
Code
suspicious.env_credential_access
Location
dist/oauth-client.js:44
Evidence
const AUTHORIZE_URL = process.env.OPP_HUB_OAUTH_AUTHORIZE

Sensitive-looking file read is paired with a network send.

Warn
Code
suspicious.potential_exfiltration
Location
dist/cli.js:61
Evidence
return readFileSync(TOKEN_FILE, "utf8").trim() || null;

Sensitive-looking file read is paired with a network send.

Warn
Code
suspicious.potential_exfiltration
Location
dist/oauth-client.js:175
Evidence
const raw2 = fs.readFileSync(TOKEN_FILE, "utf8");