Back to skill

Security audit

Pipedream Connect

Security checks for vulnerabilities and agentic risk

Overview

This Pipedream integration is mostly purpose-aligned, but it handles powerful app-access tokens with under-scoped controls and optional persistent cron automation that needs review before installation.

Install only if you are comfortable reviewing and hardening the token-handling paths. Before enabling cron, confirm you need it, know how to remove the exact crontab entry, and restrict permissions on OpenClaw secrets, mcporter config, logs, and copied scripts. Avoid printing the secrets vault to the terminal; use a key-presence check instead.

Vulnerability Patterns
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • 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
  • 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
Findings (5)

T06 · System Persistence

Warning
Location
scripts/setup-cron.sh:27
Finding

Persistent Token Refresh Task Installed Without Automated Removal

Content
View full analysis
/dev/null | grep -q "pipedream-token-refresh"; then echo "ℹ️ Cron job already exists" crontab -l | grep "pipedream-token-refresh" else # Add cron job (runs every 45 minutes) CRON_LINE="*/45 * * * * /usr/bin/python3 $REFRESH_SCRIPT --quiet >> $LOG_DIR/pipedream-cron.log 2>&1" (crontab -l 2>/dev/null || echo "") | { cat; echo "$CRON_LINE"; } | crontab - echo "✅ Added cron job: runs every 45 minutes" fi ``` ### Technical Analysis The setup script modifies the user's crontab and installs a task that runs every 45 minutes across login sessions and system restarts. The task executes a credential-processing script that reads Pipedream client credentials, requests access tokens, and rewrites MCP configuration. Periodic refresh is related to the integration's functionality and is documented as optional in `INSTALL.md`. However, the persistence remains until manually removed, and the package provides neither an uninstall operation nor a command that safely identifies and removes the exact installed entry. The script is copied into a user-writable location. If that file is later replaced or modified, cron will repeatedly execute the replacement under the installing user's account. ### Attack Path 1. The user runs `scripts/setup-cron.sh`. 2. The script copies the Python refresh program to `$HOME/clawd/scripts/pipedream-token-refresh.py`. 3. A persistent cron entry is added to the user's crontab. 4. An attacker who subsequently gains write access to the installed script or its parent directory replaces the script. 5. Cron executes the modified script every 45 minutes with the user's privileges. 6. The malicious replacement can access files and credentials available to that user. ### Impact Asses ...[truncated 455 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
scripts/pipedream-token-refresh.py:179
Finding

Bearer Tokens May Be Written to MCP Configuration with Permissive File Permissions

Content
View full analysis
Remediation
View remediation

T05 · Unauthorized Access and Privilege Escalation

Error
Location
reference/pipedream-backend.ts:477
Finding

Privileged Pipedream Access Tokens Are Returned to Browser Clients

Content
View full analysis
{ try { const credentials = readPipedreamCredentials(); if (!credentials) { respond(true, { success: false, error: "No credentials configured" }, undefined); return; } const accessToken = await getPipedreamAccessToken( credentials.clientId, credentials.clientSecret, ); respond( true, { success: true, accessToken, credentials: { clientId: credentials.clientId, projectId: credentials.projectId, environment: credentials.environment, externalUserId: credentials.externalUserId, }, }, undefined, ); } catch (e) { ``` The browser then receives and uses the token directly: ```ts const tokenResult = await client.request<{ success: boolean; error?: string; accessToken?: string; credentials?: { clientId: string; projectId: string; environment: string; externalUserId: string; }; }>("pipedream.getToken", {}); const { accessToken, credentials } = tokenResult; const response = await fetch("https://remote.mcp.pipedream.net", { method: "POST", headers: { Authorization: `Bearer ${accessToken}`, ``` The credential-save handler also returns a newly issued token: ```ts respond(true, { success: true, accessToken }, undefined); ``` ### Technical Analysis The gateway holds the Pipedream client secret and can perform authenticated operations server-side. Nevertheless, the `pipedream.getToken` RPC returns raw bearer tokens to browser JavaScript. The browser only requires tool-list, te ...[truncated 1720 chars]
Remediation
View remediation

T05 · Unauthorized Access and Privilege Escalation

Error
Location
reference/pipedream-backend.ts:1059
Finding

MCP Server Lookup and Deletion Are Not Strictly Scoped to the Selected Agent

Content
View full analysis
k.startsWith("pipedream-") && k.endsWith(slugSuffix), ); if (foundName) { delete config.servers[foundName]; writeMcporterConfig(config.servers); } ``` The test flow uses the same suffix-only fallback: ```ts const foundName = servers[expectedName] ? expectedName : Object.keys(servers).find((k) => k.startsWith("pipedream-") && k.endsWith(slugSuffix)); let serverToTest = foundName; ``` The global deletion handler accepts a caller-provided server name directly: ```ts "pipedream.disconnectApp": async ({ params, respond }) => { try { const { serverName } = params as { serverName: string }; const config = readMcporterConfig(); if (!config) { respond(true, { success: false, error: "No config found" }, undefined); return; } delete config.servers[serverName]; const success = writeMcporterConfig(config.servers); ``` ### Technical Analysis Per-agent isolation is a declared security property of the Skill. However, when an exact server name is not found, the backend searches all Pipedream MCP servers using only the app-slug suffix. If two agents use the same application, this lookup can select the first matching server belonging to a different agent. The global disconnect method also deletes ...[truncated 1631 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
reference/pipedream-backend.ts:1128
Finding

Shell Command Construction Uses Interpolated MCP Server Names

Content
View full analysis
= []; try { const result = execSync(`mcporter list ${serverToTest} --schema --json 2>/dev/null`, { timeout: 15000, encoding: "utf-8", env: execEnv, cwd: process.env.HOME ? `${process.env.HOME}/.openclaw/workspace` : undefined, }); ``` A similar command is used during activation: ```ts const result = execSync(`mcporter list ${serverName} --schema --json 2>/dev/null`, { timeout: 15000, encoding: "utf-8", env: execEnv, cwd: process.env.HOME ? `${process.env.HOME}/.openclaw/workspace` : undefined, }); ``` ### Technical Analysis `execSync()` executes string commands through a shell. `serverToTest` may be obtained from an existing key in `mcporter.json` through the suffix fallback lookup. Existing configuration keys are not validated immediately before shell execution. Shell metacharacters in a crafted server key—such as semicolons, command substitutions, redirections, or logical operators—would be interpreted as shell syntax rather than as part of a single `mcporter` argument. Server names generated by `ensureMcporterServer()` are sanitized. Therefore, exploitation requires a malicious or externally writable pre-existing MCP configuration entry, or another path capable of introducing an unsafe server key. The shell construction nevertheless turns configuration corruption into code executio ...[truncated 1225 chars]
Remediation
View remediation
/dev/null`; capture or ignore `stderr` through the child-process API. 3. Validate server names against a strict canonical pattern before execution, such as: ```text ^pipedream-[a-z0-9-]+-[a-z0-9-]+$ ``` 4. Remove suffix-based server selection and require an exact agent-owned server match. 5. Verify the ownership and permissions of every discovered `mcporter.json` file. 6. Avoid inheriting an untrusted `PATH`; resolve and execute a trusted absolute path to `mcporter`. 7. Add regression tests containing shell metacharacters in configuration keys and confirm they are rejected without execution. ]]>
Vulnerability Patterns
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • YARA SignaturesMalware Match, Webshell Match, Cryptominer Match
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
Findings (86)

YARA rule 'agent_skill_credential_exfiltration_webhook': AI agent skill credential harvesting followed by webhook or external exfiltration [agent_skills]

Critical
Category
YARA Match
Confidence
85% confidence
Finding

YARA rule matched a known malware signature (reverse shell, backdoor, ransomware, C2 framework, or info stealer).

Content

Scanner excerpt · reference/pipedream-backend.ts (reported line 127)May include surrounding context.

ts
tials = readPipedreamCredentials();

  if (credentials) {
    const accessToken = await getPipedreamAccessToken(credentials.clientId, credentials.clientSecret);
    let cursor: string | undefined;

    while (true) {
      const url = new URL(`https://api.pipedream.com/v1/connect/${credentials.projectId}/apps`);
      if (cursor) url.searchParams.set("after", cursor);
      const response = await fetch(url.toString(), {
        headers: {
          Authorization: `Bearer ${accessToken}`,
          "x-pd-environment": credentials.environment,
        },
      });
      if (!response.ok) {
        throw new Error(`Pipedream catalog fetch failed: ${response.status}`);
      }

      const data = (await response.json()) as {
        data?: Array<{
          id?: string;
          name?: string;
          name_slug?: string;
          description?: string;
          categories?: string[];
          app_hid?: string;
          img_src?: string;
        }>;
        page_info?: { end_cursor?:

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 · CHANGELOG.md (reported line 40)May include surrounding context.

md
- `PIPEDREAM_CLIENT_ID` and `PIPEDREAM_CLIENT_SECRET` are stored in the OpenClaw vault:
  - `~/.openclaw/secrets.json`
- non-secret Pipedream config is stored in:
  - `~/.openclaw/workspace/config/pipedream-credentials.json`
- mcporter server entries are stored in:
  - `~/.openclaw/workspace/config/mcporter.json`
- OAuth access tokens may appear in mcporter Authorization headers and should be treated as sensitive short-lived credentials

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 · CHANGELOG.md (reported line 42)May include surrounding context.

md
- `PIPEDREAM_CLIENT_ID` and `PIPEDREAM_CLIENT_SECRET` are stored in the OpenClaw vault:
  - `~/.openclaw/secrets.json`
- non-secret Pipedream config is stored in:
  - `~/.openclaw/workspace/config/pipedream-credentials.json`
- mcporter server entries are stored in:
  - `~/.openclaw/workspace/config/mcporter.json`
- OAuth access tokens may appear in mcporter Authorization headers and should be treated as sensitive short-lived credentials

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 · CHANGELOG.md (reported line 43)May include surrounding context.

md
- `PIPEDREAM_CLIENT_ID` and `PIPEDREAM_CLIENT_SECRET` are stored in the OpenClaw vault:
  - `~/.openclaw/secrets.json`
- non-secret Pipedream config is stored in:
  - `~/.openclaw/workspace/config/pipedream-credentials.json`
- mcporter server entries are stored in:
  - `~/.openclaw/workspace/config/mcporter.json`
- OAuth access tokens may appear in mcporter Authorization headers and should be treated as sensitive short-lived credentials

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 · CHANGELOG.md (reported line 44)May include surrounding context.

md
- `PIPEDREAM_CLIENT_ID` and `PIPEDREAM_CLIENT_SECRET` are stored in the OpenClaw vault:
  - `~/.openclaw/secrets.json`
- non-secret Pipedream config is stored in:
  - `~/.openclaw/workspace/config/pipedream-credentials.json`
- mcporter server entries are stored in:
  - `~/.openclaw/workspace/config/mcporter.json`
- OAuth access tokens may appear in mcporter Authorization headers and should be treated as sensitive short-lived credentials

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 · INSTALL.md (reported line 12)May include surrounding context.

md
- `PIPEDREAM_CLIENT_ID` and `PIPEDREAM_CLIENT_SECRET` are stored in the OpenClaw vault:
  - `~/.openclaw/secrets.json`
- non-secret Pipedream config is stored in:
  - `~/.openclaw/workspace/config/pipedream-credentials.json`
- mcporter server entries are stored in:
  - `~/.openclaw/workspace/config/mcporter.json`
- OAuth access tokens may appear in mcporter Authorization headers and should be treated as sensitive short-lived credentials

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 · INSTALL.md (reported line 68)May include surrounding context.

md
- `PIPEDREAM_CLIENT_ID` and `PIPEDREAM_CLIENT_SECRET` are stored in the OpenClaw vault:
  - `~/.openclaw/secrets.json`
- non-secret Pipedream config is stored in:
  - `~/.openclaw/workspace/config/pipedream-credentials.json`
- mcporter server entries are stored in:
  - `~/.openclaw/workspace/config/mcporter.json`
- OAuth access tokens may appear in mcporter Authorization headers and should be treated as sensitive short-lived credentials

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 · INSTALL.md (reported line 130)May include surrounding context.

md
- `PIPEDREAM_CLIENT_ID` and `PIPEDREAM_CLIENT_SECRET` are stored in the OpenClaw vault:
  - `~/.openclaw/secrets.json`
- non-secret Pipedream config is stored in:
  - `~/.openclaw/workspace/config/pipedream-credentials.json`
- mcporter server entries are stored in:
  - `~/.openclaw/workspace/config/mcporter.json`
- OAuth access tokens may appear in mcporter Authorization headers and should be treated as sensitive short-lived credentials

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 · SKILL.md (reported line 127)May include surrounding context.

md
- `PIPEDREAM_CLIENT_ID` and `PIPEDREAM_CLIENT_SECRET` are stored in the OpenClaw vault:
  - `~/.openclaw/secrets.json`
- non-secret Pipedream config is stored in:
  - `~/.openclaw/workspace/config/pipedream-credentials.json`
- mcporter server entries are stored in:
  - `~/.openclaw/workspace/config/mcporter.json`
- OAuth access tokens may appear in mcporter Authorization headers and should be treated as sensitive short-lived credentials

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 · reference/pipedream-backend.ts (reported line 76)May include surrounding context.

ts
- `PIPEDREAM_CLIENT_ID` and `PIPEDREAM_CLIENT_SECRET` are stored in the OpenClaw vault:
  - `~/.openclaw/secrets.json`
- non-secret Pipedream config is stored in:
  - `~/.openclaw/workspace/config/pipedream-credentials.json`
- mcporter server entries are stored in:
  - `~/.openclaw/workspace/config/mcporter.json`
- OAuth access tokens may appear in mcporter Authorization headers and should be treated as sensitive short-lived credentials

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 · reference/pipedream-backend.ts (reported line 212)May include surrounding context.

ts
- `PIPEDREAM_CLIENT_ID` and `PIPEDREAM_CLIENT_SECRET` are stored in the OpenClaw vault:
  - `~/.openclaw/secrets.json`
- non-secret Pipedream config is stored in:
  - `~/.openclaw/workspace/config/pipedream-credentials.json`
- mcporter server entries are stored in:
  - `~/.openclaw/workspace/config/mcporter.json`
- OAuth access tokens may appear in mcporter Authorization headers and should be treated as sensitive short-lived credentials

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 · reference/pipedream-backend.ts (reported line 221)May include surrounding context.

ts
- `PIPEDREAM_CLIENT_ID` and `PIPEDREAM_CLIENT_SECRET` are stored in the OpenClaw vault:
  - `~/.openclaw/secrets.json`
- non-secret Pipedream config is stored in:
  - `~/.openclaw/workspace/config/pipedream-credentials.json`
- mcporter server entries are stored in:
  - `~/.openclaw/workspace/config/mcporter.json`
- OAuth access tokens may appear in mcporter Authorization headers and should be treated as sensitive short-lived credentials

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 · reference/pipedream-backend.ts (reported line 242)May include surrounding context.

ts
- `PIPEDREAM_CLIENT_ID` and `PIPEDREAM_CLIENT_SECRET` are stored in the OpenClaw vault:
  - `~/.openclaw/secrets.json`
- non-secret Pipedream config is stored in:
  - `~/.openclaw/workspace/config/pipedream-credentials.json`
- mcporter server entries are stored in:
  - `~/.openclaw/workspace/config/mcporter.json`
- OAuth access tokens may appear in mcporter Authorization headers and should be treated as sensitive short-lived credentials

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 · reference/pipedream-backend.ts (reported line 443)May include surrounding context.

ts
- `PIPEDREAM_CLIENT_ID` and `PIPEDREAM_CLIENT_SECRET` are stored in the OpenClaw vault:
  - `~/.openclaw/secrets.json`
- non-secret Pipedream config is stored in:
  - `~/.openclaw/workspace/config/pipedream-credentials.json`
- mcporter server entries are stored in:
  - `~/.openclaw/workspace/config/mcporter.json`
- OAuth access tokens may appear in mcporter Authorization headers and should be treated as sensitive short-lived credentials

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 · reference/pipedream-backend.ts (reported line 449)May include surrounding context.

ts
- `PIPEDREAM_CLIENT_ID` and `PIPEDREAM_CLIENT_SECRET` are stored in the OpenClaw vault:
  - `~/.openclaw/secrets.json`
- non-secret Pipedream config is stored in:
  - `~/.openclaw/workspace/config/pipedream-credentials.json`
- mcporter server entries are stored in:
  - `~/.openclaw/workspace/config/mcporter.json`
- OAuth access tokens may appear in mcporter Authorization headers and should be treated as sensitive short-lived credentials

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 · scripts/pipedream-token-refresh.py (reported line 21)May include surrounding context.

python
- `PIPEDREAM_CLIENT_ID` and `PIPEDREAM_CLIENT_SECRET` are stored in the OpenClaw vault:
  - `~/.openclaw/secrets.json`
- non-secret Pipedream config is stored in:
  - `~/.openclaw/workspace/config/pipedream-credentials.json`
- mcporter server entries are stored in:
  - `~/.openclaw/workspace/config/mcporter.json`
- OAuth access tokens may appear in mcporter Authorization headers and should be treated as sensitive short-lived credentials

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 · scripts/pipedream-token-refresh.py (reported line 36)May include surrounding context.

python
- `PIPEDREAM_CLIENT_ID` and `PIPEDREAM_CLIENT_SECRET` are stored in the OpenClaw vault:
  - `~/.openclaw/secrets.json`
- non-secret Pipedream config is stored in:
  - `~/.openclaw/workspace/config/pipedream-credentials.json`
- mcporter server entries are stored in:
  - `~/.openclaw/workspace/config/mcporter.json`
- OAuth access tokens may appear in mcporter Authorization headers and should be treated as sensitive short-lived credentials

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 · scripts/pipedream-token-refresh.py (reported line 113)May include surrounding context.

python
- `PIPEDREAM_CLIENT_ID` and `PIPEDREAM_CLIENT_SECRET` are stored in the OpenClaw vault:
  - `~/.openclaw/secrets.json`
- non-secret Pipedream config is stored in:
  - `~/.openclaw/workspace/config/pipedream-credentials.json`
- mcporter server entries are stored in:
  - `~/.openclaw/workspace/config/mcporter.json`
- OAuth access tokens may appear in mcporter Authorization headers and should be treated as sensitive short-lived credentials

Credential Access

High
Category
Privilege Escalation
Confidence
94% confidence
Finding

The documentation instructs the operator to run cat ~/.openclaw/secrets.json, which prints the entire vault file containing client credentials to the terminal. This can expose secrets to shell history capture, terminal scrollback, session recordings, support screenshots, or logs, making credential compromise more likely during routine setup or troubleshooting.

Content

Scanner excerpt · INSTALL.md (reported line 74)May include surrounding context.

Vault

bash
cat ~/.openclaw/secrets.json

Confirm the Pipedream client credentials exist there.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The declared description portrays a broad integration layer for agent-to-app connections, per-agent OAuth isolation, MCP tool exposure, connected-account discovery, and dynamic catalog browsing. The actual code does not implement those user-facing integration behaviors. Instead, it performs a narrow operational task: obtaining a new OAuth access token using client credentials and propagating that token into local MCP server configuration. This is a materially different primary purpose from the declared functionality. While token maintenance could be related to supporting the integration, the code chunk itself neither manages per-agent OAuth isolation nor exposes tools, discovers accounts, or browses catalogs. It also accesses local secret stores and rewrites configuration files—capabilities not reflected in the declared description.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

The declared description emphasizes runtime integration features for OpenClaw agents with Pipedream: OAuth isolation, MCP tool exposure, account discovery, and catalog browsing. The actual code chunk does not implement those behaviors. Instead, it performs local system setup for scheduled maintenance by configuring cron, copying a refresh script, and managing filesystem/log paths. While token refresh may support an OAuth-based integration operationally, this code's primary purpose is system cron installation and scheduled execution, which is a materially different and undeclared capability.

Content

No source excerpt is available for this finding.

Credential Access

High
Category
Privilege Escalation
Confidence
88% confidence
Finding

Referencing a concrete local secrets file for clientId and clientSecret indicates direct handling of authentication material on disk. If that file is readable by other local users, included in backups, or accessed by over-privileged tooling, an attacker could steal OAuth client credentials and abuse the Pipedream integration.

Content

Scanner excerpt · SKILL.md (reported line 120)May include surrounding context.

Store clientId and clientSecret in the OpenClaw vault:

text
~/.openclaw/secrets.json

Non-secret config

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 · CHANGELOG.md (reported line 40)May include surrounding context.

md
import * as path from "node:path";
import type { GatewayRequestHandlers } from "./types.js";

// ── Vault (secrets.json) ──────────────────────────────────────────────────────

const VAULT_PATH = path.join(os.homedir(), ".openclaw", "secrets.json");
const VAULT_KEY_CLIENT_ID = "PIPEDREAM_CLIENT_ID";

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 · INSTALL.md (reported line 10)May include surrounding context.

md
import * as path from "node:path";
import type { GatewayRequestHandlers } from "./types.js";

// ── Vault (secrets.json) ──────────────────────────────────────────────────────

const VAULT_PATH = path.join(os.homedir(), ".openclaw", "secrets.json");
const VAULT_KEY_CLIENT_ID = "PIPEDREAM_CLIENT_ID";

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 · INSTALL.md (reported line 129)May include surrounding context.

md
import * as path from "node:path";
import type { GatewayRequestHandlers } from "./types.js";

// ── Vault (secrets.json) ──────────────────────────────────────────────────────

const VAULT_PATH = path.join(os.homedir(), ".openclaw", "secrets.json");
const VAULT_KEY_CLIENT_ID = "PIPEDREAM_CLIENT_ID";

Static analysis

Detected: suspicious.dangerous_exec, suspicious.env_credential_access, suspicious.exposed_secret_literal (+1 more)

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
reference/pipedream-backend.ts:980

Environment variable access combined with network send.

Critical
Code
suspicious.env_credential_access
Location
reference/pipedream-backend.ts:974

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
reference/pipedream-backend.ts:10

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
reference/pipedream-controller.ts:98

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
scripts/pipedream-token-refresh.py:117

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

Warn
Code
suspicious.potential_exfiltration
Location
reference/pipedream-backend.ts:225