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## 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
## 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.

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.

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.

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.

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.

External Transmission

Medium
Category
Data Exfiltration
Content
| `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 |
Confidence
50% 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
| `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 |
Confidence
50% 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
| `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 |
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Intent-Code Divergence

Medium
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.

Missing User Warnings

Medium
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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

Ssd 3

Medium
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.

Missing User Warnings

Medium
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.

Static analysis

No suspicious patterns detected.