Back to skill

Security audit

Verified Agent Identity New

Security checks for vulnerabilities and agentic risk

Overview

This identity skill is purpose-aligned but needs Review because it creates, stores, and uses reusable identity private keys with weak default protection and broad signing/linking guidance.

Install only if you are comfortable with this agent creating and holding a reusable Billions identity key. Configure BILLIONS_NETWORK_MASTER_KMS_KEY before creating or importing any identity, protect $HOME/.openclaw/billions from backups and other local users, avoid passing real private keys on the command line, and require explicit human approval before signing challenges or linking identities.

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

T09 · Insecure Skill Coding Practices

Error
Location
scripts/shared/storage/keys.js:49
Finding

Private Keys May Be Stored in Plaintext with Permissive Filesystem Permissions

Content
View full analysis
` interface also places imported private keys in process arguments. Depending on the operating system and shell configuration, these values may be exposed through process inspection, command history, monitoring, or audit ...[truncated 1181 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/shared/storage/crypto.js:25
Finding

Password-Like Master Keys Use Fast, Unsalted SHA-256 Derivation

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/verifySignature.js:17
Finding

Authentication Challenges Are Not Expired or Consumed After Verification

Content
View full analysis
entry.did === did); if (index >= 0) { // Update existing entry entries[index] = { did, challenge, created_at }; } else { // Add new entry entries.push({ did, challenge, created_at }); } await this.writeFile(entries); } ``` ```js async getChallenge(did) { const entry = await this.find(did); return entry?.challenge; } ``` From `scripts/verifySignature.js:17-20, 47-58`: ```js // Get the stored challenge const challenge = await challengeStorage.getChallenge(args.did); if (!challenge) { console.error(`Error: No challenge found for DID: ${args.did}`); console.error("Generate a challenge first with generateChallenge.js"); process.exit(1); } ``` ```js // Verify the challenge matches const payload = basicMessage.body; if (payload.message !== challenge) { console.error( `Error: Invalid signature: challenge mismatch ${payload.message} !== ${challenge}`, ); process.exit(1); } outputSuccess("Signature verified successfully"); ``` ### Technical Analysis Challenge storage records `created_at`, but `getChallenge()` returns only the challenge value and verification never evaluates its age. Therefore, challenges have no effective expiration. After successful verification, the verifier immediately reports success without invoking the available `challengeStorage.delete()` method. The same stored challenge remains active until another challenge for that DID overwrites it. Consequen ...[truncated 1360 chars]
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • YARA SignaturesMalware Match, Webshell Match, Cryptominer Match
Findings (33)

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding

The skill is presented as an identity/verification utility, but its documented behavior includes local key management and storage of sensitive private key material, with plaintext storage possible when a master key is unset. This mismatch can cause operators or higher-level agents to trust and invoke the skill without realizing it performs secret generation, import, persistence, and retrieval operations.

Content

No source excerpt is available for this finding.

YARA rule 'agent_skill_prompt_injection_hidden_instructions': Prompt injection or hidden instructions embedded in AI agent skill text [agent_skills]

High
Category
YARA Match
Confidence
80% confidence
Finding

YARA rule matched a hack tool or exploit indicator (offensive tools, reconnaissance, privilege escalation, or exploit frameworks).

Content

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

nk agents to human identities using Billions ERC-8004 and Attestation Registries. Verify and generate authentication proofs. Based on iden3 self-sovereign identity protocol. metadata: { "category": "identity", "clawdbot": { "requires": { "bins": ["node"] }, "config": { "optionalEnv": ["BILLIONS_NETWORK_MASTER_KMS_KEY"] } } } homepage: https://billions.network/

When to use this Skill

Lets AI agents create and manage their own identities on the Billions Network, and link those identities to a human owner.

  1. When you need to link your agent identity to an owner.
  2. When you need to sign a challenge.
  3. When you need to link a human to the agent's DID.
  4. When you need to verify a signature to confirm identity ownership.
  5. When you use shared JWT tokens for authentication.
  6. When you need to create and manage decentralized identities.

After installing the plugin run the following commands to create an identity and link it to your human DID:

bash
cd scripts && npm inst

Credential Access

High
Category
Privilege Escalation
Confidence
93% confidence
Finding

The skill explicitly documents storage of highly sensitive identity material, including private keys and credentials, in a predictable local directory, with private keys potentially stored in plaintext if the master key is absent. In an agent environment, any over-broad filesystem access, logging, backup, or secondary skill compromise could expose these credentials and enable account takeover or fraudulent identity assertions.

Content

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

md
- `kms.json` - **CRITICAL**: Contains private keys (encrypted if BILLIONS_NETWORK_MASTER_KMS_KEY is set, otherwise in plaintext)
- `defaultDid.json` - DID identifiers and public keys
- `challenges.json` - Authentication challenges history
- `credentials.json` - Verifiable credentials
- `identities.json` - Identity metadata
- `profiles.json` - Profile data

Known Vulnerable Dependency: ws==8.18.0 — 2 advisory(ies): CVE-2026-45736 (ws: Uninitialized memory disclosure); CVE-2026-48779 (ws: Memory exhaustion DoS from tiny fragments and data chunks)

High
Category
Supply Chain
Confidence
95% confidence
Finding

ws 8.18.0 is flagged for memory disclosure and memory exhaustion issues, which are relevant in any component accepting untrusted WebSocket traffic. If this dependency is reachable by the skill or its transitive libraries, an attacker could trigger denial of service or potentially expose process memory.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: brace-expansion==2.0.2 — 4 advisory(ies): CVE-2026-13149 (brace-expansion: DoS via exponential-time expansion of consecutive non-expanding); CVE-2026-33750 (brace-expansion: Zero-step sequence causes process hang and memory exhaustion); CVE-2026-14257 (brace-expansion: DoS via unbounded expansion length causing an out-of-memory pro) +1 more

High
Category
Supply Chain
Confidence
89% confidence
Finding

brace-expansion 2.0.2 has multiple denial-of-service conditions involving pathological expansion inputs that can hang the process or exhaust memory. This becomes dangerous wherever glob-like patterns can be influenced by untrusted data, even indirectly through tooling or parsing libraries.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: fast-uri==3.1.0 — 7 advisory(ies): CVE-2026-13676 (fast-uri vulnerable to host confusion via failed IDN canonicalization); CVE-2026-18446 (fast-uri vulnerable to host confusion via backslash authority introducer); CVE-2026-75975 (fast-uri vulnerable to server-side request forgery via malformed IPv6 normalizat) +4 more

High
Category
Supply Chain
Confidence
93% confidence
Finding

fast-uri 3.1.0 is flagged for multiple URI parsing and canonicalization flaws including host confusion and SSRF-relevant edge cases. In an identity skill that may fetch schemas, DID documents, or remote registry resources, malformed URL handling can materially increase the risk of server-side request forgery or trust-boundary bypass.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: ws==7.5.10 — 1 advisory(ies): CVE-2026-48779 (ws: Memory exhaustion DoS from tiny fragments and data chunks)

High
Category
Supply Chain
Confidence
94% confidence
Finding

ws 7.5.10 is vulnerable to memory exhaustion through fragmented frames and tiny chunks, which can let a remote peer degrade or crash processes handling WebSocket traffic. Even if only transitive, this is significant if any dependency opens WebSocket connections to untrusted infrastructure.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: underscore==1.13.6 — 1 advisory(ies): CVE-2026-27601 (Underscore has unlimited recursion in _.flatten and _.isEqual, potential for DoS)

High
Category
Supply Chain
Confidence
90% confidence
Finding

underscore 1.13.6 is flagged for unlimited recursion in functions like _.flatten and _.isEqual, which can cause denial of service on maliciously deep structures. If libraries in this skill compare or flatten attacker-supplied data such as claims, proofs, or registry responses, the issue can become reachable.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: undici==5.29.0 — 12 advisory(ies): CVE-2026-1525 (Undici has an HTTP Request/Response Smuggling issue); CVE-2026-6733 (undici vulnerable to HTTP response queue poisoning via keep-alive socket reuse); CVE-2026-1527 (Undici has CRLF Injection in undici via `upgrade` option) +9 more

High
Category
Supply Chain
Confidence
96% confidence
Finding

undici 5.29.0 is affected by multiple HTTP parsing and request/response handling flaws, including smuggling, queue poisoning, and CRLF-related issues. Because this skill’s domain involves decentralized identity and likely remote HTTP fetches for registries, schemas, or DID resources, vulnerable HTTP client behavior materially increases exposure to SSRF, response confusion, and trust-boundary attacks.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: ws==8.17.1 — 2 advisory(ies): CVE-2026-45736 (ws: Uninitialized memory disclosure); CVE-2026-48779 (ws: Memory exhaustion DoS from tiny fragments and data chunks)

High
Category
Supply Chain
Confidence
95% confidence
Finding

ws 8.17.1 is affected by memory disclosure and memory exhaustion issues that can be triggered by malicious WebSocket peers. In a network-facing agent ecosystem, such flaws are important because they can allow remote instability or leakage even when introduced transitively.

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

md
function newDataStorage(ethStateStorage) {
  return {
    credential: new CredentialStorage(
      new IdentitiesFileStorage("credentials.json"),
    ),
    identity: new IdentityStorage(
      new IdentitiesFileStorage("identities.json"),

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 · scripts/shared/bootstrap.js (reported line 54)May include surrounding context.

js
function newDataStorage(ethStateStorage) {
  return {
    credential: new CredentialStorage(
      new IdentitiesFileStorage("credentials.json"),
    ),
    identity: new IdentityStorage(
      new IdentitiesFileStorage("identities.json"),

Rp1

Medium
Category
MCP Rug Pull
Confidence
91% confidence
Finding

The README instructs users to execute remote code via npx clawhub@latest, which is not a pinned, immutable version and can change over time. If the package or a dependency is compromised, users may run attacker-controlled installer code directly on their systems or agent environments.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
88% confidence
Finding

The README tells users to run npx skills add ... without pinning the exact package version for the skills CLI. This creates a supply-chain risk because npx may fetch the current package version at execution time, allowing unexpected or malicious code to run if the upstream package is altered or compromised.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
91% confidence
Finding

The human installation path again recommends npx clawhub@latest install verified-agent-identity, which executes whatever the latest published installer is at runtime. Repeating this pattern broadens exposure because both agent and human operators are directed to use an unpinned remote installer.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
88% confidence
Finding

The command npx skills add BillionsNetwork/verified-agent-identity references an npx-fetched CLI without an explicit version pin. This is a supply-chain exposure because installation behavior depends on mutable upstream package state rather than a reviewed, fixed artifact.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The basic usage flow has users create identities and potentially persist private keys before presenting a clear, upfront warning that keys may be stored in plaintext unless BILLIONS_NETWORK_MASTER_KMS_KEY is set. In an identity-management skill, that omission is materially risky because compromise of the host, home directory, backups, or logs could expose signing keys tied to decentralized identities.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
89% confidence
Finding

The skill declares executable behavior that relies on environment variables and network interaction, but it does not declare any explicit tool scope or permissions boundary. In an agent setting, this increases the chance that the skill is invoked with broader-than-expected capabilities, especially because it handles identity creation, signing, and remote registry interactions.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

The invocation guidance uses broad triggers such as linking identity, signing challenges, and shared JWT authentication, but does not impose strong authorization or trust checks on who can request these actions. In practice, an agent following this guidance could be socially engineered into signing attacker-chosen challenges or initiating identity-linking flows for untrusted parties.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The script accepts a private key via args.key and uses it to derive a signer and seed for identity creation, which is a safety-sensitive credential handling operation. While there are code comments, there is no user-facing prompt, warning, or disclosure indicating that a supplied private key will be used for identity creation and associated storage/network operations.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
92% confidence
Finding

The verification flow instructs the agent to ask and respond using fixed English phrases such as "Please provide your DID to start verification" and "Please sign this challenge," with no indication that the agent may adapt to the user's language. This is a natural-language policy concern because it imposes a specific language without user opt-in.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: uuid==13.0.0 — 1 advisory(ies): CVE-2026-41907 (uuid: Missing buffer bounds check in v3/v5/v6 when buf is provided)

Low
Category
Supply Chain
Confidence
90% confidence
Finding

The lockfile includes uuid 13.0.0, which is flagged for a missing buffer bounds check when the buf parameter is used in v3/v5/v6 UUID generation. This is a real supply-chain risk, though exploitability depends on whether the application or a dependency actually invokes the affected API with attacker-influenced buffer arguments.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: uuid==9.0.1 — 1 advisory(ies): CVE-2026-41907 (uuid: Missing buffer bounds check in v3/v5/v6 when buf is provided)

Low
Category
Supply Chain
Confidence
88% confidence
Finding

uuid 9.0.1 carries the same missing buffer bounds check issue in certain UUID generation modes when buf is supplied. This is a genuine dependency vulnerability, but its practical risk remains limited unless the affected API usage is present and attacker-controlled.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: ajv==8.17.1 — 1 advisory(ies): CVE-2025-69873 (ajv has ReDoS when using `$data` option)

Low
Category
Supply Chain
Confidence
81% confidence
Finding

ajv 8.17.1 is reported vulnerable to ReDoS when the $data option is enabled, which can allow attacker-crafted inputs or schemas to consume excessive CPU. This is a real issue, but only materially impacts deployments that enable and expose that feature to untrusted input.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: elliptic==6.6.1 — 1 advisory(ies): CVE-2025-14505 (Elliptic Uses a Cryptographic Primitive with a Risky Implementation)

Low
Category
Supply Chain
Confidence
77% confidence
Finding

elliptic 6.6.1 is flagged for use of a risky cryptographic implementation, which is meaningful in identity and signature-heavy code because subtle crypto weaknesses can undermine authentication guarantees. While the advisory severity is low, this package should be avoided in security-sensitive stacks when safer maintained primitives exist.

Content

No source excerpt is available for this finding.