Back to skill

Security audit

Mycobot

Security checks for vulnerabilities and agentic risk

Overview

The skill is a coherent WhatsApp Business integration, but it documents high-impact account actions and an unsafe API-key troubleshooting step without enough guardrails.

Install only if you trust Maton with your WhatsApp Business access and customer messaging data. Before using destructive operations, require explicit user confirmation naming the exact account, connection, template, or media ID, and do not print or paste MATON_API_KEY; use a presence-only environment-variable check instead.

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

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:599
Finding
API Key Exposure Through Troubleshooting Command## Vulnerability Details **File Location**: `SKILL.md`, lines 599–603 **Vulnerability Type**: Secret exposure through terminal output **Risk Level**: Medium ### Vulnerable Code ```bash echo $MATON_API_KEY ``` ### Technical Analysis The troubleshooting instructions tell users or agents to print the complete `MATON_API_KEY` value. Because this value is used as a bearer credential in the documented `Authorization` header, possession of it may be sufficient to authenticate to Maton services. Terminal output can be retained in agent tool transcripts, CI/CD logs, shell session recordings, screenshots, support tickets, or copied diagnostic output. Printing the secret therefore unnecessarily expands its exposure beyond the process environment. The command is not required to establish whether the variable exists; a presence-only check would provide the same diagnostic value without revealing the credential. ### Attack Path 1. A user or automated agent encounters an authentication problem. 2. It follows the troubleshooting instructions and runs `echo $MATON_API_KEY`. 3. The full bearer credential appears in terminal output. 4. That output is recorded in an agent transcript, build log, screen recording, or support material. 5. An attacker or unauthorized party with access to the recorded output extracts the key. 6. The exposed key is replayed against documented Maton gateway or connection-management endpoints, subject to the permissions and connections associated with that key. ### Impact Assessment Successful exploitation could allow an attacker to authenticate with the victim's Maton API key. Depending on the key's server-side permissions and connected accounts, this may expose connection metadata or permit WhatsApp Business operations, including sending messages, handling customer data, managing templates, accessing media-related endpoints, changing business-profile information, or deleting connections. The exact scope i ...[truncated 182 chars]
Remediation
## Remediation Suggestions Replace the secret-printing command with a presence-only test: ```bash if [ -n "${MATON_API_KEY:-}" ]; then echo "MATON_API_KEY is set" else echo "MATON_API_KEY is not set" fi ``` Additional hardening measures: - Explicitly warn users never to print, log, paste, or screenshot the API key. - Redact authorization headers and credentials from agent transcripts, application logs, CI output, and support bundles. - Use narrowly scoped API keys where Maton supports scope restrictions. - Rotate the key immediately if it has appeared in retained or shared output. - Add secret-detection checks to documentation review and CI pipelines to reject examples that output credential values. - Prefer a dedicated authentication-validation operation that returns only validity status and never reflects the submitted credential.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (11)

Tool Parameter Abuse

High
Category
Tool Misuse
Content
#### Delete Media

```bash
DELETE /whatsapp-business/v21.0/{media_id}
```

### Message Templates
Confidence
90% confidence
Finding
The skill exposes a destructive delete-media operation without any guardrails, confirmation guidance, or parameter validation advice. In an agent setting, attacker-influenced prompts or mistaken identifiers could cause irreversible deletion of business media assets and disrupt messaging workflows.

Tool Parameter Abuse

High
Category
Tool Misuse
Content
#### Delete Template

```bash
DELETE /whatsapp-business/v21.0/{whatsapp_business_account_id}/message_templates?name=template_name
```

### Phone Numbers
Confidence
92% confidence
Finding
Deleting templates is a high-risk action because templates may be business-critical and their removal can interrupt customer communications or compliance workflows. The skill presents the endpoint directly without safeguards, making prompt-driven misuse or accidental deletion more likely in an automated agent context.

Missing User Warnings

Medium
Confidence
93% confidence
Finding
The skill facilitates sending customer messages and media to an external third-party gateway and also exposes destructive delete operations, but the description does not warn users that customer data will leave the local environment or that some actions are irreversible. This can cause unintentional privacy violations or accidental destructive actions when an agent uses the skill without explicit user awareness.

External Transmission

Medium
Category
Data Exfiltration
Content
};

// Send text message
await fetch(
  'https://gateway.maton.ai/whatsapp-business/v21.0/PHONE_NUMBER_ID/messages',
  {
    method: 'POST',
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
};

// Send text message
await fetch(
  'https://gateway.maton.ai/whatsapp-business/v21.0/PHONE_NUMBER_ID/messages',
  {
    method: 'POST',
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
}

# Send text message
response = requests.post(
    'https://gateway.maton.ai/whatsapp-business/v21.0/PHONE_NUMBER_ID/messages',
    headers=headers,
    json={
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
}

# Send text message
response = requests.post(
    'https://gateway.maton.ai/whatsapp-business/v21.0/PHONE_NUMBER_ID/messages',
    headers=headers,
    json={
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
}

# Send text message
response = requests.post(
    'https://gateway.maton.ai/whatsapp-business/v21.0/PHONE_NUMBER_ID/messages',
    headers=headers,
    json={
Confidence
70% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
}

# Send text message
response = requests.post(
    'https://gateway.maton.ai/whatsapp-business/v21.0/PHONE_NUMBER_ID/messages',
    headers=headers,
    json={
Confidence
70% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Natural-Language Policy Violations

Low
Confidence
89% confidence
Finding
The template-message examples specify `en_US` as the language code, and the template creation example later fixes `language` to `en_US` as well. Because the documentation does not present this as a user choice or explain that it is merely an example, it can be interpreted as imposing a specific language/locale by default.

Natural-Language Policy Violations

Low
Confidence
90% confidence
Finding
This example sets the template `language` field to `en_US` and does not mention that other locales may be selected. Under the language/locale policy, documentation should avoid appearing to force a single locale unless it is optional or justified.