Exposed secret literal
- Finding
- File appears to expose a hardcoded API secret or token.
- Content
const AUTHORIZATION = [REDACTED];
Security checks across static analysis, malware telemetry, and agentic risk
The lead-discovery purpose is coherent, but the bundle includes under-disclosed bridge helpers that can use local OpenClaw credentials, send MCP data to remote services, and write debug logs.
Install only if you are comfortable with optional Tianyancha/PrimeMatrix bridge code being present. Before using any bridge helper, review which OpenClaw credentials it reads, use scoped provider keys, confirm the remote URL, and disable or secure debug logs.
const AUTHORIZATION = [REDACTED];
VirusTotal engine telemetry is currently stale for this artifact.
Artifact-based informational review of SKILL.md, metadata, install specs, static scan signals, and capability signals. ClawScan does not execute the skill or run runtime probes.
A user may install the package believing it contains only portable skill instructions, while credential-using bridge code is also present in the bundle.
The provided manifest and code file list include scripts/mcp_compat Tianyancha and PrimeMatrix bridge helpers, so this statement under-describes the shipped network/credential helper surface.
The Hub release intentionally excludes optional local bridge helpers and focuses on portable skills.
Update the documentation and metadata to clearly disclose the included bridge helpers, or remove them from the Hub bundle if they are not intended to ship.
If the bridge is run, it can use the user's configured provider credentials to access Tianyancha services.
The bridge reads local OpenClaw provider configuration and API key/authorization values, while the registry metadata declares no required credentials or config paths.
provider = providers.get("tianyancha") or {}
url = provider.get("baseUrl") if isinstance(provider.get("baseUrl"), str) else ""
auth = provider.get("apiKey") if isinstance(provider.get("apiKey"), str) else ""
...
AUTHORIZATION = SETTINGS["authorization"]Require explicit setup for these credentials, document exactly which config keys are read, and advise users to use scoped, revocable API keys.
Company names, tool arguments, and other MCP message content may be sent to the configured remote service if the bridge is used.
The bridge posts MCP payloads to a configured remote URL with authorization, and for unhandled messages forwards the original JSON-RPC message rather than enforcing a narrow local allowlist.
const response = await fetch(REMOTE_URL, {
method: "POST",
headers,
body: JSON.stringify(payload),
});
...
const response = await remotePost(message, true);Constrain forwarded methods and arguments to the documented tools, and clearly tell users what data is sent to each remote provider.
Sensitive lead-discovery queries or provider responses could remain on disk after the task finishes.
The bridge logs full MCP input and output messages to a persistent /tmp file by default, which can store business-intelligence context outside the normal conversation.
LOG_PATH = os.environ.get("CODEX_MCP_DEBUG_LOG", "/tmp/tianyancha_codex_bridge.log")
...
log(f"IN {json.dumps(message, ensure_ascii=False)}")
...
log(f"OUT {json.dumps(message, ensure_ascii=False)}")Make debug logging opt-in, redact sensitive payloads, and store logs with restrictive permissions or disable them by default.