Back to skill

Security audit

Signalgrid Push

Security checks for vulnerabilities and agentic risk

Overview

This notification skill mostly matches its purpose, but it asks users to enable a broad full tool profile and logs notification contents unnecessarily.

Review before installing. Use this only in an environment where enabling the full tool profile is acceptable, avoid putting secrets or sensitive personal/business data in notification titles or bodies, and remove or disable the debug logging before production use.

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

T09 · Insecure Skill Coding Practices

Warning
Location
signalgrid-push.js:56
Finding
Sensitive Notification Content Exposed Through Debug Logging## Vulnerability Details **File Location**: `signalgrid-push.js`, lines 56-58 **Vulnerability Type**: Sensitive data exposure through application logs **Risk Level**: Medium ### Vulnerable Code ```javascript console.log("DEBUG - Raw Process Args:", process.argv); const args = parseArgs(process.argv); console.log("DEBUG - Parsed Args Object:", args); ``` ### Technical Analysis The program writes both the complete process argument array and the parsed argument object to standard output. These structures contain the values supplied through `--title` and `--body`, which may include personal information, infrastructure details, incident data, access-related information, or other confidential notification content. Standard output from a skill may be retained in terminal history, OpenClaw execution logs, CI/CD logs, container logs, or centralized log aggregation systems. This creates an additional, undeclared storage and disclosure channel for notification content. Although the Signalgrid client key is read from the environment and is not included in these statements, the notification title and body are directly exposed. ### Attack Path 1. A user or automated workflow invokes the skill with confidential data in `--title` or `--body`. 2. The skill prints the complete command-line arguments and parsed values to standard output. 3. The execution environment stores or forwards that output to a persistent logging system. 4. A user, service, or compromised logging account with access to those logs retrieves the confidential notification content. No code execution or privilege escalation is obtained directly. Exploitation requires access to the generated logs, but it can disclose every notification processed by the skill. ### Impact Assessment The issue can expose the title and body of notifications to principals that have log access but are not authorized to receive the corresponding push notification. The scope includes all ...[truncated 234 chars]
Remediation
## Remediation Suggestions 1. Remove both debug logging statements from production code: ```javascript const args = parseArgs(process.argv); ``` 2. If diagnostic logging is required, make it explicitly opt-in through a disabled-by-default debug setting. 3. Never log raw argument arrays, notification bodies, credentials, channel identifiers, or complete request payloads. 4. Restrict diagnostics to non-sensitive metadata, such as whether required arguments were supplied or the normalized notification type. 5. Review existing execution and centralized logs for previously recorded notification content, then apply the organization’s retention and deletion procedures where appropriate. 6. Configure production logging systems to redact sensitive fields and enforce least-privilege access to retained logs.

T05 · Unauthorized Access and Privilege Escalation

Warning
Location
SKILL.md:68
Finding
Documentation Requires an Unnecessarily Broad Full Tool Profile## Vulnerability Details **File Location**: `SKILL.md`, line 68; corroborating instruction in `README.md`, lines 18-21 **Vulnerability Type**: Excessive permission requirement and violation of least privilege **Risk Level**: Medium ### Vulnerable Documentation `SKILL.md`: ```text - And ensure your OpenClaw **Tool Profile** is set to `full` ( Config -> Tools -> Tool Profile ) ``` `README.md`: ```markdown 3. **Set Tool Profile**: You MUST set the tool profile to **full**. Without this, the skill cannot reach the Signalgrid API. **Where to find it:** Settings -> Config -> tools -> tool profile ``` ### Technical Analysis The implementation performs a narrow operation: it runs under Node.js and sends an HTTPS POST request to `api.signalgrid.co`. The documentation nevertheless directs users to enable the OpenClaw `full` tool profile, which may make capabilities unrelated to sending a notification available to the agent. This conflicts with the principle of least privilege. The skill does not itself modify the profile or automatically bypass access controls; the exposure occurs when a user follows the setup instructions. Once a broad profile is enabled, malicious prompt content, an unrelated compromised component, or a future flaw may be able to invoke tools that were not needed for the notification task. ### Attack Path 1. A user follows the installation documentation and changes the OpenClaw tool profile to `full`. 2. The agent receives access to a broader set of tools than the Signalgrid skill requires. 3. Malicious prompt content, indirect prompt injection, or another compromised skill causes the agent to invoke one of those additional tools. 4. The unnecessary capability is used to access files, execute commands, or perform other actions permitted by the environment’s `full` profile. The exact privileges obtainable depend on the tools exposed by the local OpenClaw `full` profile. The reviewed ...[truncated 560 chars]
Remediation
## Remediation Suggestions 1. Replace the requirement for the `full` profile with the narrowest profile that permits Node.js execution and outbound HTTPS access. 2. Restrict outbound network access to `api.signalgrid.co` on TCP port 443 where the platform supports destination-level controls. 3. Document the exact capabilities required instead of instructing users to enable all tools. 4. If the platform currently cannot provide a sufficiently restricted profile, clearly disclose which additional permissions `full` grants and the risks of enabling them. 5. Recommend enabling the broad profile only for the shortest necessary period and in an isolated environment without unrelated secrets. 6. Apply the corrected least-privilege guidance consistently in both `SKILL.md` and `README.md`.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Rogue AgentSelf-Modification, Session Persistence
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (8)

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The README describes sending push notifications via Signalgrid but does not clearly warn users that message content will be transmitted to an external third-party API/service. Users may unknowingly send sensitive operational, personal, or business information off-platform, creating a privacy and data-handling risk.

Session Persistence

Medium
Category
Rogue Agent
Content
## Setup

1. **Create an Account**: Get your credentials at https://web.signalgrid.co

2. **Configure OpenClaw**: Add your credentials to your OpenClaw settings (typically `config.yaml` or through the dashboard):
Confidence
60% confidence
Finding
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.

Vague Triggers

Medium
Confidence
94% confidence
Finding
The README states that the AI 'automatically uses this skill when you ask for notifications or alerts,' which is a broad trigger that can match many ordinary user requests. In a skill that sends outbound messages to a third-party service, this increases the chance of unintentional invocation and unintended disclosure of task details or status updates to external devices/services.

Lp3

Medium
Category
MCP Least Privilege
Confidence
91% confidence
Finding
The skill declares environment-variable requirements but does not define an explicit tool scope such as permissions or allowed-tools. That weakens least-privilege guarantees and can cause the agent/runtime to grant broader capabilities than the skill actually needs, especially in environments where unspecified scope defaults are permissive.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The skill presents itself as a simple notification helper but does not clearly warn that titles and bodies are transmitted to Signalgrid, a third-party external service. Users or agents may include secrets, personal data, or internal operational details in notifications without understanding that the content leaves the local environment.

Vague Triggers

Medium
Confidence
97% confidence
Finding
The trigger phrases are broad everyday language like 'notify me', 'alert me', and 'send a push', which can cause the agent to invoke this skill in ambiguous contexts. Because the skill sends data to an external notification service, accidental invocation could exfiltrate sensitive conversational content or user data without clear user intent.

Missing User Warnings

Medium
Confidence
98% confidence
Finding
The script logs both raw process arguments and the parsed argument object, which can expose notification titles, bodies, and any other sensitive values passed on the command line. In many environments, stdout/stderr is captured by agent frameworks, CI systems, shell history tooling, or centralized logs, turning private message content into unintended data disclosure.

Missing User Warnings

Medium
Confidence
92% confidence
Finding
The code reads environment-based identifiers and sends client_key, channel, title, body, type, and critical status to api.signalgrid.co via POST. There is no confirmation prompt, user-facing notice, or explanatory comment warning that provided content and environment-derived identifiers will be transmitted off-host.

Static analysis

No suspicious patterns detected.