Back to skill

Security audit

WhatsApp Number Checker

Security checks for vulnerabilities and agentic risk

Overview

This skill does what it says by checking a phone number with an external WhatsApp-check API, but users should know queried numbers are sent to that provider.

Use this skill only when you are comfortable sending the queried phone number to wa-check-api.whatsabot.com or the configured MCP service. Avoid checking numbers without authorization or doing bulk enumeration, keep the API key in a protected secret store, and prefer deployments with clear retention, redaction, and abuse-control policies.

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
references/api.md:21
Finding
Phone Number Exposed in a GET Request Query String<![CDATA[ ## Vulnerability Details **File Location**: `references/api.md:21-29`, with usage examples at `references/api.md:58-70`; the REST fallback is prescribed by `SKILL.md:11-12` **Vulnerability Type**: Sensitive personal data exposure through URL query parameters **Risk Level**: Medium ### Vulnerable Code Snippet ```markdown ## Check if number is on WhatsApp **GET** `/api/wa/check` Verify whether a phone number is registered on WhatsApp. ### Query parameters | Parameter | Required | Description | |-----------|----------|--------------------------------------| | `phone` | Yes | E.164 or digits only, e.g. `34605797764` | ``` The documented examples implement the same behavior: ```bash curl --request GET \ --url "https://wa-check-api.whatsabot.com/api/wa/check?phone=34605797764" \ --header "x-api-key: YOUR_API_KEY" ``` ```javascript const res = await fetch('https://wa-check-api.whatsabot.com/api/wa/check?phone=34605797764', { headers: { 'x-api-key': process.env.API_KEY } }) const data = await res.json() // { code: 0, result: { exist: boolean } } ``` The Skill explicitly directs the Agent to use this endpoint: ```markdown 2. **If MCP is not configured or you need to call from code/scripts**: Use the REST API; see [references/api.md](references/api.md). Include the `x-api-key` header and request `GET /api/wa/check?phone=...`. Base URL is `https://wa-check-api.whatsabot.com`. ``` ### Technical Analysis The requested phone number is a personal identifier and is transmitted to an external service as part of the URL. Although HTTPS encrypts the request in transit, it does not prevent the complete URL from being recorded by the destination service or by trusted infrastructure that terminates TLS. Query strings are routinely captured in reverse-proxy access logs, API gateways, CDN records, application telemetry, browser or client diagnostics, shell history, and debugging systems. Consequently, using a GET query param ...[truncated 1931 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Replace the GET endpoint with an authenticated `POST /api/wa/check` endpoint and place the phone number in a JSON request body: ```http POST /api/wa/check Content-Type: application/json x-api-key: YOUR_API_KEY {"phone":"34605797764"} ``` 2. Configure the API service, reverse proxies, gateways, and observability tools to redact phone numbers and authorization credentials. Disable request-body logging for this endpoint where possible. 3. Remove real-looking phone numbers from documentation and tests. Use clearly reserved or synthetic examples. 4. Inform users before transmitting a phone number to `wa-check-api.whatsabot.com`, especially when the number may belong to a third party. Obtain explicit confirmation where appropriate. 5. Document the provider’s data retention, deletion, access-control, subprocessors, and privacy policies. Retain submitted identifiers only for the minimum period required to complete the lookup. 6. Apply server-side authorization, rate limiting, abuse monitoring, and anti-enumeration controls. The documented limit of 1,000 requests per hour may still permit substantial profiling. 7. Prefer the MCP integration only if it provides equivalent or stronger privacy guarantees; verify that it does not internally place the phone number in a logged URL. 8. Continue loading the API key from a protected secret store or environment variable. Never include it in URLs, examples, source control, exception messages, or application logs. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • 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
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (3)

Vague Triggers

Medium
Confidence
86% confidence
Finding
The manifest and body say to use the skill when the user asks to check whether a number 'has WhatsApp' or 'is using WhatsApp,' with several example phrasings but no explicit boundaries or negative examples. This can cause unintended invocation for general conversational mentions of WhatsApp and does not specify when the skill should not activate.

Missing User Warnings

Medium
Confidence
94% confidence
Finding
The skill instructs sending a user-supplied phone number to an external third-party API without warning about the data disclosure or obtaining informed consent. Because phone numbers are personal data, silently transmitting them can create privacy, compliance, and trust risks, especially in environments where users may assume processing is local.

Missing User Warnings

Medium
Confidence
94% confidence
Finding
This API reference documents sending phone numbers to a third-party service to determine whether they are registered on WhatsApp, but it provides no privacy, consent, retention, or lawful-use guidance. Phone numbers are personal data, and exposing a lookup workflow without data-handling warnings increases the risk of unauthorized enumeration, privacy violations, and noncompliant processing under applicable privacy laws or platform policies.

Static analysis

No suspicious patterns detected.