Back to skill

Security audit

Asana (PAT)

Security checks for vulnerabilities and agentic risk

Overview

This is a real Asana integration, but it needs review because it can use a long-lived Asana token to change or delete live workspace data, including bulk timeline changes, without built-in confirmation.

Install only if you trust the agent to operate in the connected Asana workspace. Use the least-privileged or most limited PAT available, avoid displaying stored apiKey values, test write commands in a test project first, and require human review before deletes, uploads, membership changes, or timeline-shift commands. Remove or rotate the PAT when it is no longer needed.

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
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Memory PoisoningPersistent Context Injection, Context Window Stuffing, Memory Manipulation
  • Rogue AgentSelf-Modification, Session Persistence
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
Findings (19)

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

md
## Setup (PAT)

1. Create a PAT: Asana → Developer App / PAT settings (see Asana docs: Personal access token).
2. Provide it to the runtime as `ASANA_PAT`.

### Recommended: store the PAT in OpenClaw config (non-interactive)

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

md
---
name: asana
description: "Manage Asana tasks, projects, briefs, status updates, custom fields, dependencies, attachments, events, and timelines via Personal Access Token (PAT)."
homepage: https://developers.asana.com/docs/personal-access-token
user-invocable: true
metadata: {"openclaw":{"requires":{"env":["ASANA_PAT"]},"primaryEnv":"ASANA_PAT","homepage":"https://developers.asana.com/docs/personal-access-token"}}

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

md
---
name: asana
description: "Manage Asana tasks, projects, briefs, status updates, custom fields, dependencies, attachments, events, and timelines via Personal Access Token (PAT)."
homepage: https://developers.asana.com/docs/personal-access-token
user-invocable: true
metadata: {"openclaw":{"requires":{"env":["ASANA_PAT"]},"primaryEnv":"ASANA_PAT","homepage":"https://developers.asana.com/docs/personal-access-token"}}

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

md
---
name: asana
description: "Manage Asana tasks, projects, briefs, status updates, custom fields, dependencies, attachments, events, and timelines via Personal Access Token (PAT)."
homepage: https://developers.asana.com/docs/personal-access-token
user-invocable: true
metadata: {"openclaw":{"requires":{"env":["ASANA_PAT"]},"primaryEnv":"ASANA_PAT","homepage":"https://developers.asana.com/docs/personal-access-token"}}

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 3)May include surrounding context.

md
---
name: asana
description: "Manage Asana tasks, projects, briefs, status updates, custom fields, dependencies, attachments, events, and timelines via Personal Access Token (PAT)."
homepage: https://developers.asana.com/docs/personal-access-token
user-invocable: true
metadata: {"openclaw":{"requires":{"env":["ASANA_PAT"]},"primaryEnv":"ASANA_PAT","homepage":"https://developers.asana.com/docs/personal-access-token"}}

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 11)May include surrounding context.

md
---
name: asana
description: "Manage Asana tasks, projects, briefs, status updates, custom fields, dependencies, attachments, events, and timelines via Personal Access Token (PAT)."
homepage: https://developers.asana.com/docs/personal-access-token
user-invocable: true
metadata: {"openclaw":{"requires":{"env":["ASANA_PAT"]},"primaryEnv":"ASANA_PAT","homepage":"https://developers.asana.com/docs/personal-access-token"}}

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/asana.mjs (reported line 5)May include surrounding context.

js
---
name: asana
description: "Manage Asana tasks, projects, briefs, status updates, custom fields, dependencies, attachments, events, and timelines via Personal Access Token (PAT)."
homepage: https://developers.asana.com/docs/personal-access-token
user-invocable: true
metadata: {"openclaw":{"requires":{"env":["ASANA_PAT"]},"primaryEnv":"ASANA_PAT","homepage":"https://developers.asana.com/docs/personal-access-token"}}

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

md
Authentication / PAT:

- Personal access token (PAT): https://developers.asana.com/docs/personal-access-token
- Authentication overview: https://developers.asana.com/docs/authentication

Rich text:

Memory Manipulation

High
Category
Memory Poisoning
Confidence
85% confidence
Finding

Skill manipulates agent memory, state, or stored context. Memory corruption can alter personality, override safety rules, or cause unpredictable behavior.

Content

Scanner excerpt · scripts/asana.mjs (reported line 516)May include surrounding context.

js
const w = args.workspace;
      if (!w) die("Usage: set-default-workspace --workspace <workspace_gid>");
      cfg.default_workspace_gid = String(w);
      // Do not overwrite contexts, etc.
      saveConfig(cfg);
      emit({ ok: true, default_workspace_gid: cfg.default_workspace_gid, config_path: getPrimaryConfigPath() });
      return;

Missing User Warnings

High
Category
Not specified by scanner
Confidence
95% confidence
Finding

The delete-attachment command issues a DELETE request directly against the Asana API and immediately emits the result. There is no confirmation prompt, warning comment, or user-facing disclosure near the deletion path, making an irreversible action easy to trigger silently.

Content

No source excerpt is available for this finding.

Missing User Warnings

High
Category
Not specified by scanner
Confidence
96% confidence
Finding

The timeline-shifting commands can rewrite dates across one task plus subtasks or an entire project, and the help text explicitly labels them 'use with care'. Despite the potentially broad and irreversible impact, the execution path performs bulk updates without any confirmation or mandatory dry-run step.

Content

No source excerpt is available for this finding.

Session Persistence

Medium
Category
Rogue Agent
Confidence
79% confidence
Finding

The README explicitly recommends storing the Asana PAT in persistent OpenClaw configuration, which creates session persistence for a powerful credential. If the local config store, workspace, or container environment is later accessed by another process, plugin, or user, the token can be reused to access and modify Asana data beyond the current session.

Content

Scanner excerpt · README.md (reported line 28)May include surrounding context.

md
## Setup (PAT)

1. Create a PAT: Asana → Developer App / PAT settings (see Asana docs: Personal access token).
2. Provide it to the runtime as `ASANA_PAT`.

### Recommended: store the PAT in OpenClaw config (non-interactive)

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
83% confidence
Finding

The README documents multiple state-changing operations against live Asana data, such as creating tasks, updating tasks, posting comments, and adding or removing tasks from projects, without an explicit warning that these commands modify remote workspace data. In an agent-skill context, that omission increases the chance of accidental execution against production projects or user tasks, especially when examples are copied verbatim.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
93% confidence
Finding

The skill explicitly requires environment access for a PAT and performs outbound network calls to the Asana API, but it does not declare any tool scope such as permissions or allowed-tools. That omission weakens least-privilege controls and reviewability, making it easier for an agent runtime to grant broader capabilities than readers of the manifest would expect.

Content

No source excerpt is available for this finding.

Session Persistence

Medium
Category
Rogue Agent
Confidence
80% 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.

Content

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

md
`node {baseDir}/scripts/asana.mjs create-section --project <project_gid> --name "Blocked"`

#### Add a task to a project

Command: `add-task-to-project`

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The script writes local configuration data to disk via fs.writeFileSync, which changes user state outside Asana. Although the help text mentions config helpers are stored locally, this code path itself has no confirmation prompt, logging, or inline warning at the write operation, so the file modification can happen silently when commands like set-context or use-context run.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
86% confidence
Finding

upload-attachment reads a local file from disk and sends its contents over the network to Asana using multipart form data. While uploading is part of the command purpose, there is no explicit runtime disclosure that a local file will be read and transmitted, which is safety-relevant for user data handling.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
82% confidence
Finding

append-inline-image fetches existing rich text and then updates html_notes or html_text, modifying remote user content in place. Even though the command name suggests editing, there is no explicit disclosure that the script will rewrite the target field contents, which is a user-data-affecting operation.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
84% confidence
Finding

The documentation states that the events command stores a sync token locally, but it gives no warning about filesystem persistence, retention, or multi-user/shared-run exposure. While a sync token is not equivalent to a PAT, persistent local state can leak operational metadata or be reused unexpectedly across sessions and sandboxes.

Content

No source excerpt is available for this finding.

Static analysis

Detected: suspicious.env_credential_access

Environment variable access combined with network send.

Critical
Code
suspicious.env_credential_access
Location
scripts/asana.mjs:175