Back to skill

Security audit

OpenSoul - An immutable, private soul for agent Self-reflection, self-improvement and on-chain economic activities.

Security checks for vulnerabilities and agentic risk

Overview

The skill clearly aims to give agents blockchain-backed memory, but its examples can permanently publish sensitive activity and handle private keys in risky ways.

Review before installing or using this skill with real data. Treat anything logged as potentially public and permanent unless you have verified encryption and storage behavior. Do not log prompts, secrets, PII, customer data, filenames, internal project names, or raw task text. Use testnet and throwaway wallet keys first, avoid raw private-key handoff, prefer a virtual environment over system Python changes, and inspect or pin the external OpenSoul repository before running its installer.

Vulnerability Patterns
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • 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
Findings (5)

T09 · Insecure Skill Coding Practices

Error
Location
research_agent.py:22
Finding

Potentially sensitive agent activity is published to an immutable public blockchain without encryption by default

Content
View full analysis
0 }, "status": "success" }) ``` ```python async def finish(self): """Complete session and flush logs""" await self.generate_summary() print("\n💾 Flushing logs to blockchain...") try: tx_id = await self.logger.flush() print(f"✓ Session archived to blockchain") print(f"🔗 Transaction: https://whatsonchain.com/tx/{tx_id}") return tx_id except Exception as e: print(f"❌ Error: {e}") return None ``` ### Technical Analysis The executable research example initializes `AuditLogger` without a PGP configuration and records the complete caller-supplied research query in the `details` field. The record is subsequently committed to the BSV blockchain. The configured `flush_threshold` may also cause records to be transmitted before the explicit `finish()` operation. Because blockchain data is public and immutable, information disclosed this way cannot be reliably deleted after discovery. Although the documentation recommends PGP for sensitive records, encryption is optional and is not enabled in the principal executable examples. The logger accepts an unrestricted `details` dictionary ...[truncated 1631 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
agent_template.py:172
Finding

Failed blockchain submissions are stored in plaintext local backup files

Content
View full analysis
Remediation
View remediation

T03 · Remote Payload Retrieval and Execution

Warning
Location
PREREQUISITES.md:25
Finding

Mutable external repository code and incompletely pinned dependencies are executed during installation

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:410
Finding

Agent handoff guidance places wallet and PGP private keys in a general-purpose transferable object

Content
View full analysis
Remediation
View remediation

T05 · Unauthorized Access and Privilege Escalation

Note
Location
TROUBLESHOOTING.md:162
Finding

Troubleshooting guidance recommends a system-wide DNS configuration change

Content
View full analysis
> /etc/resolv.conf # macOS networksetup -setdnsservers Wi-Fi 8.8.8.8 8.8.4.4 ``` ### Technical Analysis Diagnosing connectivity to one blockchain API does not require changing DNS resolution for the entire system. A successful system-wide DNS change affects unrelated processes and may bypass enterprise DNS filtering, split-horizon resolution, or local privacy controls. The Linux command as written will commonly fail because `sudo` applies to `echo`, while output redirection is performed by the original unprivileged shell. However, users may adapt it to an elevated shell or another command that successfully modifies `/etc/resolv.conf`. The macOS command may also require administrative privileges depending on local policy. The recommendation therefore exceeds the minimum privileges required for endpoint diagnostics even though the exact Linux command is not reliably effective. ### Attack Path 1. A user encounters an API name-resolution problem. 2. The user follows or adapts the troubleshooting instruction with administrative privileges. 3. The global resolver is changed to a third-party public DNS service. 4. DNS queries from unrelated applications are sent to that provider. 5. Organizational DNS controls, local names, or security monitoring may be bypassed or disrupted. ### Impact Assessment A successful modification affects name resolution system-wide rather than only the OpenSoul process. It may expose DNS query metadata, disrupt internal-domain resolution, or weaken network policy enforcement. The instruction does not create a persistent backdoor or directly grant an attacker code execution. Administrative privileges are required to make the relevant system changes, and the principal impact is configuratio ...[truncated 38 chars]
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (57)

Context Leakage

High
Category
Data Exfiltration
Confidence
85% confidence
Finding

Code or instructions that leak agent conversation context to external services, potentially exposing sensitive user interactions.

Content

Scanner excerpt · EXAMPLES.md (reported line 683)May include surrounding context.

md
"actions_count": 0
        }
        
        # Log session start
        self.logger.log({
            "action": "session_start",
            "tokens_in": 10,

Context Leakage

High
Category
Data Exfiltration
Confidence
85% confidence
Finding

Code or instructions that leak agent conversation context to external services, potentially exposing sensitive user interactions.

Content

Scanner excerpt · EXAMPLES.md (reported line 721)May include surrounding context.

md
"actions_count": 0
        }
        
        # Log session start
        self.logger.log({
            "action": "session_start",
            "tokens_in": 10,

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · PREREQUISITES.md (reported line 257)May include surrounding context.

  1. Never commit private keys to version control
    bash
    # Add to .gitignore
    .env
    *.key
    *_privkey.asc
    config.py  # If it contains secrets
    

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · PREREQUISITES.md (reported line 259)May include surrounding context.

  1. Never commit private keys to version control
    bash
    # Add to .gitignore
    .env
    *.key
    *_privkey.asc
    config.py  # If it contains secrets
    

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · PREREQUISITES.md (reported line 274)May include surrounding context.

  1. Never commit private keys to version control
    bash
    # Add to .gitignore
    .env
    *.key
    *_privkey.asc
    config.py  # If it contains secrets
    

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · PREREQUISITES.md (reported line 278)May include surrounding context.

  1. Never commit private keys to version control
    bash
    # Add to .gitignore
    .env
    *.key
    *_privkey.asc
    config.py  # If it contains secrets
    

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · PREREQUISITES.md (reported line 291)May include surrounding context.

  1. Never commit private keys to version control
    bash
    # Add to .gitignore
    .env
    *.key
    *_privkey.asc
    config.py  # If it contains secrets
    

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · PREREQUISITES.md (reported line 342)May include surrounding context.

  1. Never commit private keys to version control
    bash
    # Add to .gitignore
    .env
    *.key
    *_privkey.asc
    config.py  # If it contains secrets
    

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · README.md (reported line 228)May include surrounding context.

  1. Never commit private keys to version control
    bash
    # Add to .gitignore
    .env
    *.key
    *_privkey.asc
    config.py  # If it contains secrets
    

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · README.md (reported line 243)May include surrounding context.

  1. Never commit private keys to version control
    bash
    # Add to .gitignore
    .env
    *.key
    *_privkey.asc
    config.py  # If it contains secrets
    

Missing User Warnings

High
Category
Not specified by scanner
Confidence
97% confidence
Finding

The skill promotes blockchain-backed audit logging but does not prominently warn that data written to a public blockchain may become effectively permanent and publicly accessible. Because the skill is aimed at agent memory and audit trails, users may reasonably log sensitive prompts, task details, or operational metadata without understanding the disclosure and irreversibility risk.

Content

No source excerpt is available for this finding.

Missing User Warnings

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The examples encourage logging rich action details, queries, token metadata, and flushing them to chain without any guardrail against storing secrets, PII, credentials, prompts, or regulated data. In this context, the omission is dangerous because the logging path is persistent and may transmit sensitive content outside the original trust boundary.

Content

No source excerpt is available for this finding.

Missing User Warnings

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

The agent handoff example exports private key material together with historical memory, but gives no warning that whoever receives that bundle can impersonate the agent, spend wallet funds, decrypt logs, and access retained data. This is a direct credential-transfer pattern that materially increases takeover and data-compromise risk.

Content

No source excerpt is available for this finding.

Ssd 3

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

Bundling the agent's private key material with historical memory for transfer exposes both credentials and accumulated sensitive data in one package. If intercepted, mishandled, or intentionally reused, it enables identity theft, fund access, decryption capability, and full compromise of the agent's prior memory corpus.

Content

No source excerpt is available for this finding.

Missing User Warnings

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The guide recommends exporting secret PGP keys and writing them to files without any warning about the sensitivity of private key material, storage risks, or access controls. Exposed private keys would allow decryption of protected data and impersonation/signing as the affected identity.

Content

No source excerpt is available for this finding.

Context Leakage

High
Category
Data Exfiltration
Confidence
91% confidence
Finding

The session_start log records task metadata and session identifiers, and the logger is designed to persist logs to blockchain. If task descriptions or attached details contain prompts, user data, internal context, or sensitive business information, this creates durable context leakage to an external immutable store.

Content

Scanner excerpt · agent_template.py (reported line 100)May include surrounding context.

python
self.session_start_time = datetime.now()
        self.action_count = 0
        
        # Log session start
        await self._log_action(
            action_type="session_start",
            tokens_in=10,

Context Leakage

High
Category
Data Exfiltration
Confidence
89% confidence
Finding

The session_end log stores session identifiers, duration, and action counts, and these records are later flushed externally. While less sensitive than full prompts, this still leaks operational metadata that can reveal usage patterns, task cadence, and activity correlations when stored on blockchain.

Content

Scanner excerpt · agent_template.py (reported line 295)May include surrounding context.

python
duration = datetime.now() - self.session_start_time
        
        # Log session summary
        await self._log_action(
            action_type="session_end",
            tokens_in=10,

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The examples repeatedly encourage logging agent actions, queries, findings, and session details to a blockchain and to local backup files without prominent warnings about permanence, replication, and possible sensitive-data exposure. In this skill context, that is materially risky because users may copy these patterns into real agents and unintentionally persist prompts, documents, identifiers, or operational metadata in places that are hard or impossible to delete.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The example instructs users to export a private key into an environment variable and run the scripts without any adjacent safety guidance on secret handling. While environment variables are common, presenting private-key use this casually in documentation can lead to credential leakage through shell history, process inspection, shared environments, or poor operational practices.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

Line L912 makes a broad claim that all examples are production-ready and include proper error handling. However, multiple examples such as basic logging, research, collaboration, self-reflection, cost-aware, and session management call logger.flush() or get_history() directly without try/except or recovery logic, while only the final error-handling example demonstrates resilient behavior.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The summary prominently advertises immutable blockchain logging, public verifiability, and audit trails, but it does not clearly warn that writing agent actions or logs to a public, permanent ledger can expose sensitive user, system, or operational metadata. In this skill context, agents are encouraged to persist memory and session history, which increases the chance that developers or agents will store confidential material without understanding that deletion or remediation may be impossible once published.

Content

No source excerpt is available for this finding.

Sudo/Root Execution

Medium
Category
Privilege Escalation
Confidence
70% confidence
Finding

Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.

Content

Scanner excerpt · PREREQUISITES.md (reported line 169)May include surrounding context.

Ubuntu/Debian:

bash
sudo apt-get update
sudo apt-get install gnupg

Sudo/Root Execution

Medium
Category
Privilege Escalation
Confidence
70% confidence
Finding

Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.

Content

Scanner excerpt · PREREQUISITES.md (reported line 170)May include surrounding context.

Ubuntu/Debian:

bash
sudo apt-get update
sudo apt-get install gnupg

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The command-line GPG example includes %no-protection, which creates a private key without passphrase encryption on disk. That directly contradicts the surrounding guidance about strong passphrases and secure key handling, and it substantially increases the chance that theft of the file, backup, or host leads to immediate compromise of encrypted logs and identity.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
99% confidence
Finding

This example instructs users to generate a PGP key with %no-protection but does not clearly state that the resulting secret key is stored unencrypted. Users following the guide may believe they are implementing the documented security model while actually creating a key that can be used immediately by anyone who gains file access.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.