T02 · Agent Memory Poisoning
- Location
src/core/context-injector.js:47- Finding
Persistent Untrusted Memory Is Injected into the System Role
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill has a coherent memory-assistant purpose, but it needs Review because it can persist session-derived memory, inject retrieved advice as system-level guidance, send recent conversation content to an LLM client, and ships a trusted seed recommending a global Git TLS bypass.
Review this skill carefully before installing. Avoid using it in sessions containing secrets or private customer data unless commit is gated and redacted. Remove or replace the Git SSL seed, do not run the suggested global sslVerify false command, avoid injecting stored memories as system instructions, and pin the package/version used for npx execution.
src/core/context-injector.js:47Persistent Untrusted Memory Is Injected into the System Role
data/seeds/seeds.json:57Bundled High-Trust Memory Recommends Disabling Git TLS Verification Globally
src/core/gene-processor.js:19Raw Conversation History Is Sent to a Caller-Provided LLM Before Redaction
LLM-based evaluation, self-reflection, and dynamic trust scoring introduce autonomous interpretation of stored session content that is not reflected in the description. This can amplify privacy risk and create opaque decision-making over stored memories, especially if sensitive session data is committed and later re-ranked or summarized automatically.
LLM-based evaluation, self-reflection, and dynamic trust scoring introduce autonomous interpretation of stored session content that is not reflected in the description. This can amplify privacy risk and create opaque decision-making over stored memories, especially if sensitive session data is committed and later re-ranked or summarized automatically.
LLM-based evaluation, self-reflection, and dynamic trust scoring introduce autonomous interpretation of stored session content that is not reflected in the description. This can amplify privacy risk and create opaque decision-making over stored memories, especially if sensitive session data is committed and later re-ranked or summarized automatically.
LLM-based evaluation, self-reflection, and dynamic trust scoring introduce autonomous interpretation of stored session content that is not reflected in the description. This can amplify privacy risk and create opaque decision-making over stored memories, especially if sensitive session data is committed and later re-ranked or summarized automatically.
The code comment claims remote model sending/access is disabled, yet preheat() explicitly downloads Xenova/all-MiniLM-L6-v2 over the network via pipeline(...). This creates a misleading trust boundary: operators may believe initialization is fully local/offline when it actually performs remote fetches, exposing them to unexpected network access and model supply-chain risk.
The seed explicitly recommends git config --global http.sslVerify false, which disables TLS certificate validation for all Git HTTPS operations on the machine. In a long-term memory system, this is especially dangerous because the unsafe workaround can be repeatedly surfaced and normalized, exposing users to man-in-the-middle attacks, credential theft, and tampered repository contents.
This file gives the skill an embedded capability to recommend bypassing Git TLS verification as a stored solution pattern. Because the skill is a memory hub meant to prevent repeated bugs, preserving this recommendation increases the chance that insecure system-wide configuration changes are suggested in future unrelated or loosely related contexts.
The README instructs users to run npx engram without pinning a specific version, which causes execution of whatever package version is currently published under that name. In an agent-oriented package that users are encouraged to embed into autonomous workflows, this increases supply-chain risk because a compromised or newly malicious release could be fetched and executed immediately.
The skill declares executable capabilities (node and env usage) but does not define an explicit tool/permission scope, which weakens least-privilege controls and makes it harder for a host agent to constrain execution safely. In a skill that invokes external CLI behavior and long-term storage, missing scope boundaries increases the chance of unintended command execution or data access beyond what users expect.
Using npx engram without a pinned version allows installation of whatever package version is current at execution time, creating a supply-chain risk. If the upstream package is compromised or a breaking/malicious version is published, the skill could execute attacker-controlled code automatically.
The skill does not clearly warn users that !exp commit stores session-derived information into long-term memory, which undermines informed consent and can lead to accidental retention of secrets, proprietary data, or personal information. This is especially dangerous because the skill is explicitly framed as automatic and persistent, increasing the likelihood of silent data capture.
The automatic triggers are broad (error, failed, 404, timeout, etc.) and can activate consult/commit behavior in many ordinary contexts, causing unintended retrieval or persistence. In a memory skill, over-triggering can leak session content into long-term storage or inject advice unexpectedly into unrelated workflows.
This file includes natural-language comments in Chinese (e.g. the configuration comment on L10) while the skill provides no indication that it is region-specific or that language is selectable. Under the policy, forcing a specific language or locale without opt-in is a natural-language policy violation.
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.
This is a JSON manifest file, so vague-trigger checks apply. The trigger description "Installing npm packages on an old project or strict modern env" is broad and lacks explicit boundaries or exclusions, which could cause this capsule to activate for common package-install situations rather than only the targeted dependency-tree failure.
Skill attempts to fill the context window with filler content, displacing legitimate instructions and safety constraints. This can degrade agent performance or bypass safety boundaries.
"triggerSignature": {
"errorPattern": "ERR! ERESOLVE unable to resolve dependency tree",
"taskIntent": "Installing npm packages on an old project or strict modern env",
"embedding": [0.1012, -0.0456, 0.0890, 0.334, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.
...[truncated 25 chars]
Skill attempts to fill the context window with filler content, displacing legitimate instructions and safety constraints. This can degrade agent performance or bypass safety boundaries.
"triggerSignature": {
"errorPattern": "ERR! ERESOLVE unable to resolve dependency tree",
"taskIntent": "Installing npm packages on an old project or strict modern env",
"embedding": [0.1012, -0.0456, 0.0890, 0.334, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.
...[truncated 25 chars]
The git trigger is broad enough to match common clone/push/pull scenarios, and it is paired with a dangerous remediation that disables SSL verification globally. That combination makes the seed more dangerous because routine Git problems may activate an insecure recommendation outside narrowly controlled corporate-certificate scenarios.
The success message returned by commit is hard-coded in Chinese (经验已存储) while the rest of the file's user-facing text is in English. This creates a language/locale policy issue because the skill imposes a specific language on users without offering a choice or documenting a justified regional constraint.
The file contains multiple user-facing strings in Chinese, including headings and descriptive text used in the injected advice. This imposes a specific language on users without any opt-in or documented locale constraint, which matches the language/locale policy violation criteria.
The manager accepts arbitrary conversation history and immediately dispatches it to background processing via this.processor.distill(history) while only returning a generic task acknowledgment. In a long-term memory skill, conversation history can contain sensitive prompts, secrets, or personal data, so silently sending it for asynchronous distillation without explicit notice or consent creates a real privacy and data-handling risk.
The code collects an environment fingerprint through EnvChecker.getFingerprint() and binds it into a stored capsule without any visible disclosure, permission gate, or minimization. Environment fingerprints can expose host-specific metadata useful for tracking, profiling, or correlating deployments, which is particularly sensitive in an agent memory system designed to persist context over time.
The primary natural-language documentation for the skill is written only in Chinese, describing the system purpose and behavior without offering a language or locale choice. Under the policy, forcing a specific language without user opt-in is a natural-language policy violation.
The embedded prompt instructs the reviewer entirely in Chinese and requires output fields described in Chinese, which implicitly fixes the interaction language. There is no indication that users can choose another language or that this locale restriction is documented as an intentional region-specific constraint.
The code sends capsule-derived content, including error patterns, task intent, and action sequences, to an external LLM client without any visible consent, minimization, or policy enforcement in this component. In a long-term memory hub, capsules may contain sensitive operational data, source snippets, credentials, or proprietary incident context, so silent exfiltration to a third-party model is a real privacy and security risk.