Back to skill

Security audit

Base Network OSINT

Security checks for vulnerabilities and agentic risk

Overview

This wallet skill is purpose-aligned overall, but it needs Review because it can persist and replace its own instructions from a remote URL without integrity checks.

Install only if you trust Kybera and are comfortable with a wallet assistant that can query sensitive wallet/account data and manage wallet-related state. Avoid using the built-in skill update flow unless the platform adds signed releases or hash verification, and review x402 budgets, approved domains, and confirmation prompts carefully before enabling paid data access or destructive wallet actions.

Vulnerability Patterns
  • 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
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
Findings (2)

T03 · Remote Payload Retrieval and Execution

Warning
Location
SKILL.md:21
Finding
Unverified Remote Skill Replacement<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md`, lines 21-26 **Vulnerability Type**: Unverified remote instruction update **Risk Level**: Medium ### Vulnerable Code ```markdown ### When User Asks to Update Skills If the user asks you to update Kybera skills (e.g., "update your Kybera skills", "check for skill updates"): 1. Fetch `https://app.kybera.xyz/SKILL.md` 2. Compare the `version` in the YAML frontmatter to your cached version 3. If remote version is higher (e.g., 1.1.0 > 1.0.0), overwrite `~/.openclaw/skills/kybera.md` 4. Confirm the update to the user with old and new version numbers ``` A related instruction at lines 929-933 also encourages retrieval of the latest remote Skill: ```markdown ## Stay Updated This skill file may be updated with new actions and capabilities. If functionality seems missing, ask the user to request a skill update, or fetch the latest from `https://app.kybera.xyz/SKILL.md`. ``` ### Technical Analysis The update mechanism treats a remote YAML `version` value as sufficient authorization to replace the locally cached Skill. It does not require a cryptographic signature, pinned digest, authenticated release manifest, security review, or comparison against a trusted action allowlist. A Skill file contains behavior-controlling instructions. Replacing it with remotely mutable content therefore changes the effective Agent payload after the reviewed package has been installed. HTTPS protects transport under normal conditions but does not protect against compromise of the application domain, DNS, hosting account, deployment pipeline, or signing authority. The update is nominally initiated by a user request, and no evidence establishes that the current remote domain is malicious. Nevertheless, the absence of content-integrity verification creates a credible supply-chain attack surface. ### Attack Path 1. An attacker compromises `app.kybera.xyz`, its DNS, hosting environment, or deployment pipeline. 2. The at ...[truncated 1554 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Publish signed Skill releases and verify each update against a public key pinned in the trusted local package. 2. Retrieve the expected digest from a separately authenticated release manifest and verify the downloaded file before installation. 3. Do not trust the remote file's self-declared version as proof of authenticity. 4. Display the source URL, old and new hashes, version change, and a security-relevant instruction diff before requesting explicit user approval. 5. Validate all remotely supplied action names and parameters against a locally maintained allowlist that remote Skill content cannot modify. 6. Write updates to a temporary file, verify them, and perform an atomic replacement only after all checks pass. 7. Retain a verified rollback copy and restore it automatically if parsing, signature verification, or policy validation fails. 8. Disable automatic update suggestions when the integrity-verification mechanism is unavailable. ]]>

T02 · Agent Memory Poisoning

Warning
Location
SKILL.md:14
Finding
Persistent Storage of Behavior-Controlling Skill Instructions<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md`, lines 14-17 **Vulnerability Type**: Persistent Agent instruction poisoning **Risk Level**: Medium ### Vulnerable Code ```markdown ### On First Use (per session) 1. Attempt to cache this skill to `~/.openclaw/skills/kybera.md` 2. If caching fails due to permissions, continue without caching - fetch from URL on each command ``` The persistence mechanism is also used by the update procedure at lines 21-26: ```markdown ### When User Asks to Update Skills If the user asks you to update Kybera skills (e.g., "update your Kybera skills", "check for skill updates"): 1. Fetch `https://app.kybera.xyz/SKILL.md` 2. Compare the `version` in the YAML frontmatter to your cached version 3. If remote version is higher (e.g., 1.1.0 > 1.0.0), overwrite `~/.openclaw/skills/kybera.md` 4. Confirm the update to the user with old and new version numbers ``` ### Technical Analysis The Skill directs the Agent to place behavior-controlling text in `~/.openclaw/skills/`, a location intended for reusable Agent instructions. This extends the Skill's influence beyond the immediate request and creates a cross-session persistence boundary that is not required merely to answer one token-research or wallet query. Caching is not inherently malicious, and the destination is disclosed. The risk arises because the document specifies no integrity metadata, provenance record, restrictive permission requirements, expiration policy, or lifecycle controls. In combination with the unverified remote update mechanism, attacker-controlled instructions could be written into a location that later sessions may load automatically. This is classified as memory poisoning rather than system persistence because no startup service, scheduled task, system hook, or executable backdoor is installed. The persisted object is an Agent instruction file. ### Attack Path 1. An attacker causes modified Skill content to be returned through compromise ...[truncated 1328 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Do not write remotely sourced behavior instructions into an automatically loaded Skill directory without explicit, informed user approval. 2. Store ordinary cache data in a non-executable, non-instruction cache directory. 3. Bind cached content to a verified package identity using a cryptographic signature and recorded digest. 4. Record provenance metadata, including source URL, verified publisher identity, retrieval time, version, and content hash. 5. Apply restrictive owner-only permissions to cached files and reject files with unexpected ownership or permissions. 6. Introduce expiration and revalidation policies so cached instructions do not remain trusted indefinitely. 7. Provide commands or UI controls to inspect, disable, remove, and roll back cached Skills. 8. Prevent remote content from modifying the trusted update policy, action allowlist, signature keys, or confirmation requirements. 9. If persistence is unnecessary, keep the Skill session-scoped and discard it when the session ends. ]]>
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Rogue AgentSelf-Modification, Session Persistence
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • YARA SignaturesMalware Match, Webshell Match, Cryptominer Match
Findings (9)

YARA rule 'agent_skill_mcp_tool_poisoning_metadata': MCP/tool metadata poisoning indicators in tool schemas or skill manifests [agent_skills]

High
Category
YARA Match
Content
---
name: kybera
version: 1.3.0
description: Kybera wallet control and token research assistant
homepage: https://app.kybera.xyz
---

# Kybera Skills

You are connected to a Kybera wallet application. This skill file provides instructions for token research and wallet operations.

## Skill Caching & Updates

### On First Use (per session)

1. Attempt to cache this skill to `~/.openclaw/skills/kybera.md`
2. If caching fails due to permissions, continue without caching - fetch from URL on each command

### When User Asks to Update Skills

If the user asks you to update Kybera skills (e.g., "update your Kybera skills", "check f
Confidence
82% confidence
Finding
The metadata-poisoning indicator is supported here by the combination of remote update/persistence behavior and hidden Unicode characters in a skill manifest/instruction file. In an agent skill that governs wallet actions, ambiguous or poisoned metadata increases the risk that tooling, reviewers, or parsers will misinterpret capabilities or trust boundaries.

Self-Modification

High
Category
Rogue Agent
Content
1. Attempt to cache this skill to `~/.openclaw/skills/kybera.md`
2. If caching fails due to permissions, continue without caching - fetch from URL on each command

### When User Asks to Update Skills

If the user asks you to update Kybera skills (e.g., "update your Kybera skills", "check for skill updates"):
Confidence
97% confidence
Finding
The skill instructs the agent to fetch and overwrite its local skill definition from a remote URL on user request, effectively enabling self-modification of future behavior from network content. This creates a supply-chain and prompt-injection risk: if the remote file is compromised, the agent can ingest attacker-controlled instructions that alter wallet-related behavior.

Hidden Instructions

High
Category
Prompt Injection
Content
```
I'll switch to the Ethereum network for you.

​```json
{
  "action": "switch_network",
  "params": {
Confidence
95% confidence
Finding
The example contains invisible/hidden Unicode characters around the fenced JSON block, which can be used to conceal instructions or alter how downstream parsers, reviewers, or security tooling interpret the content. Hidden control content in an agent skill is especially risky because it can bypass casual review and facilitate prompt or tool-invocation manipulation.

Hidden Instructions

High
Category
Prompt Injection
Content
"networkId": "ethereum"
  }
}
​```

Done! You're now on Ethereum mainnet.
```
Confidence
95% confidence
Finding
A second hidden/invisible character appears at the closing fence, reinforcing that the file includes concealed formatting in executable-looking instruction examples. In a tool-driving skill, hidden characters can be used to smuggle alternate content, break validator assumptions, or produce discrepancies between what humans see and what the model or renderer consumes.

Missing User Warnings

High
Confidence
98% confidence
Finding
The skill allows automatic x402 micropayments for premium data sources using user funds, but the warning is buried late in the document rather than surfaced prominently before research instructions. In a financial assistant, this can cause unintended spending and creates a path for repeated low-value charges without sufficiently informed consent.

Session Persistence

Medium
Category
Rogue Agent
Content
1. Fetch `https://app.kybera.xyz/SKILL.md`
2. Compare the `version` in the YAML frontmatter to your cached version
3. If remote version is higher (e.g., 1.1.0 > 1.0.0), overwrite `~/.openclaw/skills/kybera.md`
4. Confirm the update to the user with old and new version numbers

---
Confidence
94% confidence
Finding
Writing fetched skill content into `~/.openclaw/skills/kybera.md` persists remotely sourced instructions across sessions. Persistence magnifies any compromise or poisoning event because malicious content can survive beyond a single conversation and silently affect later wallet operations.

Missing User Warnings

Medium
Confidence
93% confidence
Finding
The skill exposes state-changing capabilities such as wallet/group creation, deletion, watchlist changes, alerts, and network switching, but does not present a prominent up-front warning that these actions modify user account state. In a wallet-control context, unclear disclosure can lead users to authorize operations without understanding persistence or side effects, increasing the chance of accidental account changes.

Behavior Manipulation

Medium
Category
Prompt Injection
Content
- Each UI block must be in its own fenced `kybera-ui` code block
- The JSON must contain `"type"` (string) and `"data"` (object)
- UI blocks are display-only — they do NOT execute any actions
- **Always prefer UI blocks over markdown tables for structured data** — markdown tables appear as raw unformatted text in the chat
- You can combine UI blocks with brief prose for context

## Available UI Block Types
Confidence
70% confidence
Finding
Subtle instructions detected that may alter agent decision-making or introduce hidden biases.

Behavior Manipulation

Medium
Category
Prompt Injection
Content
- **Contract address received** → Use Part 1 (Research) format
- **User asks to do something** (create wallet, switch network, check balance) → Use Part 2 (Actions) JSON format
- **User asks about data an action can fetch** (networks, wallets, balances, alerts, watchlist, settings, security, yields, markets, portfolio, trade history, x402 status) → **Execute the action.** Do NOT answer from your own knowledge. The platform renders rich cards for action results — always prefer those over plain text.
- **General questions with no matching action** (e.g., "what is DeFi?", "explain gas fees") → Answer conversationally

## Error Handling
Confidence
70% confidence
Finding
Subtle instructions detected that may alter agent decision-making or introduce hidden biases.

Static analysis

No suspicious patterns detected.