Back to skill

Security audit

EngageLab Web Push

Security checks for vulnerabilities and agentic risk

Overview

This is a coherent EngageLab Web Push integration, but it needs review because it can send broad push notifications and perform irreversible account/data operations without clear safety guardrails.

Install only if you intend to let an agent help operate an EngageLab Web Push account. Before using it, require explicit confirmation for broadcasts, schedule changes, and any user deletion; verify registration_id and schedule_id values first. Keep AppKey and Master Secret out of prompts/logs where possible, restrict the Python client to official HTTPS EngageLab hosts, and treat callback HMAC verification with timestamp and nonce replay checks as mandatory for production.

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

T09 · Insecure Skill Coding Practices

Error
Location
scripts/webpush_client.py:54
Finding

Basic Authentication Credentials Can Be Redirected to an Arbitrary Server

Content
View full analysis
dict: url = f"{self._base_url}{path}" resp = requests.request( method, url, auth=self._auth, headers=self._headers, json=payload, params=params, ) ``` ### Technical Analysis The constructor accepts an unrestricted caller-controlled `base_url`. The request method subsequently attaches the AppKey and Master Secret to every request through HTTP Basic Authentication. The implementation does not: - Require the HTTPS scheme. - Restrict destinations to documented EngageLab API hosts. - Reject embedded URL credentials or malformed authority components. - Explicitly constrain redirect behavior or verify the final authentication destination. As a result, a malicious or mistakenly configured `base_url` can cause the client to transmit credentials to an attacker-controlled server. Supplying an HTTP endpoint would additionally expose credentials and request data to network interception. Although sending credentials to EngageLab is necessary for the Skill's declared functionality, allowing those credentials to be sent to any caller-selected host exceeds the minimum privilege and trust boundary required. ### Attack Path 1. An attacker persuades a user, application, or agent to initialize the client with an attacker-controlled endpoint: ```python client = EngageLabWebPush( app_key, master_secret, base_ur ...[truncated 1180 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
references/callback-api.md:29
Finding

Callback Authentication Is Documented as Optional and Lacks Replay-Protection Guidance

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
Findings (10)

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
89% confidence
Finding

The documented scheduled-task deletion endpoint enables destructive state changes, but the skill does not describe validation, confirmation, or authorization safeguards around user-supplied schedule_id values. In an agent workflow, that can lead to deletion of the wrong task or execution of destructive actions from insufficiently verified input.

Content

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

md
- Create: `POST /v4/schedules` — Body: `name`, `enabled`, `trigger` (single / periodical / intelligent), `push` (same as Create Push body with platform web).
- Get: `GET /v4/schedules/{schedule_id}`.
- Update: `PUT /v4/schedules/{schedule_id}`.
- Delete: `DELETE /v4/schedules/{schedule_id}`.

Trigger types: **single** (time, zone_type), **periodical** (start, end, time, time_unit, point, zone_type), **intelligent** (backup_time: `"now"` or `"yyyy-MM-dd HH:mm:ss"`). Max 1000 valid scheduled tasks. See `doc/webpush/REST API/Scheduled Tasks API.md`.

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
95% confidence
Finding

The delete-user endpoint is highly sensitive because it removes a user and all associated data asynchronously and cannot be undone. Without strong guardrails around the registration_id parameter, an agent could be induced to delete arbitrary users through prompt ambiguity, mistaken identity, or maliciously supplied identifiers.

Content

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

md
## Delete User

`DELETE /v4/devices/{registration_id}` — Asynchronously deletes user and all related data. Cannot be restored. Batch deletion not supported.

## Statistics

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
90% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

Scanner excerpt · scripts/webpush_client.py (reported line 158)May include surrounding context.

python
return self._request("POST", f"/v4/devices/{registration_id}", payload)

    def delete_device(self, registration_id: str) -> dict:
        """Delete user and all related data (DELETE /v4/devices/{registration_id}). Async."""
        return self._request("DELETE", f"/v4/devices/{registration_id}")

    # ── Tag count ─────────────────────────────────────────────────────

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
90% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

Scanner excerpt · scripts/webpush_client.py (reported line 206)May include surrounding context.

python
return self._request("PUT", f"/v4/schedules/{schedule_id}", payload)

    def schedule_delete(self, schedule_id: str) -> dict:
        """Delete scheduled task (DELETE /v4/schedules/{schedule_id})."""
        return self._request("DELETE", f"/v4/schedules/{schedule_id}")

    # ── Statistics ────────────────────────────────────────────────────

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
96% confidence
Finding

The skill documents and enables outbound network interactions with EngageLab APIs, but the manifest does not declare an explicit tool scope or allowed-tools policy. That mismatch increases the risk of unintended or overly broad network use because callers and reviewers cannot verify what external access is expected or constrained.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

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

Example (curl):

bash
curl -X POST https://webpushapi-sgp.engagelab.com/v4/push \
  -H "Content-Type: application/json" \
  -u "YOUR_APP_KEY:YOUR_MASTER_SECRET" \
  -d '{ "from": "push", "to": "all", "body": { "platform": "web", "notification": { "web": { "alert": "Hello!", "title": "Web Push", "url": "https://example.com" } } } }'

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill includes an irreversible user-deletion endpoint and states that deleted data cannot be restored, but it does not require an explicit confirmation or safety check before use. In an agent context, that creates a real risk of accidental destructive actions from ambiguous prompts or automation mistakes.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The document describes callback authenticity verification as optional even though the endpoint receives message status data and can trigger business logic. If implementers skip signature validation, attackers can forge callback requests, poison analytics, trigger downstream actions, or exploit trust in unauthenticated webhook payloads.

Content

No source excerpt is available for this finding.

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
75% confidence
Finding

Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Content

Scanner excerpt · references/http-status-code.md (reported line 11)May include surrounding context.

md
|------|-------------|-------------|
| 200 | OK | Success. |
| 400 | Incorrect request | The request is invalid. The response body will explain the reason. |
| 401 | Not verified | No verification information or verification failed. |
| 403 | Rejected | The request was understood but not accepted. The response will explain. |
| 404 | Unable to find | The resource does not exist, or the requested format is not supported. |
| 405 | Request method not suitable | The operation does not support the request method. |

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
83% confidence
Finding

This code performs authenticated HTTP requests to a remote push service and is used by methods that send registration IDs, aliases, tags, message content, and scheduling data. While the module docstrings describe the API generally, there is no runtime confirmation prompt, logging, or explicit user-facing disclosure at the point these transmissions occur.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.