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

Content
View full analysis

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
View 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

Content
View full analysis

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
View 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
Category
Not specified by scanner
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.

Content

No source excerpt is available for this finding.

Session Persistence

Medium
Category
Rogue Agent
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.

Content

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

md
## 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):

Vague Triggers

Medium
Category
Not specified by scanner
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.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

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.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
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.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
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.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
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.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
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.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.