Back to skill

Security audit

Zendesk

Security checks for vulnerabilities and agentic risk

Overview

The skill is a coherent Zendesk helper, but it asks the agent to keep a reusable Zendesk API token in a local Markdown memory file, which is too sensitive for the storage controls described.

Review before installing. Use a dedicated least-privilege Zendesk API identity, avoid saving the token in `~/zendesk/memory.md`, prefer a secure secret manager or tightly controlled environment variables, and confirm every state-changing action such as ticket updates, public comments, user creation, macro application, and bulk changes.

Vulnerability Patterns
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (2)

T09 · Insecure Skill Coding Practices

Error
Location
memory-template.md:10
Finding

Zendesk API Token Persisted in Plaintext Agent Memory

Content
View full analysis

Vulnerability Details

File Location: memory-template.md:10-13, memory-template.md:37-42, setup.md:48-53
Vulnerability Type: Plaintext sensitive credential storage
Risk Level: High

Vulnerable Code

memory-template.md:10-13:

markdown
## Credentials
subdomain: 
email: 
token: 

memory-template.md:37-42:

markdown
## Credential Security

- Store credentials in `~/zendesk/memory.md` or use environment variables
- Environment variables: ZENDESK_SUBDOMAIN, ZENDESK_EMAIL, ZENDESK_TOKEN
- Never echo credentials in responses
- Never commit credentials to any repo

setup.md:48-53:

markdown
In `~/zendesk/memory.md`:
- Credentials (subdomain, email, token)
- Common views they use
- Preferred ticket templates
- SLA targets if mentioned

Technical Analysis

The skill explicitly instructs the agent to save the Zendesk API token, account email, and tenant subdomain in ~/zendesk/memory.md. This is a plaintext Markdown file rather than a protected credential store. The instructions do not require restrictive directory or file permissions, encryption at rest, or exclusion from backup, synchronization, indexing, and diagnostic collection systems.

A Zendesk API token is a reusable authentication secret. Its effective permissions correspond to those of the associated Zendesk account. Merely warning against committing the file does not protect it from local disclosure, backups, accidental attachment, cloud synchronization, malware, or another local account when filesystem permissions are permissive.

Attack Path

  1. The user supplies a valid Zendesk API token during skill setup.
  2. Following setup.md, the agent writes the email, subdomain, and token to ~/zendesk/memory.md.
  3. The file is created without a documented requirement for mode 0600, directory mode 0700, encryption, or secret-manager protection.
  4. A local attacker, compromised process ...[truncated 1046 chars]
Remediation
View remediation

Remediation Suggestions

  • Remove the token field from the Markdown memory template.
  • Never store authentication secrets in agent memory, ordinary configuration files, exported reports, or conversation history.
  • Store the token in an operating-system keychain or established secret manager, such as macOS Keychain, Windows Credential Manager, Secret Service, or an organizational vault.
  • If file-based secret storage is unavoidable, use a dedicated credentials file outside agent memory, create its parent directory with mode 0700, create the file with mode 0600, and encrypt it at rest.
  • Store only a secret reference or credential identifier in ~/zendesk/memory.md.
  • Prefer a dedicated, least-privilege Zendesk integration account rather than a broadly privileged administrator account.
  • Document token rotation and revocation procedures.
  • If a token is disclosed through chat or existing memory files, revoke and rotate it rather than merely reminding the user.
  • Ensure credential files are excluded from source control, cloud synchronization, indexing, diagnostics, logs, exports, and backups unless those systems provide suitable secret protection.

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:40
Finding

Zendesk API Token Exposed Through Command-Line Authentication Arguments

Content
View full analysis

Vulnerability Details

File Location: SKILL.md:40-44, setup.md:24-26, api-reference.md:5-9
Vulnerability Type: Sensitive credential exposure through process arguments
Risk Level: Medium

Vulnerable Code

SKILL.md:40-44:

bash
# Test auth
curl -u "$ZENDESK_EMAIL/token:$ZENDESK_TOKEN" "https://$ZENDESK_SUBDOMAIN.zendesk.com/api/v2/users/me.json"

setup.md:24-26:

bash
curl -s -u "$EMAIL/token:$TOKEN" "https://$SUBDOMAIN.zendesk.com/api/v2/users/me.json" | jq .user.name

api-reference.md:5-9:

bash
AUTH="$EMAIL/token:$API_TOKEN"
BASE="https://$SUBDOMAIN.zendesk.com/api/v2"

Subsequent API examples pass this value directly to curl:

bash
curl -u "$AUTH" "$BASE/tickets.json"

Technical Analysis

The documented commands place the Zendesk email and API token in the argument supplied to curl -u. On systems where process command lines are visible to other local users, monitoring agents, process collectors, shell instrumentation, or diagnostic tools, the expanded authentication value may be observable while the request is running.

Quoting the shell variable prevents word splitting but does not prevent the shell from expanding the secret before creating the process. The resulting token may therefore appear in process inspection data or telemetry. Assigning the combined secret to AUTH also increases the chance that it will be inadvertently reused, logged, or exposed through shell diagnostics.

The request uses HTTPS, so the finding does not imply that the token is transmitted over the network in plaintext. The exposure occurs locally before or while curl executes.

Attack Path

  1. The skill receives or loads a valid Zendesk email and API token.
  2. The agent executes one of the documented curl -u commands.
  3. The shell expands $TOKEN, $ZENDESK_TOKEN, or $AUTH into the argument passed to curl.
  4. During execution, a local attacker ...[truncated 1064 chars]
Remediation
View remediation

Remediation Suggestions

  • Do not place API tokens directly in command-line arguments.
  • Prefer a supported secret input mechanism that avoids exposing the token in the process argument list, such as a protected credential file, OS credential helper, or carefully configured runtime secret provider.
  • If using a temporary curl configuration file, create it with mode 0600, store it in a private directory, prevent logging, and delete it immediately after use.
  • Avoid concatenating the email and token into a reusable shell variable such as AUTH.
  • Disable shell tracing before handling secrets and ensure commands containing credentials are not added to shell history or execution logs.
  • Configure endpoint monitoring and diagnostic systems to redact authentication arguments.
  • Use a dedicated least-privilege Zendesk API identity and rotate its token regularly.
  • Revoke and rotate any token suspected of having appeared in process telemetry, shell traces, or logs.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (14)

Ssd 3

High
Category
Not specified by scanner
Confidence
97% confidence
Finding

The skill's setup behavior is to collect credentials, validate them, and then use them for ongoing help, which normalizes the handling of sensitive secrets by the agent. Combined with later persistence instructions, this creates a durable credential-harvesting workflow that is broader than necessary for a support-assistance skill.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The skill explicitly instructs the agent to persist Zendesk credentials, including the API token, in local and main memory for future reuse. Long-term storage of live credentials expands the attack surface, creates unnecessary retention of secrets, and can expose account access to other skills, logs, or future prompt leakage unrelated to the immediate task.

Content

No source excerpt is available for this finding.

Ssd 3

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

These lines direct long-term storage of Zendesk credentials in both a local file and user main memory, making sensitive API access durable across sessions and contexts. This is especially dangerous because main memory may be accessible to unrelated future interactions, increasing the chance of cross-context leakage, misuse, or compromise.

Content

No source excerpt is available for this finding.

Missing User Warnings

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

The setup directs storing credentials in ~/zendesk/memory.md without any notice that sensitive authentication material will be written to disk. Users are not warned about retention, file location, or access implications, which undermines informed consent and can lead to accidental disclosure of privileged Zendesk access.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

This markdown file says to use the skill whenever a 'User needs to interact with Zendesk' and lists broad actions like automating workflows, but it does not define specific invocation phrases, boundaries, or negative examples. That ambiguity could cause the skill to be invoked for general support-related requests without enough context about when it should or should not apply.

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

Create Ticket

bash
curl -X POST "$BASE/tickets.json" -u "$AUTH" -H "Content-Type: application/json" \
  -d '{"ticket":{"subject":"Issue","comment":{"body":"Description"},"priority":"normal"}}'

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The authentication section demonstrates inline API credential usage in shell variables without warning about token secrecy, shell history, process-list exposure, or secure storage. Users may copy these examples into shared terminals, scripts, or logs and inadvertently leak Zendesk API tokens that grant broad access to support data and actions.

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

List Tickets

bash
curl -u "$AUTH" "$BASE/tickets.json"

Get Single Ticket

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The documentation includes create/update/bulk-update examples that will modify live Zendesk tickets and users if copied verbatim, but it does not warn operators that these are state-changing actions. In an agent skill context, this increases the chance of accidental production changes, ticket closure, public replies, or user creation against a real tenant.

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

Get Current User

bash
curl -u "$AUTH" "$BASE/users/me.json"

Search Users

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The skill explicitly instructs storing Zendesk API credentials in ~/zendesk/memory.md, which is a plaintext local markdown file. Even though the file is local and the skill says not to echo or commit secrets, storing long-lived API tokens in plaintext increases the risk of credential exposure through local compromise, backups, accidental sharing, or other tools reading the file.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The template normalizes saving credentials in a local markdown file without a prominent warning that this is sensitive plaintext storage and may be readable by other users, software, backups, or sync tools. Because this is a support-workflow skill rather than a secret-management tool, the context makes the credential-retention behavior less justified and therefore more dangerous.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The skill tells the agent to immediately test supplied credentials by sending them in an authenticated network request, but it does not clearly disclose that the credentials will be transmitted to Zendesk for verification. While contacting the legitimate service is operationally expected here, the lack of user-facing warning or consent around immediate transmission is a security and privacy weakness.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
81% confidence
Finding

This markdown file includes concrete curl examples showing credential-bearing authentication syntax, including an email and token format, but does not warn readers to avoid exposing tokens in shell history, shared terminals, or logs. For markdown files, SQP-2 applies when descriptions omit warnings about behaviors that could affect privacy or security, and these examples involve sensitive authentication data.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.