T09 · Insecure Skill Coding Practices
- Location
SKILL.md:926- Finding
Broad WhatsApp Event Export to a Public Third-Party Webhook
- Content
View full analysis
Vulnerability Details
File Location:
SKILL.md, lines 926–971
Vulnerability Type:T09: Insecure Skill Coding Practices
Risk Level: HighVulnerable Code
bash # Set Webhook POST /webhook/set/{instance} { "webhook": { "enabled": true, "url": "https://webhook.site/your-id", "headers": { "autorization": "Bearer TOKEN", "Content-Type": "application/json" }, "byEvents": false, "base64": false, "events": [ "APPLICATION_STARTUP", "QRCODE_UPDATED", "MESSAGES_UPSERT", "MESSAGES_UPDATE", "MESSAGES_DELETE", "SEND_MESSAGE", "CONTACTS_UPDATE", "PRESENCE_UPDATE", "CHATS_UPDATE", "CHATS_DELETE", "GROUPS_UPSERT", "GROUP_UPDATE", "GROUP_PARTICIPANTS_UPDATE", "CONNECTION_UPDATE", "LABELS_EDIT", "LABELS_ASSOCIATION", "CALL", "TYPEBOT_START", "TYPEBOT_CHANGE_STATUS" ] } } # Find Webhook GET /webhook/find/{instance}The document also states:
text - `byEvents` - If `true`, sends to separate URLs per event type - `base64` - If `true`, media comes as base64 in payloadTechnical Analysis
The Skill recommends
https://webhook.site/your-id, a public third-party webhook inspection service, while enabling a broad collection of WhatsApp events. These events can contain message content, contact details, chat metadata, call information, group membership, connection state, labels, and QR-code updates. Ifbase64is enabled, received media can also be included directly in webhook payloads.Network transmission is necessary for the declared webhook integration functionality and is not covert exfiltration. However, sending real WhatsApp data to a public testing service is not the minimum privilege necessary to demonstrate webhook functionality. The example lacks warnings about using synthet ...[truncated 1846 chars]
- Remediation
View remediation
Remediation Suggestions
- Replace the public testing-service example with an operator-controlled placeholder, such as
https://webhook.internal.example/evolution. - Add an explicit warning that public webhook collectors must only receive synthetic test data and must never be used with live conversations, contacts, QR codes, or media.
- Use a minimal event list by default, such as only
CONNECTION_UPDATE, and require users to opt in to each additional event. - Exclude
QRCODE_UPDATED,MESSAGES_UPSERT, contact events, chat events, and media payloads unless they are essential to the workflow. - Keep
base64disabled by default and explain that enabling it exports complete media content. - Require HTTPS with certificate validation and recommend destination allowlisting.
- Authenticate webhook requests with a strong secret and use cryptographic request signatures where supported.
- Redact unnecessary message fields, phone numbers, credentials, tokens, and metadata before forwarding.
- Apply retention limits, access controls, audit logging, and deletion policies at the webhook receiver.
- Document consent, privacy, and regulatory obligations before exporting third-party communications.
- Replace the public testing-service example with an operator-controlled placeholder, such as
