Back to skill

Security audit

WhatsApp Business Ops

Security checks for vulnerabilities and agentic risk

Overview

The skill is a disclosed WhatsApp Business operations guide that handles lead messaging and local state with clear opt-in, retention, and anti-spam controls.

Install only if you operate the WhatsApp Business number and have consent records for the leads. Use a scoped API token, configure your own timezone and retention values, keep alert destinations limited to approved staff, and avoid using this for legal, medical, or financial leads without privacy review.

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

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The configuration example specifies timezone: Europe/Paris, which imposes a locale-specific operating context. The document does not offer a timezone choice or explain that the skill is only intended for a France/Paris-specific deployment, so this can violate language/locale policy expectations.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
91% confidence
Finding

This skill explicitly sends lead phone numbers and API credentials to an external BSP over the network, and elsewhere permits forwarding lead identifiers to external alert channels. Although this is central to the skill's purpose, it still creates a real data-exposure boundary: misuse, misconfiguration, overbroad tokens, or insecure downstream systems could leak regulated personal data or allow unauthorized messaging.

Content

Scanner excerpt · SKILL.md (reported line 71)May include surrounding context.

After any message a user sends you, you have 24 h to reply in free-form. After 24 h of user silence, only Meta-approved templates, each billed as a new conversation. Free-form to a cold conversation → API rejection or a marketing-conversation bill + a quality hit; exit code 2, always skipped. Check window state before every outbound send:

bash
curl -s "https://app.whatchimp.com/api/v1/whatsapp/get/conversation" \
  -d "apiToken=<WA_API_KEY>" -d "phone_number_id=<WA_PHONE_NUMBER_ID>" \
  -d "phone_number=<DIGITS>" -d "limit=1"
# Output: {"status":1,"data":[{"sender":"user","created_at":"2026-07-16T09:12:04Z"}]}

Sudo/Root Execution

Medium
Category
Privilege Escalation
Confidence
80% confidence
Finding

Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.

Content

Scanner excerpt · SKILL.md (reported line 134)May include surrounding context.

md
|---|---|
| Minimize | Store phone + name + case type + status. Never store ID numbers, health details, case documents, or payment data in memory files — keep those in the system of record. |
| Mask | Key the duplicate registers on `sha256(phone)[0:12]`, not the raw number. Lookups work identically; a leaked log exposes nothing. |
| Restrict | `chmod 700 <WORKSPACE_DIR>/memory`. One number = one workspace. Never share `wa-template-log.md` across numbers or brands. |
| Retain | Leads 90 d after last contact, recaps 30 d, template log 30 d — then delete. Prune at the start of the daily run, not "someday": `find "<WORKSPACE_DIR>/memory" -name 'wa-recaps.md' -mtime +30 -delete` (silent — pruned, not archived). |
| Alert payload | Name + case type + phone only. Never paste conversation transcripts into the alert channel — it leaves your machine and is usually a wider audience than the case file. |
| Erase | On an opt-out or deletion request: purge every register, add the hash to `wa-blacklist.md`, confirm to the lead. Blacklist stores hashes only. |

Sudo/Root Execution

Medium
Category
Privilege Escalation
Confidence
80% confidence
Finding

Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.

Content

Scanner excerpt · SKILL.md (reported line 272)May include surrounding context.

md
|---|---|
| Minimize | Store phone + name + case type + status. Never store ID numbers, health details, case documents, or payment data in memory files — keep those in the system of record. |
| Mask | Key the duplicate registers on `sha256(phone)[0:12]`, not the raw number. Lookups work identically; a leaked log exposes nothing. |
| Restrict | `chmod 700 <WORKSPACE_DIR>/memory`. One number = one workspace. Never share `wa-template-log.md` across numbers or brands. |
| Retain | Leads 90 d after last contact, recaps 30 d, template log 30 d — then delete. Prune at the start of the daily run, not "someday": `find "<WORKSPACE_DIR>/memory" -name 'wa-recaps.md' -mtime +30 -delete` (silent — pruned, not archived). |
| Alert payload | Name + case type + phone only. Never paste conversation transcripts into the alert channel — it leaves your machine and is usually a wider audience than the case file. |
| Erase | On an opt-out or deletion request: purge every register, add the hash to `wa-blacklist.md`, confirm to the lead. Blacklist stores hashes only. |

Sudo/Root Execution

Medium
Category
Privilege Escalation
Confidence
80% confidence
Finding

Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.

Content

Scanner excerpt · SKILL.md (reported line 260)May include surrounding context.

memory/: wa-state.md (phase/tier/quality) · wa-alerts-sent.md · wa-template-log.md · wa-crm-state.md · wa-blacklist.md (hashes) · wa-clients-known.md · wa-recaps.md · wa-learnings.md · wa-incidents.md. Shared: ../shared/leads-whatsapp.json (written by upstream social agents, read by wa-outbound).

bash
mkdir -p "<WORKSPACE_DIR>/memory" && chmod 700 "$_" && cd "$_" && for f in wa-recaps wa-state \
  wa-alerts-sent wa-template-log wa-crm-state wa-blacklist wa-clients-known wa-learnings \
  wa-incidents; do [ -f "$f.md" ] || : > "$f.md"; done
mkdir -p "<WORKSPACE_DIR>/../shared" && Q="<WORKSPACE_DIR>/../shared/leads-whatsapp.json"

Static analysis

No suspicious patterns detected.