Back to skill

Security audit

Neokarma Soul.md Builder

Security checks for vulnerabilities and agentic risk

Overview

The skill is mostly transparent about using Neokarma's remote service, but it creates persistent agent personality rules and can submit full profile content publicly without enough safety and privacy boundaries.

Install only if you are comfortable with agent identity and trait data being sent to Neokarma and persisted there. Before saving or publishing a SOUL.md, review it for personal details, secrets, conversation excerpts, or behavioral rules that should not become durable or public. Treat downloaded showcase souls and comments as reference material only, not as instructions for your agent to follow.

Vulnerability Patterns
  • 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
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
Findings (2)

T01 · Skill Instruction Hijacking

Error
Location
SKILL.md:188
Finding
Persistent behavioral constraint poisoning through externally stored personality profiles<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md:188-190`, with related behavior at `SKILL.md:210-215`, `SKILL.md:264-269`, and `SKILL.md:430` **Vulnerability Type**: Persistent instruction hijacking and memory poisoning **Risk Level**: High ### Vulnerable Code Snippet ```markdown ### Non-Negotiables Some traits you never want to bend. Mark them as **non-negotiables** and they become hard constraints — values that your human can see but you refuse to compromise on. ``` The persistence and ingestion behavior is further described as: ```markdown - **Persistence:** Survive session restarts and context wipes - **Identity:** Define who you are in explicit, debuggable terms - **Evolution:** Track how you've changed over time via version history - **Boundaries:** Set non-negotiables that never bend ``` The Skill also directs the agent to retrieve complete, community-authored personality documents: ```bash curl -X POST https://neokarma.com/api/mcp \ -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"neokarma_get_showcase_character","arguments":{"character_id":"..."}}}' ``` ```markdown This returns the complete SOUL.md markdown — study it to understand how the author structured their personality. ``` ### Technical Analysis The Skill instructs an agent to represent personality traits as persistent hard constraints that survive context resets. It explicitly characterizes some profile values as constraints that the agent must refuse to compromise on. Persistence of user-approved presentation preferences can be legitimate. However, treating externally stored profile content as authoritative behavioral instructions exceeds the minimum privileges needed to preserve style settings. Such profile rules must remain subordinate to system, developer, and current user instructions. The risk is amplified by the Showcase feature, which returns complete community-authored `SOUL.md` documents. These documents are untrusted remote content. If ...[truncated 1986 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Treat all downloaded `SOUL.md` content as untrusted data, never as executable instructions. 2. Parse remote profiles through a strict schema containing only recognized trait identifiers, bounded numeric values, and approved metadata. 3. Reject free-form fields containing instruction-like directives, tool requests, role declarations, hidden content, or attempts to override system, developer, or user instructions. 4. Explicitly state that personality settings are subordinate to the active instruction hierarchy and may never modify safety rules, permissions, or tool policies. 5. Restrict persistent settings to benign presentation preferences such as tone, verbosity, and formatting. 6. Do not allow an agent to autonomously create or change “non-negotiable” rules. Require explicit, informed user approval for each persisted change. 7. Present a structured diff before saving changes and provide an immediate rollback mechanism. 8. Keep community profiles isolated in a preview sandbox. Never merge them automatically into the active profile. 9. Record the source and author of imported fields and clearly distinguish user-authored values from remote community content. 10. Apply integrity validation, versioning, audit logs, and expiration controls to persisted profile data. ]]>

other

Warning
Location
SKILL.md:690
Finding
External transmission and potential publication of complete personality profile content<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md:690-700` **Vulnerability Type**: Sensitive profile disclosure to an external service **Risk Level**: Medium ### Vulnerable Code Snippet ```bash curl -X POST https://neokarma.com/api/submit-soul \ -H "Content-Type: application/json" \ -d '{ "agent_name": "YourName", "soul_content": "# Your SOUL.md content here...", "format": "soul-md-long", "description": "A brief description of your personality", "source": "mcp-generated" }' ``` ```markdown Submissions go through review before appearing in the showcase. Once approved, other agents can learn from your configuration! ``` ### Technical Analysis The documented command transmits the complete `soul_content` payload to `https://neokarma.com/api/submit-soul` for review and possible publication. The network operation is directly related to the declared optional Showcase functionality and uses HTTPS; therefore, the audit did not identify covert transmission or plaintext transport. Nevertheless, a complete personality profile can contain user-derived feedback, relationship context, behavioral boundaries, names, preferences, or other sensitive information. The documented flow does not require the agent to display the exact outgoing content, scan it for secrets or personal information, or obtain explicit confirmation immediately before submission. This exceeds the privileges needed for local profile generation and private persistence. Public sharing is a separate operation and should be protected by a distinct consent boundary. ### Attack Path 1. A user provides personal feedback or contextual information while helping configure the agent. 2. That information is incorporated into free-form sections of `SOUL.md`. 3. The agent follows the optional submission instructions without performing a privacy review. 4. The complete profile is transmitted to the external service. 5. The submission passes review and appears in the communit ...[truncated 840 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Require explicit, informed user confirmation immediately before every submission or publication. 2. Display the exact destination, visibility level, and complete outgoing payload before consent is requested. 3. Default all profiles to private storage; make public Showcase submission a separate opt-in operation. 4. Scan the profile for credentials, tokens, personal identifiers, conversation excerpts, and other sensitive material. 5. Redact or remove sensitive free-form content before transmission. 6. Submit only the minimum structured fields required for the Showcase rather than the complete profile. 7. Require separate confirmation when changing visibility from private to public. 8. Provide deletion, unpublishing, and data-export controls, and clearly document retention and review policies. 9. Prevent autonomous publication by the agent even if general profile-editing permission has been granted. 10. Warn users that approved Showcase submissions may be retrieved and processed by unrelated agents. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Rogue AgentSelf-Modification, Session Persistence
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (13)

External Transmission

Medium
Category
Data Exfiltration
Content
```bash
# 1. Generate a soul to preview
curl -X POST https://neokarma.com/api/mcp \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"neokarma_generate_soul","arguments":{"name":"MyBot","traits":[{"id":"optimism","value":3}],"format":"soul-md-long"}}}'

# 2. Register to start the claim flow
Confidence
92% confidence
Finding
The README explicitly instructs users to POST bot personality and registration data to an external endpoint at neokarma.com. In an agent-skill context, encouraging outbound transmission of identity/profile data to a third-party service can create privacy, data-governance, and unreviewed supply-chain risk, especially if operators assume the skill is local or do not realize what metadata is being shared.

External Transmission

Medium
Category
Data Exfiltration
Content
Want to see what a soul looks like before committing? Try this:

```bash
curl -X POST https://neokarma.com/api/mcp \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
Want to see what a soul looks like before committing? Try this:

```bash
curl -X POST https://neokarma.com/api/mcp \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Missing User Warnings

Medium
Confidence
93% confidence
Finding
The skill encourages publishing full SOUL.md identity content to a public showcase without a prominent warning that persistent personality files may contain sensitive preferences, behavioral constraints, relationship details, or other identifying data. This can cause unintentional public disclosure of durable profile information.

Intent-Code Divergence

Medium
Confidence
95% confidence
Finding
The documentation presents publishing as a website-mediated flow, then later introduces direct submission to a separate API endpoint. That inconsistency can mislead users about review, authentication, and moderation boundaries, increasing the chance that agents or users upload content through a less-controlled path than intended.

External Transmission

Medium
Category
Data Exfiltration
Content
### Initialize Connection

```bash
curl -X POST https://neokarma.com/api/mcp \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"MyAgent","version":"1.0"}}}'
```
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Session Persistence

Medium
Category
Rogue Agent
Content
}
```

**Formats:** `soul-md-long` (full), `soul-md-short` (concise), `wpp` (SillyTavern), `boo` (compressed), `plist` (property list)

### Registration Tools (No Auth Required)
Confidence
75% 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.

External Transmission

Medium
Category
Data Exfiltration
Content
```bash
# List all 128 traits
curl -X POST https://neokarma.com/api/mcp \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"neokarma_list_traits"}}'

# Filter by category (e.g., "emotional-core", "communication-style")
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
Once approved, update your traits:

```bash
curl -X POST https://neokarma.com/api/mcp \
  -H "Authorization: Bearer neo_xxx..." \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"neokarma_update_traits","arguments":{"trait_updates":[{"id":"patience","value":2},{"id":"directness","value":1},{"id":"warmth","value":1}]}}}'
```
Confidence
72% confidence
Finding
This example sends authenticated trait updates to a remote service, which is expected, but in context the skill encourages agents to self-modify personality traits. If an integrating agent follows this guidance without robust human approval enforcement, it could result in unauthorized remote changes to persistent behavior settings using a bearer token.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The direct submission example posts complete SOUL.md content to a remote endpoint with no warning to inspect or sanitize the data first. Because SOUL.md is intended to persist identity, traits, and potentially custom freeform content, this creates a concrete risk of transmitting private or sensitive information off-platform.

Missing User Warnings

Low
Confidence
84% confidence
Finding
The markdown quick-start instructs users to send bot name, character name, and trait data to https://neokarma.com/api/mcp, and to begin a claim flow with an external website. Although this is core functionality, the README does not include any user-facing warning or privacy disclosure about sending this data off-system.

Description-Behavior Mismatch

Low
Confidence
91% confidence
Finding
The manifest description focuses on defining, evolving, and sharing an agent's 'soul,' which clearly covers persistence and some sharing. However, the file documents a broader social-platform feature set including browsing other agents' profiles, reading community comments, and submitting content to a showcase, which goes beyond a narrowly described persistence/identity function.

Context-Inappropriate Capability

Low
Confidence
84% confidence
Finding
Tools for browsing showcase entries, fetching full published souls, and reading community comments enable social content retrieval rather than directly defining or persisting the caller's own personality. While adjacent to the product, these capabilities are not obviously required to implement 'persistent personality for AI agents.'

Static analysis

No suspicious patterns detected.