Back to skill

Security audit

Baserow

Security checks for vulnerabilities and agentic risk

Overview

The skill is coherent for Baserow CRM work, but it exposes a live-looking static API token and gives unsafe instructions for handling a shared credential file and writing to live business data.

Do not install or use this version until the exposed Baserow token has been revoked and rotated, the token is removed from the skill and any package/history copies, and write examples are changed to use placeholders plus explicit confirmation before modifying live CRM rows. Avoid running the documented `cat` or `source` commands against a shared credential file.

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 (3)

T09 · Insecure Skill Coding Practices

Error
Location
SKILL.md:52
Finding
Hard-Coded Static Baserow API Token<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md`, lines 52-57 **Vulnerability Type**: Hard-coded credential and plaintext secret exposure **Risk Level**: High ### Vulnerable Code ```text The `.env` file **must** use real newlines between vars, NOT `\n` literals: BASEROW_BASE_URL="https://baserow.ericbone.me" BASEROW_TOKEN="<REDACTED_EXPOSED_PERSONAL_API_TOKEN>" ``` The token value is redacted in this report to avoid further disclosure. The reviewed file contains the complete plaintext credential. ### Technical Analysis The Skill embeds a concrete, real-looking personal Baserow API token in its documentation. The preceding authentication guidance describes this token as static and non-expiring. A credential stored in a distributable Skill file can be recovered by anyone with access to the package, source archive, logs, or agent context. Embedding this credential is not required for the declared Baserow CRUD functionality. The Skill metadata already declares `BASEROW_TOKEN` as a required environment variable, so the documentation should contain only a placeholder. Because the same file documents the target service, authentication header, table identifiers, and API routes, the exposed token is immediately actionable. ### Attack Path 1. An attacker obtains or reads the Skill package. 2. The attacker extracts the plaintext token from `SKILL.md`. 3. The attacker sends requests to the documented Baserow API using: ```http Authorization: Token <extracted-token> ``` 4. The attacker enumerates, reads, creates, or modifies rows accessible to that token. 5. Because the token is described as static and without expiry, access may continue until the token is explicitly revoked. ### Impact Assessment An attacker can obtain the same Baserow privileges granted to the exposed personal API token. The exact server-side permission scope is not established by the reviewed file, but it may include unauthorized access to or modification of CRM contact ...[truncated 245 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Revoke and rotate the exposed token immediately; removing it from the current file is insufficient if copies or repository history exist. 2. Search package archives, version-control history, logs, prompts, and generated artifacts for the exposed value and purge it where feasible. 3. Replace the token in documentation with a non-secret placeholder: ```text BASEROW_TOKEN="<your-baserow-api-token>" ``` 4. Supply credentials exclusively through a protected secret manager or runtime environment injection. 5. Use a dedicated service credential instead of a personal token. 6. Restrict the replacement credential to only the required database and CRUD operations. 7. Prefer an expiring or regularly rotated credential where the service supports it. 8. Add automated secret scanning to prevent credentials from being committed or packaged again. ]]>

T05 · Unauthorized Access and Privilege Escalation

Warning
Location
SKILL.md:61
Finding
Credential Disclosure Through Full .env File Output<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md`, line 61 **Vulnerability Type**: Excessive access to and disclosure of a shared credential file **Risk Level**: Medium ### Vulnerable Code ```text If written by an agent (e.g. `write` tool), verify with `cat ~/.openclaw/.env` — literal `\n` breaks `export $(grep ...)` silently. ``` ### Technical Analysis The Skill directs an agent to print the entire `~/.openclaw/.env` file merely to verify newline formatting. This violates least-privilege and data-minimization principles because checking whether required variables are separated by real newlines does not require revealing their values. The file is presented as a workspace-level environment file rather than a Baserow-only file. It may therefore contain the Baserow token and unrelated credentials. Output produced by `cat` can enter agent context, tool transcripts, terminal history, diagnostic logs, or user-visible output. This behavior exceeds the minimum privileges necessary for the Skill. The Skill needs access only to `BASEROW_BASE_URL` and `BASEROW_TOKEN`; it does not need to disclose the complete file. ### Attack Path 1. A user or agent writes or updates `~/.openclaw/.env`. 2. The agent follows the Skill's verification instruction. 3. `cat ~/.openclaw/.env` prints every variable and secret in the file. 4. The resulting output is captured in the agent context, tool trace, logs, or terminal transcript. 5. A party able to inspect those outputs obtains the disclosed credentials and can reuse them against their respective services. ### Impact Assessment The immediate impact is disclosure of the Baserow token. If the shared file contains other secrets, the compromise may extend to unrelated services and exceed the Skill's declared Baserow scope. The precise set of exposed privileges depends on the actual contents of `~/.openclaw/.env` and the permissions attached to each stored credential. The reviewed file does not establish those addition ...[truncated 81 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Remove the instruction to print the complete `.env` file. 2. Validate syntax with a purpose-built parser that reports only variable names, presence, and formatting status—not values. 3. Redact secret values from all diagnostics. For example, report: ```text BASEROW_BASE_URL: present BASEROW_TOKEN: present newline format: valid ``` 4. Store Baserow credentials separately from unrelated workspace secrets. 5. Restrict the credential file to its owner, such as with mode `0600`. 6. Prevent secret-bearing command output from being included in agent responses, persistent logs, or debug traces. 7. If disclosure through prior agent runs or logs may have occurred, rotate affected credentials and review retained transcripts. ]]>

T09 · Insecure Skill Coding Practices

Error
Location
SKILL.md:86
Finding
Arbitrary Shell Execution Through Sourcing a Shared Credential File<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md`, lines 86-102 **Vulnerability Type**: Unsafe execution of configuration as shell code **Risk Level**: High ### Vulnerable Code ```bash source ~/.openclaw/.env # or export from .env curl -s -X POST \ -H "Authorization: Token $BASEROW_TOKEN" \ -H "Content-Type: application/json" \ -d '{"Interaction title":"Example","Type":"Email","Sales Pipeline":[5],"Contact":[3]}' \ "$BASEROW_BASE_URL/api/database/rows/table/830/?user_field_names=true" ``` ```bash source ~/.openclaw/.env curl -s -X PATCH \ -H "Authorization: Token $BASEROW_TOKEN" \ -H "Content-Type: application/json" \ -d '{"Blockers":"Updated blocker text","Last Touch":"2026-02-24"}' \ "$BASEROW_BASE_URL/api/database/rows/table/827/5/?user_field_names=true" ``` ### Technical Analysis The shell built-in `source` does not parse a file as inert key-value configuration. It evaluates the file as shell code in the current process. Command substitutions, function definitions, redirections, shell options, and arbitrary commands in `~/.openclaw/.env` therefore execute before the intended Baserow request. If the file can be modified through another agent action, a compromised process, weak file permissions, or an unsafe setup workflow, invoking either documented write example creates a local code-execution path. The injected code inherits the invoking agent's operating-system privileges and environment. The declared functionality only requires reading two configuration values. Executing all content in a shared environment file is unnecessary and exceeds minimum privilege. ### Attack Path 1. An attacker gains the ability to modify `~/.openclaw/.env`, directly or through another vulnerable workflow. 2. The attacker inserts shell syntax, for example a command substitution or standalone command, alongside plausible environment assignments. 3. A user or agent follows the documented create-row or update-row procedure. 4. The shell execut ...[truncated 800 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Do not use `source`, `.`, or `eval` to load credential files. 2. Retrieve only `BASEROW_BASE_URL` and `BASEROW_TOKEN` through a non-executing configuration parser or inject them directly from a secret manager. 3. Strictly validate the base URL against an approved HTTPS origin before attaching the authorization header. 4. Reject duplicate keys, malformed assignments, command substitutions, control characters, and unexpected variable names. 5. Keep Baserow credentials in a dedicated file owned by the invoking user with mode `0600`. 6. Ensure parent directories are not writable by untrusted users or processes. 7. Run Baserow operations under a minimally privileged account and use a minimally scoped API token. 8. Replace the examples with a small helper that reads configuration as data and passes values to the HTTP client without shell evaluation. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Rogue AgentSelf-Modification, Session Persistence
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (9)

Credential Access

High
Category
Privilege Escalation
Content
- **BD Inbox** field can be used for intake linkage when that inbox object is present, but in-progress opportunity work should still live in Pipeline + Interactions.
- Keep Interactions to real sales interactions (no LinkedIn enrichment spam).

## ⚠️ Critical: .env Must Have Real Newlines

The `.env` file **must** use real newlines between vars, NOT `\n` literals:
Confidence
60% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
- **BD Inbox** field can be used for intake linkage when that inbox object is present, but in-progress opportunity work should still live in Pipeline + Interactions.
- Keep Interactions to real sales interactions (no LinkedIn enrichment spam).

## ⚠️ Critical: .env Must Have Real Newlines

The `.env` file **must** use real newlines between vars, NOT `\n` literals:
Confidence
60% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
- **BD Inbox** field can be used for intake linkage when that inbox object is present, but in-progress opportunity work should still live in Pipeline + Interactions.
- Keep Interactions to real sales interactions (no LinkedIn enrichment spam).

## ⚠️ Critical: .env Must Have Real Newlines

The `.env` file **must** use real newlines between vars, NOT `\n` literals:
Confidence
60% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
- **BD Inbox** field can be used for intake linkage when that inbox object is present, but in-progress opportunity work should still live in Pipeline + Interactions.
- Keep Interactions to real sales interactions (no LinkedIn enrichment spam).

## ⚠️ Critical: .env Must Have Real Newlines

The `.env` file **must** use real newlines between vars, NOT `\n` literals:
Confidence
60% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Context-Inappropriate Capability

High
Confidence
99% confidence
Finding
The documentation includes a real-looking personal API token directly in the skill instructions and explicitly states it is static and non-expiring. This exposes credentials to anyone who can read the skill and enables unauthorized access and modification of remote Baserow CRM data well beyond what is necessary to document the skill.

Natural-Language Policy Violations

High
Confidence
99% confidence
Finding
A specific personal API token is hard-coded in natural-language setup instructions, which is a direct secret disclosure. Because the same document also describes exact API endpoints and target tables, an attacker could immediately use the token to access or alter sensitive CRM records.

Session Persistence

Medium
Category
Rogue Agent
Content
PY
```

### Create row (use curl)
```bash
source ~/.openclaw/.env  # or export from .env
curl -s -X POST \
Confidence
60% confidence
Finding
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.

Missing User Warnings

Medium
Confidence
88% confidence
Finding
The skill provides concrete POST and PATCH examples that write directly to production CRM tables, but it does not prominently warn that these actions modify live remote business data. In an agent setting, this increases the chance of accidental or unauthorized changes because the examples are operational and target a specific real system.

External Transmission

Medium
Category
Data Exfiltration
Content
### Create row (use curl)
```bash
source ~/.openclaw/.env  # or export from .env
curl -s -X POST \
  -H "Authorization: Token $BASEROW_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"Interaction title":"Example","Type":"Email","Sales Pipeline":[5],"Contact":[3]}' \
Confidence
83% confidence
Finding
The curl example transmits data and authentication material to an external Baserow instance, which is expected for this skill but still represents outbound data flow to a live remote service. In context, the danger is elevated because the endpoint is a real CRM and the example performs a write operation using bearer-style token authentication.

Static analysis

No suspicious patterns detected.