Back to skill

Security audit

Neolata Memory Engine

Security checks for vulnerabilities and agentic risk

Overview

The skill is a coherent agent-memory package, but its CLI examples create a real package-resolution risk and its multi-agent memory behavior needs careful scoping.

Install only from the scoped package and prefer pinned/local commands such as npm install --save-exact @jeremiaheth/neolata-mem@0.8.4 followed by the local binary, rather than copying unscoped npx examples. Treat stored memories, embeddings, markdown write-through files, webhooks, and Supabase rows as sensitive data, and avoid the all-agent context() behavior unless cross-agent sharing is intended.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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 (1)

T08 · Insecure Dependencies

Warning
Location
SKILL.md:279
Finding

Ambiguous Unscoped npx Commands Create a Dependency-Confusion Execution Risk

Content
View full analysis

Vulnerability Details

File Location: SKILL.md:62, 279-283; references/guide.md:37, 972-993, 1346
Vulnerability Type: Supply-chain package-name confusion
Risk Level: Medium

Vulnerable Code

The installation instructions identify a scoped npm package:

bash
npm install @jeremiaheth/neolata-mem

However, the CLI instructions execute an unscoped package name:

bash
npx neolata-mem store myagent "Important fact here"
npx neolata-mem search myagent "query"
npx neolata-mem decay --dry-run
npx neolata-mem health
npx neolata-mem clusters

The same mismatch appears throughout references/guide.md:

bash
npm install @jeremiaheth/neolata-mem

npx neolata-mem store kuro "Found XSS in login form" security web
npx neolata-mem search kuro "web vulnerabilities"
npx neolata-mem search-all "security issues"
npx neolata-mem evolve kuro "Login form XSS has been patched"
npx neolata-mem links abc123
npx neolata-mem traverse abc123 3
npx neolata-mem clusters 3
npx neolata-mem path abc123 def456
npx neolata-mem decay --dry-run
npx neolata-mem decay
npx neolata-mem health
npx neolata-mem context kuro "database security"

Technical Analysis

The documented library is @jeremiaheth/neolata-mem, but the CLI examples pass neolata-mem to npx. These are distinct npm package identifiers.

If the expected CLI executable is not already available in the local project, npx may attempt to resolve the unscoped neolata-mem package from the configured npm registry. An unrelated or malicious package controlling that unscoped name could therefore be downloaded and executed.

This artifact contains documentation only and does not include the npm package implementation. Consequently, its claims regarding zero dependencies, absence of install scripts, SSRF validation, credential redaction, and other safeguards could not be independently verified during this audit.

Attack Path

  1. An attacker publishes or compromises the unscoped neolata-mem ...[truncated 1309 chars]
Remediation
View remediation

Remediation Suggestions

  1. Replace ambiguous commands with an explicit scoped package selection:

    bash
    npm exec --package=@jeremiaheth/neolata-mem@0.8.4 -- neolata-mem health
    
  2. Prefer installing a pinned, verified package version and invoking its local executable:

    bash
    npm install --save-exact @jeremiaheth/neolata-mem@0.8.4
    ./node_modules/.bin/neolata-mem health
    
  3. Commit and enforce a lockfile with registry-resolved integrity hashes.

  4. In CI or automation, use npx --no-install neolata-mem ... after a verified installation so missing local binaries fail closed rather than triggering registry retrieval.

  5. Correct all affected commands in SKILL.md and references/guide.md, including troubleshooting examples.

  6. Include the package source in the audited artifact or pin it to a verifiable source revision so the claimed SSRF, credential-handling, path-validation, and webhook protections can be reviewed directly.

  7. Publish package provenance and verify signatures or attestations where the npm environment supports them.

Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (29)

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding

The documentation instructs users to run npx neolata-mem without pinning a specific package version. npx may fetch the latest published package at execution time, so a malicious or compromised future release could be executed unexpectedly, creating a supply-chain risk.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding

This CLI example uses npx neolata-mem without a version specifier, which allows execution of whatever version is current in the registry at runtime. If the package is ever hijacked or a bad release is published, users following the docs could run attacker-controlled code.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding

Using unpinned npx for the decay command introduces the same time-of-use supply-chain exposure as other examples. Because this project is a memory engine that may handle sensitive local data, running an unexpected package version could have access to that data and the user's environment.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding

The health example relies on npx resolving the latest package version, which is not deterministic and can execute newly published code without prior review. That behavior is risky in security-sensitive tooling documentation because users may trust and copy-paste the command directly.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding

The clusters command example also uses an unpinned npx package reference, exposing users to execution of future or compromised releases. The surrounding skill context slightly increases concern because the tool may process agent memories, tokens, and local files, so code execution could affect sensitive data.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · references/guide.md (reported line 107)May include surrounding context.

md
| `type` | `'openai' \| 'noop'` | `'noop'` | `openai` = any OpenAI-compatible API, `noop` = keyword only |
| `apiKey` | `string` | — | API key |
| `model` | `string` | `'text-embedding-3-small'` | Embedding model name |
| `baseUrl` | `string` | `'https://api.openai.com/v1'` | API base URL |
| `extraBody` | `object` | `{}` | Extra body params (e.g. `{ input_type: 'passage' }`) |
| `retryMs` | `number` | `2000` | Base retry delay on 429 rate-limit (exponential backoff) |
| `maxRetries` | `number` | `3` | Max retries on 429 before throwing |

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · references/guide.md (reported line 119)May include surrounding context.

md
| `type` | `'openai' \| 'noop'` | `'noop'` | `openai` = any OpenAI-compatible API, `noop` = keyword only |
| `apiKey` | `string` | — | API key |
| `model` | `string` | `'text-embedding-3-small'` | Embedding model name |
| `baseUrl` | `string` | `'https://api.openai.com/v1'` | API base URL |
| `extraBody` | `object` | `{}` | Extra body params (e.g. `{ input_type: 'passage' }`) |
| `retryMs` | `number` | `2000` | Base retry delay on 429 rate-limit (exponential backoff) |
| `maxRetries` | `number` | `3` | Max retries on 429 before throwing |

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · references/guide.md (reported line 132)May include surrounding context.

md
| `type` | `'openai' \| 'noop'` | `'noop'` | `openai` = any OpenAI-compatible API, `noop` = keyword only |
| `apiKey` | `string` | — | API key |
| `model` | `string` | `'text-embedding-3-small'` | Embedding model name |
| `baseUrl` | `string` | `'https://api.openai.com/v1'` | API base URL |
| `extraBody` | `object` | `{}` | Extra body params (e.g. `{ input_type: 'passage' }`) |
| `retryMs` | `number` | `2000` | Base retry delay on 429 rate-limit (exponential backoff) |
| `maxRetries` | `number` | `3` | Max retries on 429 before throwing |

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The documentation states that context() searches all agents and only uses the provided agent for formatting, which can surprise integrators expecting agent-scoped retrieval. In a memory system used for RAG, this can cause cross-tenant or cross-user data leakage by injecting another agent's memories into prompts and outputs without an explicit privacy boundary.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The guide documents cross-agent context retrieval for prompt construction but does not provide a clear, adjacent warning that this may mix sensitive memories across agents, users, or roles. Because the returned context is intended for LLM injection, any privacy boundary mistake can immediately propagate confidential data into downstream model prompts, logs, or responses.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Content

No source excerpt is available for this finding.

Ssd 3

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The guidance recommends writing conversation-derived memories into shared markdown files so another system can index them, creating an intentional secondary data channel for natural-language exfiltration. In multi-user or mixed-sensitivity environments, this expands the attack surface by duplicating memory contents into broadly readable workspace artifacts and downstream search indices.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The write-through example appends user-derived memory content to markdown on disk for later indexing, but the nearby text does not emphasize persistence, discoverability, or sensitivity handling. This creates a realistic chance that secrets, personal data, or internal facts are silently copied into additional storage locations and then re-exposed through indexing or file access.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.