Back to skill

Security audit

Biomorphic Memory

Security checks for vulnerabilities and agentic risk

Overview

This looks like a memory tool, but its installer runs mutable GitHub code and can delete a configurable local directory without confirmation.

Review the installer before running it. Install only in a dedicated, disposable directory or virtual environment, avoid setting BIOMORPHIC_INSTALL_DIR to any directory containing personal work, and do not run the installer with elevated privileges. Treat the GitHub repository contents as the real code being trusted.

Vulnerability Patterns
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (2)

T03 · Remote Payload Retrieval and Execution

Error
Location
scripts/install.sh:4
Finding

Unpinned Remote Payload Retrieval and Execution

Content
View full analysis
/dev/null || { rm -rf "$INSTALL_DIR" git clone "$REPO" "$INSTALL_DIR" cd "$INSTALL_DIR" } else git clone "$REPO" "$INSTALL_DIR" cd "$INSTALL_DIR" fi pip install -e . 2>/dev/null || { echo "❌ Install failed"; exit 1; } ``` ### Technical Analysis The installation script clones the current default branch of an external Git repository and installs its contents using `pip install -e .`. It does not pin an immutable commit hash, verify a cryptographic checksum, validate a signature, or otherwise confirm that the downloaded source matches a reviewed version. The effective payload can therefore change after this skill package has been reviewed. In addition, Python package installation may invoke attacker-controlled build backends or packaging hooks. Because the external repository's implementation is not included in the audited artifact, the code ultimately installed and potentially executed cannot be assessed by this audit. Although the external URL matches the homepage declared in `SKILL.md`, that correspondence does not provide integrity or protect against upstream account, repository, dependency, or branch compromise. ### Attack Path 1. An attacker compromises the upstream repository, a maintainer account, or another mechanism capable of modifying its default branch. 2. The attacker adds malicious Python packaging hooks, build configuration, or importable application code. 3. A user executes the documented `scripts/inst ...[truncated 928 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
scripts/install.sh:5
Finding

Arbitrary Configurable Directory Deletion on Update Failure

Content
View full analysis
/dev/null || { rm -rf "$INSTALL_DIR" git clone "$REPO" "$INSTALL_DIR" cd "$INSTALL_DIR" } else git clone "$REPO" "$INSTALL_DIR" cd "$INSTALL_DIR" fi ``` ### Technical Analysis `BIOMORPHIC_INSTALL_DIR` can select any directory visible to the process. If the selected directory exists but either `cd` or `git pull --ff-only` fails, the fallback handler executes `rm -rf "$INSTALL_DIR"`. Quoting the variable prevents shell word splitting but does not make the selected path safe. The script performs no canonicalization, expected-prefix validation, ownership check, repository identity check, marker-file validation, or protection against dangerous values. It also treats routine update failures as authorization to destroy the entire directory. Consequently, an accidental or attacker-influenced environment variable can redirect deletion toward an unrelated writable directory. A valid installation directory can also be deleted due to temporary network errors, repository corruption, local modifications that prevent updating, or other Git failures. ### Attack Path 1. An attacker influences the execution environment or convinces a user to set `BIOMORPHIC_INSTALL_DIR` to an existing directory containing unrelated data. 2. The selected directory is not a valid Git repository, cannot be entered, or cannot complete `git pull --ff-only`. 3. The user runs `scripts/install.sh`. 4. The failed `cd` or `git pull` transfers control to the fallback block. 5. The script recursively deletes the entire selected directory with `rm -rf`. 6. The ...[truncated 702 chars]
Remediation
View remediation
Vulnerability Patterns
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • 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
Findings (2)

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

The skill is ներկայացվում as an agent memory capability, but the documented install path executes a shell script and the metadata declares a required binary, which introduces system-modifying behavior not clearly reflected in the skill’s functional purpose. Even if common for packaging, this creates a trust boundary issue: installing from a remote repository and modifying the local Python environment can expose users to unexpected code execution or supply-chain compromise.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

If git pull --ff-only fails, the installer unconditionally removes the entire existing installation directory and reclones it. This can destroy local modifications, cached state, or user data stored under the install path without warning or confirmation, creating a data-loss risk from transient git errors, repository changes, or unexpected directory contents.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.