Back to skill

Security audit

Teable Assistant

Security checks for vulnerabilities and agentic risk

Overview

The skill’s powerful Teable management features are disclosed, fit its purpose, and include controls for sensitive changes and scheduled work.

Use limited account permissions and verify the target project before changes. Check uploaded files, notification recipients, and app access settings; generated apps are open by default. Review package versions, protect saved CLI credentials, and approve scheduled behavior before activation.

Vulnerability Patterns
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Output HandlingUnvalidated Output Injection, Cross-Context Output, Unbounded Output
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
Findings (28)

Description-Behavior Mismatch

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

The declared purpose does not include Slack integration or workspace channel discovery. The supplied code directly accesses Slack resources, with no demonstrated connection to a Teable operation, making this an undeclared capability rather than an evident supporting implementation detail.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
MCP Tool Poisoning
Confidence
88% confidence
Finding

The chunk performs an external messaging action rather than a Teable operation. Although Slack notifications could support a Teable automation, this code shows no Teable interaction or automation linkage beyond the message text. Posting to Slack is therefore an undeclared capability in the supplied chunk.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
MCP Tool Poisoning
Confidence
86% confidence
Finding

The supplied chunk accesses Slack authentication resources rather than Teable resources. Although Slack could support an automation, the chunk establishes no connection to a declared Teable workflow. The comments mention messaging and channel/user lookup, but the executable code only retrieves tokens; it does not demonstrate Slack API calls, token transmission, or misuse.

Content

No source excerpt is available for this finding.

Incomplete referenced artifact analysis

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
- **`--base-id`**: omit by default; ask user only if a command fails. See [guides/base-id-reference.md](guides/base-id-reference.md).

Incomplete referenced artifact analysis

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
f/apply`, `authority enable/disable`, `authority role-*` | [authority-guide.md](guides/authority-guide.md) |

Incomplete referenced artifact analysis

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
**Records**: `record.value-format.md`

Incomplete referenced artifact analysis

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
**Automations**: `automation.trigger.md`, `automation.api.md`, `automation.send-email.md`

Incomplete referenced artifact analysis

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
**Integrations**: `integration.slack.md`

Incomplete referenced artifact analysis

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
**Reference**: `reference.url.md` (parse/build Teable resource URLs; published-app URL caveats)

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
80% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

Scanner excerpt · api-reference/automation.api.md (reported line 76)May include surrounding context.

Delete Records

text
DELETE /table/{tableId}/record/{recordId}              // Single
DELETE /table/{tableId}/record?recordIds=recA,recB    // Multiple

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
80% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

Scanner excerpt · api-reference/automation.api.md (reported line 77)May include surrounding context.

Delete Records

text
DELETE /table/{tableId}/record/{recordId}              // Single
DELETE /table/{tableId}/record?recordIds=recA,recB    // Multiple

📊 Aggregation / Statistics API

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 · guides/automation-guide.md (reported line 148)May include surrounding context.

md
## External Integrations

Use `integration list` to check connected services, `integration connect --provider slack` to start OAuth, and `integration get-token --integration-id intXXX` to get access tokens.

To use integrations in scripts:
1. `integration list` — get integration IDs

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 · guides/cli-install.md (reported line 36)May include surrounding context.

teable auth login --device-code

text

### Option 2: Personal Access Token

```bash
teable auth --token <your-personal-access-token> --endpoint https://app.teable.ai

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

text

Options:
- `--token` — Teable Personal Access Token (PAT), also settable via `TEABLE_TOKEN` or `TEABLE_PAT` env vars
- `--endpoint` — Teable server URL (default: `https://app.teable.ai`), also settable via `TEABLE_ENDPOINT` env var
- `--force` — overwrite existing config
- `--path <dir>` — takes a **directory**, writes `<dir>/.teable/cli/config.json` (e.g. `--path .` for a project-level config)

Self-Modification

High
Category
Rogue Agent
Confidence
85% confidence
Finding

Skill modifies its own code, configuration, or behavior at runtime. Self-modification enables an agent to escalate privileges, disable safety constraints, or install persistent backdoors.

Content

Scanner excerpt · guides/cli-install.md (reported line 45)May include surrounding context.

md
Options:
- `--token` — Teable Personal Access Token (PAT), also settable via `TEABLE_TOKEN` or `TEABLE_PAT` env vars
- `--endpoint` — Teable server URL (default: `https://app.teable.ai`), also settable via `TEABLE_ENDPOINT` env var
- `--force` — overwrite existing config
- `--path <dir>` — takes a **directory**, writes `<dir>/.teable/cli/config.json` (e.g. `--path .` for a project-level config)

### Auth management

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 · guides/cli-install.md (reported line 60)May include surrounding context.

md
Auth config is saved to `~/.teable/cli/config.json` by default.

## Getting a Personal Access Token

1. Log in to your Teable instance (e.g. https://app.teable.ai)
2. Go to **Settings** → **Personal Access Tokens**

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 · guides/cli-install.md (reported line 63)May include surrounding context.

md
## Getting a Personal Access Token

1. Log in to your Teable instance (e.g. https://app.teable.ai)
2. Go to **Settings** → **Personal Access Tokens**
3. Click **Create new token**, give it a name, and copy the generated token
4. Use it with `teable auth --token teable_pat_xxx`

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 · guides/data-import-guide.md (reported line 82)May include surrounding context.

md
`teable import-google-sheet` uses the native importer; each selected worksheet becomes a table. Import into an existing project when one is already the target, otherwise provide a space and project name to create a new project.

**Credential decision:** publicly shared spreadsheets need none. Otherwise the connected Google Sheets integration is resolved and refreshed automatically. Its `drive.file` scope can read only spreadsheets the user selected in Teable's **Import from Google Sheets** dialog; a 403/404 usually means the user must select that spreadsheet there once. Use an integration ID only to disambiguate connections, and a Google access token only as an explicit override.

**Workflow:**

MCP server referenced without pinned version: 'npx skills'.

Medium
Category
MCP Rug Pull
Confidence
93% confidence
Finding

Although this command installs a skill rather than referencing an MCP server, npx skills can download and execute an unpinned npm package with the invoking user's privileges. A compromised future release could execute malicious code, and the GitHub skill source is also unpinned; listing a source commit elsewhere in the README does not constrain the installation. This is a supply-chain exposure, not evidence that the current package or skill is malicious.

Content

No source excerpt is available for this finding.

Behavior Manipulation

Medium
Category
Prompt Injection
Confidence
70% confidence
Finding

Subtle instructions detected that may alter agent decision-making or introduce hidden biases.

Content

Scanner excerpt · api-reference/automation.api.md (reported line 126)May include surrounding context.

text

- Supported statistic functions include: `count`, `empty`, `filled`, `unique`, `max`, `min`, `sum`, `average`, `checked`, `unChecked`, `percentEmpty`, `percentFilled`, `percentUnique`, `percentChecked`, `percentUnChecked`, `earliestDate`, `latestDate`, `dateRangeOfDays`, `dateRangeOfMonths`, `totalAttachmentSize`.
- **Strongly recommended:** For any statistics/aggregation tasks, always use this endpoint instead of iterating records and computing aggregations manually.

## 🏗️ Fields API

The attachment workflow instructs uploading user files to remote storage without a privacy warning.

Medium
Category
Output Handling
Confidence
94% confidence
Finding

This section explicitly instructs the agent to transmit the file's binary contents to the storage URL returned by Teable, rather than merely listing an available API. Although it describes the upload mechanism, it does not warn that potentially sensitive file contents will leave the user's environment and be stored remotely.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · api-reference/automation.trigger.md (reported line 184)May include surrounding context.

Endpoint: The tool returns webhook.url (plus webhook.token for bearer auth), and teable automation get returns the same. External services POST JSON to that URL, with the bearer in the Authorization header:

text
curl -X POST <webhook.url> -H 'Authorization: Bearer <webhook.token>' -H 'Content-Type: application/json' -d '{"hello":"world"}'

Output Variables:

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · api-reference/integration.slack.md (reported line 29)May include surrounding context.

Send Message

javascript
const response = await fetch('https://slack.com/api/chat.postMessage', {
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${slackToken}`,

The rich-message example sends record data to Slack without a privacy or audience warning.

Medium
Category
Output Handling
Confidence
88% confidence
Finding

The example posts record names, statuses, and a record URL to the configured Slack channel. Although Slack messaging is the stated purpose, the instructions do not warn that these record details leave the source system and become visible to the channel's members.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · api-reference/integration.slack.md (reported line 46)May include surrounding context.

Rich Message with Blocks

javascript
await fetch('https://slack.com/api/chat.postMessage', {
  method: 'POST',
  headers: { 'Authorization': `Bearer ${slackToken}`, 'Content-Type': 'application/json' },
  body: JSON.stringify({

Static analysis

No suspicious patterns detected.