Back to skill

Security audit

whatsap-pro

Security checks for vulnerabilities and agentic risk

Overview

The skill is a coherent WhatsApp support responder, but its owner commands can change business responses and expose ticket data without explicit sender authorization.

Review before installing. Configure strict admin sender checks before enabling owner commands, minimize forwarded customer content, define retention/deletion rules for ticket memory, and disclose that WhatsApp messages are processed through Meta and may be escalated to the business owner.

Vulnerability Patterns
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • 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)

T05 · Unauthorized Access and Privilege Escalation

Error
Location
SKILL.md:189
Finding
Privileged Owner Commands Lack Sender Authentication and Authorization## Vulnerability Details **File Location**: `SKILL.md`, lines 189–199 **Vulnerability Type**: Missing authorization for privileged administrative commands **Risk Level**: High The skill defines commands that expose ticket information and modify operational state, but it does not instruct the agent to verify that the sender is the configured owner before executing them. ```markdown ## Commands (for the business owner) - **"open tickets"** — List all unresolved customer queries - **"resolve ticket #[id]"** — Mark a ticket as resolved - **"message stats"** — Today's volume, categories breakdown, response rate - **"add template [category] [message]"** — Update an auto-response template - **"pause responder"** — Temporarily stop auto-responses (owner handles manually) - **"resume responder"** — Re-enable auto-responses - **"set fees [text]"** — Update the fees information used in price responses ``` ### Technical Analysis The application processes messages received through a customer-facing WhatsApp webhook. Although the commands are described as being “for the business owner,” the skill contains no mandatory authorization procedure that compares the verified sender identifier against `ownerPhone`, `escalateToPhone`, or a dedicated administrator allowlist. A descriptive label is not an access-control boundary. If customer and owner messages reach the same command-processing context, an untrusted sender can submit text matching an administrative command. The agent may then execute that command because the documented behavior does not require sender verification. The affected operations include both read and write capabilities: - `open tickets` may disclose unresolved customer-query information. - `message stats` may disclose internal business activity. - `resolve ticket` may corrupt complaint and support workflow state. - `add template` may persist attacker-controlled response content. - `set fees` may alter pricing information presented to customers. - `paus ...[truncated 1689 chars]
Remediation
## Remediation Suggestions 1. **Enforce sender authorization before command parsing** - Obtain the sender identifier from verified WhatsApp webhook metadata rather than message text. - Normalize the identifier to a canonical phone-number format. - Compare it against a dedicated administrator allowlist. - Reject all administrative commands from senders that are not explicitly authorized. 2. **Separate customer and administrator processing** - Route customer messages only to classification and customer-response logic. - Route owner commands through a distinct authenticated handler. - Do not rely on prompts, command wording, display names, or self-asserted identity as authentication. 3. **Apply least privilege** - Separate read-only commands such as `message stats` from state-changing commands. - Restrict ticket access to authorized administrators. - Limit template and pricing changes to specifically authorized roles. 4. **Require confirmation for sensitive changes** - Use a second confirmation step for `pause responder`, `set fees`, and `add template`. - Display the proposed change and require confirmation from the same authenticated administrator. - Consider out-of-band confirmation for high-impact configuration changes. 5. **Validate and constrain administrator-controlled content** - Restrict supported template categories. - Enforce length and formatting limits. - Prevent templates from including unsafe links, fraudulent payment instructions, or unsupported placeholders. - Preserve known-good defaults and provide rollback functionality. 6. **Protect ticket data** - Return only the minimum information needed by the owner. - Redact customer phone numbers and sensitive message content where practical. - Define retention limits and access controls for ticket memory. 7. **Add audit logging and abuse controls** - Record the verified administrator identity, timestamp, command, previous value, and resulti ...[truncated 370 chars]
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
Findings (4)

Credential Access

High
Category
Privilege Escalation
Content
1. Create a Meta Business Account at business.facebook.com
2. Add a WhatsApp Business Account and register your phone number
3. Generate a permanent access token in Meta Developer settings
4. Set `WABA_ACCESS_TOKEN` and `WABA_PHONE_NUMBER_ID` in OpenClaw config
5. Configure your webhook URL to point to your OpenClaw gateway
6. Fill in your business profile in the skill config
Confidence
70% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Missing User Warnings

Medium
Confidence
91% confidence
Finding
The skill describes sending customer messages to Meta's WhatsApp Business API using an access-token authenticated request flow but does not warn users that their messages leave the local agent and are transmitted to a third-party service. This is a genuine transparency and privacy issue because operators may deploy the skill without adequately informing customers how their data is processed.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The skill explicitly instructs forwarding full customer conversations, names, and phone numbers to the owner over external messaging channels without any consent, minimization, or privacy notice. This creates a real privacy and data-handling risk because sensitive customer content may be disclosed more broadly than necessary and through channels with different retention or access controls.

Ssd 3

Medium
Confidence
96% confidence
Finding
The escalation workflow directs the agent to forward the full conversation and persist customer phone numbers, categories, and timestamps in memory. This is dangerous because it normalizes unnecessary disclosure and retention of personal data in natural-language instructions, increasing the chance of privacy violations, over-sharing, or later unintended exposure from logs or memory access.

Static analysis

No suspicious patterns detected.