Back to skill

Security audit

signal-track

Security checks for vulnerabilities and agentic risk

Overview

This skill does what it claims, but it handles a YouNews API key in a risky and under-disclosed way by taking it on the command line and storing it in plaintext local config.

Review this before installing if you would use a real YouNews account. Use a disposable or low-privilege API key where possible, avoid pasting secrets into shell history, check permissions on the OpenClaw or legacy config file, and revoke/rotate the key if it may have been exposed.

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

T09 · Insecure Skill Coding Practices

Warning
Location
src/cli.js:143
Finding

API Key Exposed Through Command-Line Arguments and Plaintext Configuration Storage

Content
View full analysis
{ const { apiKey: _legacyApiKey, endpointHint: _legacyEndpointHint, ...openclawBase } = rawConfig; return { ...openclawBase, skills: { ...rawConfig.skills, entries: { ...rawConfig?.skills?.entries, [SKILL_NAME]: { ...skillConfig, enabled: true, apiKey, }, }, }, }; })() : { ...rawConfig, apiKey, endpointHint: 'logged-in', }; const config = await writeConfig(nextConfig, targetPath); return config; } ``` ```js async function loginCommand(options, jsonMode) { const apiKey = options['api-key']; if (!apiKey) { throw new Error('Please provide api key: signal-track login --api-key '); } // use API-key header to verify key validity const result = getOutputPayload(await apiPost('/api/younews/subscription/identity/login', {}, { apiKey })); if (!result || result.code !== 200) { const msg = (result && (result.displayMessage || result.message)) || 'Login failed'; throw new Error(msg); } await persistLoginConfig(apiKey); ``` ### Technical Analysis The login inter ...[truncated 2191 chars]
Remediation
View remediation
` with a masked interactive prompt or a standard-input mechanism that does not place the secret in the process argument list. 2. If command-line input must remain supported for automation, clearly warn users about shell-history and process-list exposure and prefer a protected file descriptor or secret-manager integration. 3. Store the API key in the operating system's credential store rather than in a JSON configuration file. 4. Where file-based storage is unavoidable, create the configuration directory with mode `0700` and the credential file with mode `0600`. 5. Validate and, where safe, repair permissions on existing credential files before reading or updating them. 6. Consider separating non-sensitive OpenClaw configuration from authentication secrets so the general configuration file does not need to contain bearer credentials. 7. Provide logout and key-rotation commands that securely remove stored credentials and explain that previously exposed keys should be revoked server-side. 8. Continue restricting authenticated requests to the declared HTTPS origin and ensure redirects cannot forward the `Authorization` header to an untrusted host. ]]>
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Rogue AgentSelf-Modification, Session Persistence
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (9)

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
91% confidence
Finding

The skill clearly documents network-backed functionality, including API key validation and remote content retrieval, but does not declare any explicit tool scope or allowed-tools boundary. This weakens reviewability and consent because an agent may invoke network access implicitly, increasing the chance of unexpected data transmission to the remote service.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The skill states it reads and writes API keys and login state in local config files, including paths likely to contain credentials, but does not provide a clear warning or consent model around modifying those files. This creates risk of credential exposure, accidental overwrites, or persistence of secrets in locations the user did not expect.

Content

No source excerpt is available for this finding.

Session Persistence

Medium
Category
Rogue Agent
Confidence
71% confidence
Finding

The skill is explicitly designed for persistent topic tracking, subscriptions, and ongoing monitoring, which creates durable state about user interests and activity over time. That persistence is contextually expected, but without clear retention, visibility, and deletion controls it can expose sensitive monitoring patterns or leave long-lived session/state data that users do not fully understand.

Content

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

md
## Key capabilities

* Create and manage topics
* Subscribe/unsubscribe to topics
* Retrieve topic details by id
* Search within tracked signals

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The documented login validation and article/content retrieval imply sending API keys, topic interests, and search queries to a remote backend, yet the skill does not clearly warn users about that data flow. In a tracking/news-intelligence context, user interests and monitored topics can be sensitive and reveal business, political, or personal intent.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The test instructions direct users to run authentication and state-changing commands such as login, follow, and unfollow against a live-looking CLI interface without any warning about using real credentials, test accounts, or non-production environments. This can cause accidental use of sensitive API keys, unintended account changes, and backend mutations during routine validation, especially because the document presents the commands as normal test steps.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
82% confidence
Finding

The markdown contains a Chinese-only title ('检查清单') with no indication that the skill supports other languages or that a Chinese locale is required. Under the stated policy, forcing a specific language without user opt-in can be a natural-language policy violation.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The login flow persists the API key to a user config file on disk (~/.openclaw/openclaw.json or legacy ~/.signal-track/config.json) without any warning, consent, or visible discussion of local secret storage. If filesystem permissions are weak, backups/sync tools copy the file, or the host is shared/compromised, the bearer token can be recovered and reused to access the user's account.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
84% confidence
Finding

The request helper automatically includes the user's API key in the Authorization header for outbound HTTP requests, but the code provides no visible notice, prompt, or warning that credentials are being sent to a remote service. For a CLI skill, transmitting sensitive credentials over the network should be disclosed unless clearly warned elsewhere.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
95% confidence
Finding

The instruction 'Always keep commands in English' imposes a language constraint in natural language. Because the file does not provide a user opt-in or a clear justification for this locale requirement, it matches the policy category for language/locale restrictions.

Content

No source excerpt is available for this finding.