Back to skill

Security audit

WhatsApp Business Automation by WhatsAble

Security checks for vulnerabilities and agentic risk

Overview

The skill matches its Notifyer/WhatsApp purpose, but it handles powerful messaging and account credentials with weak destination validation and several high-impact backend deletion risks.

Review before installing. Use only the official NOTIFYER_API_BASE_URL, run commands in a private environment, avoid putting real passwords or API keys in shell history, CI logs, or agent transcripts, and treat the Developer API key as a long-lived secret. Verify IDs carefully before any delete or broadcast action, and be aware that some raw Notifyer backend endpoints are documented as public or weakly authenticated even where the script adds local safeguards.

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

T09 · Insecure Skill Coding Practices

Error
Location
skills/setup-notifyer/scripts/lib/notifyer-api.js:31
Finding

Authentication Tokens and Credentials Can Be Redirected to an Arbitrary HTTPS Host

Content
View full analysis
0) { const params = new URLSearchParams(); for (const [key, value] of Object.entries(query)) { if (Array.isArray(value)) { for (const v of value) params.append(`${key}[]`, String(v)); } else if (value !== undefined && value !== null) { params.set(key, String(value)); } } const qs = params.toString(); if (qs) url += `?${qs}`; } const headers = { "Content-Type": "application/json", Accept: "application/json", Origin: defaultOrigin, ...extraHeaders, }; const auth = authHeader(config); if (auth) headers["Authorization"] = auth; let res; try { res = await fetch(url, { method: method.toUpperCase(), headers, body: body !== undefined ? JSON.stringify(body) : undefined, }); ``` ### Technical Analysis The client verifies only that `NOTIFYER_API_BASE_URL` begins with the string `https://`. It does not parse the URL or confirm that its hostnam ...[truncated 2393 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
skills/setup-notifyer/scripts/login.js:48
Finding

Account Passwords Are Accepted Through Process-Visible Command-Line Arguments

Content
View full analysis
/cmdline`, endpoint monitoring software, shell history, job metadata, or orchestration logs. Although the project documentation acknowledges this condition, the implementation still requires the password as a CLI flag and provides no masked interactive input or protected file-descriptor option. Documentation alone does not eliminate the exposure. ### Attack Path 1. A user or agent invokes `login.js` with `--password `. 2. The password becomes part of the Node.js process command line. 3. During execution, another local process or monitoring component reads the command-line arguments. 4. The invocation may also be retained in shell history, CI logs, agent transcripts, or process telemetry. 5. The recovered password is used to authenticate to the Notifyer account. 6. If the account has elevated workspace privileges, the attacker receives the corresponding ad ...[truncated 616 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
skills/setup-notifyer/scripts/get-api-key.js:56
Finding

Long-Lived Developer API Key Is Printed to Both Standard Output and Standard Error

Content
View full analysis
Remediation
View remediation
`. 6. Add API-side rotation and revocation support for Developer API keys. 7. Ensure agent runtimes and CI workflows mark any secret-bearing output as sensitive and exclude it from retained transcripts. 8. Add response-redaction utilities to prevent accidental logging of fields named `api_key`, `authToken`, `password`, or `Authorization`. 9. Instruct users to revoke or replace any key that has already appeared in shared logs. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (394)

Ae3

High
Category
analysis-evasion
Confidence
90% confidence
Finding

Text artifact contains embedded NUL bytes

Content

No source excerpt is available for this finding.

Ae3

High
Category
analysis-evasion
Confidence
90% confidence
Finding

Text artifact contains embedded NUL bytes

Content

No source excerpt is available for this finding.

Ae3

High
Category
analysis-evasion
Confidence
90% confidence
Finding

Text artifact contains embedded NUL bytes

Content

No source excerpt is available for this finding.

Ae3

High
Category
analysis-evasion
Confidence
90% confidence
Finding

Text artifact contains embedded NUL bytes

Content

No source excerpt is available for this finding.

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
99% confidence
Finding

The README itself discloses that DELETE /webhook/dev/:id lacks server-side user authentication and that the endpoint remains public, with only a client-side ownership check in delete-webhook.js. Client-side prechecks are not a security boundary: an attacker can call the raw endpoint directly and delete webhooks by ID, potentially disabling integrations, event delivery, and downstream automations for other users.

Content

Scanner excerpt · README.md (reported line 651)May include surrounding context.

md
| **Outbound-only message history** | `get-conversation-log.js` shows messages sent by Notifyer. Inbound messages from customers are not in the log — view them in [chat.notifyer-systems.com](https://chat.notifyer-systems.com). |
| **No bulk send from chat scripts** | For bulk messaging, use `automate-notifyer/create-broadcast.js`. |
| **`note_auto` (AI note) is read-only** | AI-generated notes are written by Notifyer's internal AI — cannot be set or cleared via API. |
| **`DELETE /webhook/dev/:id` has no server-side user auth in Xano** | `delete-webhook.js` mitigates this with an ownership check (authenticated `GET` before `DELETE`). The raw API endpoint remains public — a Xano-side fix is still recommended. |
| **IO webhook ID is a text UUID** | Unlike integer dev webhook IDs. Always treat IO webhook IDs as strings. |
| **No token refresh endpoint** | When the JWT expires (HTTP 401), re-run `login.js` for a fresh token. |

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The description claims a comprehensive WhatsApp/Notifyer skill suite with many operational capabilities across three phases. However, the provided code chunk contains only PaxHeader metadata lines (mtime and provenance xattrs) associated with an archive entry, not actual JavaScript implementing those features. Because the actual supplied content does not demonstrate the declared functionality and instead appears unrelated packaging metadata, this is a material description-behavior mismatch.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The declared description describes a large, feature-rich WhatsApp operations suite. However, the provided code chunk contains only archive header metadata (PaxHeader entries such as mtime and provenance xattrs) and no executable JavaScript implementing broadcast creation or any other declared functionality. Because the actual content does not perform the described behavior and exposes no relevant capabilities, the description does not accurately represent this supplied code chunk.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The declared description claims a comprehensive multi-phase WhatsApp/Notifyer integration with many concrete capabilities. However, the provided code chunk contains only tar/PaxHeader metadata entries and provenance attributes, not executable JavaScript implementing template creation or any other described behavior. Because the actual supplied content does not implement the declared functionality and instead appears to be unrelated archive metadata, the description does not accurately represent the code chunk.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The provided code chunk consists solely of archive metadata entries (mtime and extended attribute provenance fields) associated with a file path, rather than executable JavaScript implementing Notifyer functionality. Because the declared description claims a comprehensive three-phase WhatsApp integration suite, but the actual supplied content shows no functional behavior at all, the description does not accurately represent this code chunk.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The description claims a broad operational skill suite with many Notifyer and WhatsApp management capabilities. However, the provided code chunk contains only tar/PaxHeader metadata lines and no executable JavaScript implementing any of those features. Because the actual supplied content does not perform the declared purpose and instead appears to be packaging metadata, this is a material description-to-behavior mismatch.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The declared description promises a large bundled WhatsApp/Notifyer skill suite with many operational capabilities across setup, automation, and chat. However, the provided code chunk contains only PaxHeader/archive metadata lines and no executable JavaScript implementing any of those functions. Because the actual supplied content does not demonstrate the stated behavior and instead appears to be packaging metadata unrelated to the declared purpose, this is a clear description-behavior mismatch.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The declared description promises a broad Notifyer skill suite with setup, automation, and chat functionality. However, the provided code chunk only contains PaxHeader metadata entries such as mtime and xattr provenance for delete-template.js, not executable JavaScript implementing any of those capabilities. Because the actual supplied content does not demonstrate the declared behavior and instead appears unrelated packaging metadata, this is a material mismatch between description and code.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The declared description describes a broad, fully functional suite covering signup, login, WhatsApp connectivity, templates, bots, campaigns, analytics, webhooks, and live chat operations. However, the provided code chunk contains only tar/PaxHeader metadata entries and no executable JavaScript implementing any of those features. Because the actual supplied content does not perform the declared purpose and instead appears to be packaging metadata unrelated to the described behavior, this is a clear description-behavior mismatch.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The declared description promises a broad operational WhatsApp/Notifyer feature suite across setup, automation, and chat. However, the provided code chunk only shows PaxHeader metadata lines (mtime and provenance extended attributes) associated with a tar/archive entry for get-bot.js. There is no executable logic demonstrating any of the declared functionality. Because the actual supplied content is materially different from the declared purpose and does not implement the claimed capabilities, this is a clear mismatch.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

This is a clear description-to-code mismatch. The declared purpose describes a large functional skill suite with many WhatsApp-related capabilities across three phases. However, the provided code chunk contains only tar/PaxHeader metadata and filesystem provenance attributes, not executable logic implementing any of those features. Because there is no observable behavior corresponding to the declared functionality, the supplied code does not accurately represent the description.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

Yes, this is a mismatch. The description claims a broad three-phase Notifyer skill suite with substantial WhatsApp account, automation, analytics, webhook, and chat capabilities. However, the provided code chunk contains only tar/PaxHeader metadata lines and no executable JavaScript implementing any of those features. Because the actual content is merely archive metadata rather than functional code, it does not accurately represent the declared purpose.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The declared description promises a broad WhatsApp/Notifyer integration suite with many operational capabilities. However, the provided code chunk contains only archive metadata lines (mtime and extended attribute records) for a PaxHeader entry, not JavaScript implementing those features. Because there is no executable logic demonstrating the declared functionality, the supplied code does not accurately represent the declared purpose.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The declared description promises a large multi-phase WhatsApp integration suite with extensive operational capabilities. However, the provided code chunk only contains PaxHeader/tar metadata fields and no executable JavaScript implementing templates, bots, campaigns, analytics, chat operations, or any API/resource access. Because the actual supplied content does not perform the described behavior and instead appears unrelated packaging metadata, this is a clear description-behavior mismatch.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The declared description promises a comprehensive WhatsApp/Notifyer integration suite with many operational capabilities across setup, automation, and chat. However, the provided code chunk contains only PaxHeader/tar metadata entries (mtime and provenance xattrs) for a JavaScript file path and does not implement or demonstrate any of the declared functions. This is a material mismatch because the actual supplied content has no observable business logic or capabilities related to the description.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The declared description promises a large suite of operational capabilities across setup, automation, and chat. However, the provided code chunk contains only tar/PaxHeader metadata entries and no executable JavaScript implementing any of those features. Because the actual supplied content does not perform the described functionality and instead appears to be archive metadata, the description does not accurately represent the behavior of this code chunk.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The declared description promises a broad WhatsApp/Notifyer integration suite with setup, automation, and chat capabilities. However, the provided code chunk contains only archive metadata entries (PaxHeader fields such as mtime and provenance xattrs) and no executable application logic implementing any of those features. This is therefore a material mismatch between declared purpose and actual behavior of the supplied code chunk.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The declared description promises a broad three-phase Notifyer integration with many operational capabilities. However, the provided code chunk only contains tar/PaxHeader metadata entries and no executable JavaScript implementing any of those features. Because the actual supplied content does not perform the declared behavior and instead appears to be unrelated packaging metadata, the description does not accurately represent the code chunk.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The declared description promises a broad, multi-phase WhatsApp/Notifyer integration with setup, automation, and chat management capabilities. However, the provided code chunk contains only PaxHeader/tar metadata entries (mtime and extended attribute provenance) for a JavaScript file path and does not expose any executable logic implementing those features. Because the actual supplied content does not match the declared functional purpose and provides no evidence of the described capabilities, this is a material description-behavior mismatch.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The declared description promises a broad three-phase Notifyer skill suite with many operational capabilities. However, the actual supplied code chunk only contains PaxHeader/tar metadata entries (mtime and xattr provenance fields) for a file path, not executable JavaScript implementing bot updates or any Notifyer features. Because the provided content does not carry out the declared purpose and instead appears to be packaging metadata unrelated to the described skill behavior, this is a clear description-behavior mismatch.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

Yes, this is a mismatch. The declared description claims a broad WhatsApp/Notifyer integration suite with setup, automation, analytics, webhooks, and chat capabilities. However, the provided code chunk only contains PaxHeader/tar metadata lines (mtime and provenance xattrs) for a JavaScript file path, not executable code implementing any of those features. Because the actual supplied content does not demonstrate the declared behavior and instead appears unrelated metadata, the description is not accurately represented by this code chunk.

Content

No source excerpt is available for this finding.

Static analysis

Detected: suspicious.env_credential_access, suspicious.secret_argv_exposure

Environment variable access combined with network send.

Critical
Code
suspicious.env_credential_access
Location
skills/automate-notifyer/scripts/lib/notifyer-api.js:31

Environment variable access combined with network send.

Critical
Code
suspicious.env_credential_access
Location
skills/chat-notifyer/scripts/delete-scheduled.js:45

Environment variable access combined with network send.

Critical
Code
suspicious.env_credential_access
Location
skills/chat-notifyer/scripts/lib/notifyer-api.js:31

Environment variable access combined with network send.

Critical
Code
suspicious.env_credential_access
Location
skills/chat-notifyer/scripts/send-attachment.js:68

Environment variable access combined with network send.

Critical
Code
suspicious.env_credential_access
Location
skills/setup-notifyer/scripts/lib/notifyer-api.js:31

Instructions pass high-value credentials through process argv.

Critical
Code
suspicious.secret_argv_exposure
Location
README.md:93

Instructions pass high-value credentials through process argv.

Critical
Code
suspicious.secret_argv_exposure
Location
skills/setup-notifyer/SKILL.md:199