Back to skill

Security audit

Clawhub Skill Passive Income Tracker

Security checks for vulnerabilities and agentic risk

Overview

The skill is purpose-aligned, but it asks users to handle sensitive account/session credentials and send earnings data to messaging services without enough scoping or privacy warning.

Review before installing. Only use dedicated, revocable, read-only API tokens where possible; avoid pasting browser session tokens or private node keys into command lines; confirm where WhatsApp/Telegram alerts send earnings data; and verify the implementation really encrypts stored tokens and restricts outbound network destinations.

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

Warning
Location
SKILL.md:105
Finding

Grass Session Token Exposed Through Command-Line Arguments

Content
View full analysis

Vulnerability Details

File Location: SKILL.md, lines 105–112
Vulnerability Type: Sensitive credential exposure through process arguments
Risk Level: Medium

Vulnerable Code Snippet:

text
## Grass.io Setup

Getting your session token:
1. Login at app.getgrass.io in Chrome
2. Open DevTools → Application → Local Storage → app.getgrass.io
3. Copy `userId` and `accessToken` values
4. Paste into `passive-income-tracker add-app grass --token <accessToken>`

> Note: Grass.io doesn't have an official public API. This skill uses the same endpoints as the web dashboard. Token may expire; re-auth if earnings show as 0.

Technical Analysis

The documented workflow instructs users to extract an authenticated Grass access token from browser storage and pass it to the tracker as a command-line argument. Command-line credentials can be exposed through process inspection, shell tracing, command auditing, diagnostic collection, application error logs, terminal history, or wrapper scripts that record invocations.

The token is also intended for use with unofficial dashboard endpoints rather than a documented, scoped public API. Consequently, its effective permissions and revocation behavior cannot be established from the supplied project files. The package contains no implementation that would allow verification of token redaction, secure storage, destination validation, TLS enforcement, or the claim that credentials are encrypted at rest.

Network access is necessary for the declared earnings-tracking functionality, but collecting a browser session credential through a process argument exceeds the safest minimum mechanism for providing that credential.

Attack Path

  1. A user follows the documented setup procedure and retrieves the Grass accessToken from browser local storage.
  2. The user invokes passive-income-tracker add-app grass --token ....
  3. A local process, process-monitoring servic ...[truncated 1005 chars]
Remediation
View remediation

Remediation Suggestions

  • Do not accept session credentials directly through command-line arguments.
  • Prefer a scoped, official API credential if the provider makes one available.
  • Accept the token through interactive hidden input, an OS credential manager, or a protected credential file referenced by path.
  • If environment-variable input is supported, document its residual exposure risks and ensure subprocesses and diagnostics do not inherit or record the value unnecessarily.
  • Redact tokens from logs, exceptions, telemetry, process output, exported configuration, and support bundles.
  • Store credentials using authenticated encryption with keys held outside the same plaintext configuration and restrict relevant files to the owning user.
  • Validate that requests are sent only to an allowlisted Grass HTTPS origin, reject redirects to untrusted origins, and apply certificate verification.
  • Document token scope, expiration, rotation, and revocation procedures.
  • Add tests confirming that tokens never appear in logs, status output, process arguments, or exports.

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:129
Finding

Mysterium Private Node Key Material Exposed Through Command-Line Arguments

Content
View full analysis

Vulnerability Details

File Location: SKILL.md, lines 129–134
Vulnerability Type: Private key material exposed through process arguments and plaintext endpoint configuration
Risk Level: Medium

Vulnerable Code Snippet:

bash
## Mysterium Setup

# Mysterium node must be running locally (Docker or native)
# Default API port is 4449 (not 3478 — check your config)
passive-income-tracker add-app mysterium \
  --node-url "http://localhost:4449" \
  --token "$(cat ~/.mysterium/keystore/node.key)"

Technical Analysis

Command substitution reads the contents of ~/.mysterium/keystore/node.key and places them directly in the tracker's argument vector. Depending on the operating system and monitoring configuration, another local process or privileged diagnostic facility may observe this argument. The value may also be captured by shell tracing, command auditing, application diagnostics, or logs.

The filename indicates private node key material, although the supplied documentation refers to it as a token. The exact credential format and permissions cannot be verified because no executable implementation is included. Passing an entire keystore file where only a narrowly scoped API credential should be required risks granting more authority than the earnings-monitoring task needs.

The configured endpoint uses plaintext HTTP. The example is limited to localhost, which substantially reduces network interception risk, but the command accepts a configurable node URL. If users substitute a non-loopback address without transport protection, credentials and node data could traverse the network without encryption.

Attack Path

  1. A user executes the documented command.
  2. The shell reads ~/.mysterium/keystore/node.key and substitutes its contents into the --token argument.
  3. A local observer, auditing service, tracing facility, diagnostic collector, or tracker log records the resulting argument. 4 ...[truncated 1229 chars]
Remediation
View remediation

Remediation Suggestions

  • Never place private node keys or keystore contents directly in command-line arguments.
  • Use a dedicated, revocable, read-only API token scoped solely to earnings and status retrieval.
  • Accept credentials through interactive hidden input, a protected file descriptor, an OS credential manager, or a restricted credential-file path.
  • Preserve restrictive permissions on the keystore and do not copy its contents into configuration, logs, shell traces, or exported data.
  • Explicitly disable command and argument logging for credential-processing paths and redact secrets from all errors and diagnostics.
  • Require HTTPS with certificate validation for every non-loopback endpoint.
  • Reject non-loopback plaintext HTTP URLs by default; require an explicit security override if compatibility makes them unavoidable.
  • Bind the local node API only to loopback unless remote access is intentionally configured with authentication, TLS, and network access controls.
  • Document credential rotation and revocation steps in case process arguments or logs have already exposed the key.
  • Provide implementation and tests demonstrating least-privilege access, secure storage, URL validation, and secret redaction.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Rogue AgentSelf-Modification, Session Persistence
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (5)

Missing User Warnings

High
Category
Not specified by scanner
Confidence
97% confidence
Finding

The instructions tell users to extract browser session tokens and supply local node keys/tokens, but do not prominently warn that these are sensitive credentials that could grant account or node access if mishandled. Encouraging users to copy such secrets from browser storage or local keystores materially increases the risk of credential theft, reuse, accidental logging, and account compromise.

Content

No source excerpt is available for this finding.

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

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

Storj Setup

bash
# Get API key from Storj dashboard → Access → Create API Key
passive-income-tracker add-app storj \
  --satellite "eu1.storj.io:7777" \
  --api-key "your-16-char-key" \

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The skill advertises automatic WhatsApp/Telegram summaries of earnings without a clear warning that sensitive financial and account-activity data will be sent to external messaging platforms. This can expose private operational and earnings information to third parties or compromised messaging accounts, especially if notifications are enabled by default or with broad content.

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 · SKILL.md (reported line 123)May include surrounding context.

Storj Setup

bash
# Get API key from Storj dashboard → Access → Create API Key
passive-income-tracker add-app storj \
  --satellite "eu1.storj.io:7777" \
  --api-key "your-16-char-key" \

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The skill claims 'No telemetry, no cloud sync' while also documenting use of external APIs and delivery of reports over WhatsApp/Telegram. Even if there is no proprietary telemetry backend, this wording is misleading because user financial/account activity and tokens may still be transmitted to third-party services, creating a privacy and trust issue.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.