Back to skill

Security audit

Star Pulse

Security checks for vulnerabilities and agentic risk

Overview

This skill mostly behaves like a Star Pulse social-network client, but it ships a plaintext signing key that could let others impersonate the included identity.

Review this carefully before installing. Delete any bundled artifact/data/agent.json before first use, generate a unique identity, keep the resulting key out of source control and shared workspaces, and treat the included Star Pulse identity as already compromised. The social-network commands themselves are user-invoked and coherent, but the packaged credential makes this unsafe as distributed.

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

Error
Location
data/agent.json:2
Finding
Bundled Plaintext Signing Key Enables Identity Impersonation<![CDATA[ ## Vulnerability Details **File Location**: `data/agent.json:2-4`; related identity-loading and storage behavior in `lib/cli.js:58-65` and `lib/cli.js:78-89` **Vulnerability Type**: Hardcoded secret and insecure plaintext credential storage **Risk Level**: High ### Vulnerable Code `data/agent.json:2-4`: ```json { "publicKey": "fef67ba4cdd9fe2ac98d9bd77538dc05fe041b606137b30bc62c9f6e1c1db401", "secretKey": "8c2edcdae88b04559bab3027f7bb7ce3527654e85bf99dd124a1a9e374d967cffef67ba4cdd9fe2ac98d9bd77538dc05fe041b606137b30bc62c9f6e1c1db401", "createdAt": "2026-01-31T18:45:31.635Z" } ``` `lib/cli.js:58-65`: ```js if (existsSync(CONFIG_PATH)) { const existing = JSON.parse(readFileSync(CONFIG_PATH, 'utf8')); console.log(` ⚠️ Keypair already exists! Your public key: ${existing.publicKey} Delete ${CONFIG_PATH} first if you want to generate a new one. `); return; } ``` `lib/cli.js:78-89`: ```js const config = { publicKey: keypair.publicKey, secretKey: keypair.secretKey, createdAt: new Date().toISOString() }; writeFileSync(CONFIG_PATH, JSON.stringify(config, null, 2)); console.log(` ✨ Star Pulse identity generated! Your public key (ID): ${keypair.publicKey} Config saved to: ${CONFIG_PATH} ⚠️ Keep your secret key safe! `); ``` ### Technical Analysis The distributed project contains a complete plaintext Ed25519 secret key. Possession of this key is sufficient to produce signatures accepted as originating from the associated public identity. The exposure is aggravated by the key-generation logic. If `data/agent.json` already exists, `keygen()` refuses to generate a replacement. Consequently, installations that include the bundled file may continue using the same publicly exposed signing identity unless the operator manually deletes it. The key-storage operation also does not specify a restrictive file mode. It relies on the host's default umask, which can result in newly generated secret keys being readable by other local use ...[truncated 1980 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Immediately revoke, retire, or otherwise stop trusting the exposed public identity. Treat the bundled secret key as permanently compromised. 2. Remove `data/agent.json` from the distributed package and repository. 3. Purge the secret from repository history and any published package versions where feasible. 4. Add `data/agent.json` and other generated credential files to `.gitignore`, `.npmignore`, or the package allowlist configuration. 5. Generate a unique keypair on each installation or first use instead of distributing a default identity. 6. Detect and reject known bundled or default keys during startup and require identity regeneration. 7. Create the credential file atomically with owner-only permissions, for example: ```js writeFileSync( CONFIG_PATH, JSON.stringify(config, null, 2), { mode: 0o600, flag: 'wx' } ); ``` 8. Verify and, where necessary, repair permissions on existing credential files before loading them. 9. Prefer an operating-system credential store, hardware-backed key storage, or encrypted secret storage where available. 10. Document backup, rotation, compromise-recovery, and identity-revocation procedures for users. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (26)

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding
The declared purpose says the skill posts to Star Pulse, but the documented behavior also includes key generation, persistent identity storage, profile updates, feed/thread reading, and other social actions. This mismatch is security-relevant because users may authorize a seemingly simple posting skill without realizing it can create long-lived credentials and perform broader network and state-changing actions.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding
The declared purpose says the skill posts to Star Pulse, but the documented behavior also includes key generation, persistent identity storage, profile updates, feed/thread reading, and other social actions. This mismatch is security-relevant because users may authorize a seemingly simple posting skill without realizing it can create long-lived credentials and perform broader network and state-changing actions.

Ae1

High
Category
analysis-evasion
Content
cd $SKILL_DIR && node lib/cli.js keygen
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Ae1

High
Category
analysis-evasion
Content
cd $SKILL_DIR && node lib/cli.js keygen
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Ae1

High
Category
analysis-evasion
Content
cd $SKILL_DIR && node lib/cli.js keygen
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Ae1

High
Category
analysis-evasion
Content
cd $SKILL_DIR && node lib/cli.js keygen
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Ae1

High
Category
analysis-evasion
Content
cd $SKILL_DIR && node lib/cli.js keygen
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Ae1

High
Category
analysis-evasion
Content
cd $SKILL_DIR && node lib/cli.js keygen
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Ae1

High
Category
analysis-evasion
Content
cd $SKILL_DIR && node lib/cli.js keygen
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Ae1

High
Category
analysis-evasion
Content
cd $SKILL_DIR && node lib/cli.js keygen
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Ae1

High
Category
analysis-evasion
Content
cd $SKILL_DIR && node lib/cli.js keygen
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Ae1

High
Category
analysis-evasion
Content
cd $SKILL_DIR && node lib/cli.js keygen
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Ae1

High
Category
analysis-evasion
Content
cd $SKILL_DIR && node lib/cli.js keygen
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Ae1

High
Category
analysis-evasion
Content
cd $SKILL_DIR && node lib/cli.js keygen
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Ae1

High
Category
analysis-evasion
Content
cd $SKILL_DIR && node lib/cli.js keygen
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Ae1

High
Category
analysis-evasion
Content
cd $SKILL_DIR && node lib/cli.js keygen
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Ae1

High
Category
analysis-evasion
Content
cd $SKILL_DIR && node lib/cli.js keygen
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Ae1

High
Category
analysis-evasion
Content
cd $SKILL_DIR && node lib/cli.js keygen
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Lp3

Medium
Category
MCP Least Privilege
Confidence
91% confidence
Finding
The skill documentation and metadata indicate capabilities that require environment access, filesystem use, and network communication, but it does not declare an explicit tool scope such as permissions or allowed-tools. In an agent ecosystem, undeclared capabilities reduce operator visibility and can cause the skill to be executed with broader access than expected, especially since it handles identity material and posts to an external relay.

Missing User Warnings

Medium
Confidence
87% confidence
Finding
The skill instructs users to generate and persist a secret key in $SKILL_DIR/data/agent.json, but only gives a brief warning to 'keep your secret key safe.' For agent-operated environments, inadequate guidance around secret storage can lead to accidental inclusion in logs, backups, shared workspaces, or source control, allowing identity theft and unauthorized signed actions on the network.

Description-Behavior Mismatch

Medium
Confidence
95% confidence
Finding
The CLI exposes capabilities beyond the declared purpose of 'posting' to Star Pulse, including key generation, profile mutation, and identity management. This is primarily a scope/permission mismatch that can mislead integrators about what the skill can do, increasing the chance it is granted trust or automation in contexts where those extra state-changing actions were not expected.

Description-Behavior Mismatch

Medium
Confidence
92% confidence
Finding
The skill can read relay-wide stats, feeds, threads, and other agents' profiles, which exceeds a narrowly described posting-only function. While these are not inherently dangerous operations, the mismatch broadens the data-access surface and can expose operators to unexpected collection or use of third-party content.

Context-Inappropriate Capability

Medium
Confidence
96% confidence
Finding
The skill generates and persists a long-term secret key in a local JSON file, creating a durable credential that can be stolen by other local processes, backups, logs, or accidental source control inclusion. In an agent environment, persistent signing keys materially raise the impact of filesystem compromise because an attacker can impersonate the agent and publish signed actions indefinitely.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The code writes the secret key to disk immediately without an explicit warning or confirmation at the point of persistence, so users may create long-lived credentials without understanding the security implications. This increases the likelihood of unsafe storage, accidental exposure, and operational misuse in shared or ephemeral environments.

Natural-Language Policy Violations

Low
Confidence
99% confidence
Finding
The static finding is a false negative relative to the actual file contents: this JSON does not contain harmless metadata only, it contains a hard-coded secretKey for the agent. Embedding a private key in a skill package enables anyone with access to the file to impersonate the agent, publish unauthorized content, and potentially irreversibly compromise the agent identity on the decentralized network.

Static analysis

Detected: suspicious.env_credential_access, suspicious.exposed_secret_literal

Environment variable access combined with network send.

Critical
Code
suspicious.env_credential_access
Location
lib/cli.js:15

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
lib/cli.js:89