T01 · Skill Instruction Hijacking
- Location
memori_extension.py:348- Finding
Retrieved memory can replace trusted system instructions
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill is mostly transparent about local memory storage and optional external API use, but its LLM interception can replace the original system instructions with retrieved memory content.
Review this before installing in any agent that relies on strong system instructions or tool-use policies. Keep ZHIPUAI_API_KEY unset unless you explicitly accept sending conversation text to Zhipu AI, use a sandbox or restricted environment, and avoid storing untrusted text in the Memori database until the interceptor preserves original system messages and treats retrieved memories as untrusted reference material.
memori_extension.py:348Retrieved memory can replace trusted system instructions
SKILL.md:57Third-party dependencies are installed without version or integrity pinning
Code or instructions that leak agent conversation context to external services, potentially exposing sensitive user interactions.
### External API Calls
⚠️ **Important**: If `ZHIPUAI_API_KEY` is set, this skill may send conversation text to Zhipu AI's servers for augmentation.
**To disable external API calls**:
- Simply don't set `ZHIPUAI_API_KEY`
The skill explicitly states that when ZHIPUAI_API_KEY is configured, conversation text including user messages, system prompts, and assistant responses may be sent to an external service. This is a real context-leakage risk because sensitive prompts, secrets, internal instructions, or user data could be exfiltrated to a third-party API during normal operation.
### External API Calls
⚠️ **Important**: If `ZHIPUAI_API_KEY` is set, this skill may send conversation text to Zhipu AI's servers for augmentation.
**To disable external API calls**:
- Simply don't set `ZHIPUAI_API_KEY`
The skill advertises capabilities to read environment variables and perform local file read/write operations, but it does not declare an explicit tool scope such as permissions or allowed-tools. This creates a transparency and least-privilege gap: an operator or platform may enable the skill without clearly understanding or constraining what resources it can access.
The skill can persistently append terms to a file path controlled by MEMORI_TECH_TERMS_FILE, but this write capability is not reflected in the skill description. Hidden persistent file modification is risky because operators may enable or invoke the skill assuming it is read-only or memory-only, leading to unintended local state changes or corruption of arbitrary writable files if configuration is unsafe.
Dynamic import() can load arbitrary modules at runtime, bypassing static analysis and potentially importing malicious code.
return {
"entities": self._extract_entities(response.choices[0].message.content),
"summary": response.choices[0].message.content[:500],
"timestamp": __import__('datetime').datetime.now().isoformat()
}
except Exception as e:
The injected system prompt explicitly says "You are a professional technical assistant" and instructs the model in English, which can steer outputs toward English regardless of the user's preferred language. The file does not offer any locale choice or opt-in mechanism to preserve the user's language preference.
Loading and maintaining a standalone term list from an arbitrary path adds local file access behavior beyond the core purpose of memory augmentation and LLM interception. While related to entity extraction heuristics, this configurable file-management capability is not clearly part of the manifest's stated scope.