T09 · Insecure Skill Coding Practices
- Location
src/MemoryClient.js:30- Finding
Raw memories, search queries, and conversations are transmitted to MiniMax by default
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This memory skill does what it says, but it sends sensitive memory and conversation content to external or configurable endpoints by default and allows durable identity changes without a clear approval boundary.
Install only if you are comfortable with an agent storing long-term memories and potentially sending memory text, search queries, and conversation transcripts to MiniMax or to any configured local LLM endpoint. Prefer local mode for sensitive use, restrict localLlmUrl to a trusted loopback Ollama service, avoid storing secrets or regulated data, and require human review before using the identity-setting or vector-regeneration tools.
src/MemoryClient.js:30Raw memories, search queries, and conversations are transmitted to MiniMax by default
src/MemoryClient.js:57Unrestricted localLlmUrl can redirect sensitive memory traffic to an attacker-controlled server
index.js:120Core Identity can be persistently overwritten without authorization or provenance controls
The skill documents capabilities that can access environment variables and communicate over the network, but it does not declare any explicit tool scope or permission boundaries. In an agent ecosystem, this increases the risk of over-broad access, accidental secret exposure, or unintended external communication because users and orchestrators cannot clearly constrain what the skill may do.
This skill is designed to store long-term semantic memories about users, including preferences, facts, experiences, and distilled conversation content, but it does not warn that sensitive personal data may be retained. That omission can lead users or operators to store private information without informed consent, creating privacy, retention, and compliance risks.
The documented cloud mode uses the MiniMax API, but the skill does not disclose that conversation text, distilled memories, or search-related content may be sent to an external provider. In a memory skill, this context makes the omission more dangerous because the transmitted data is likely to include persistent, user-specific, and potentially sensitive information.
The distillation tool accepts arbitrary conversation messages and forwards them to client.distill(), while plugin configuration explicitly supports API and local LLM modes. That means sensitive user conversation content may be processed by an external model endpoint without any notice, consent boundary, redaction, or data-minimization controls, creating privacy and data-handling risk.
The manifest describes a semantic memory layer for learning facts, searching context, maintaining persona, and extracting memories from conversations. The andrew_memory_regenerate_vectors tool performs backend reindexing/model-migration maintenance rather than a user-facing memory capability, making it an unjustified extra capability relative to the stated purpose.
The hardcoded external MiniMax domain confirms third-party transmission rather than purely local processing. In a long-term memory component, this increases data exposure risk because users and integrators may reasonably expect memory storage/search to stay local unless clearly stated otherwise.
// API mode: MiniMax
try {
const response = await fetch('https://api.minimaxi.com/v1/embeddings', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
The hardcoded external MiniMax domain confirms third-party transmission rather than purely local processing. In a long-term memory component, this increases data exposure risk because users and integrators may reasonably expect memory storage/search to stay local unless clearly stated otherwise.
// API mode: MiniMax
try {
const response = await fetch('https://api.minimaxi.com/v1/embeddings', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
The client sends arbitrary memory/query text to a third-party embedding API, and the same file later sends conversation content to an external LLM for distillation. In a memory layer, this text is likely to contain long-term user facts, identity data, and prior conversation context, so undisclosed exfiltration to an external service creates a real confidentiality and privacy risk.
The hard-coded prompt instructs the model in Chinese and implicitly constrains the skill's behavior to a specific language. There is no opt-in, language selection mechanism, or documented reason for enforcing this locale.
The hardcoded MiniMax messages endpoint indicates conversation content can leave the local environment for processing. Given this skill manages identity and distilled memories, the context amplifies risk because uploaded content is likely more persistent and sensitive than ordinary prompts.
}
try {
const response = await fetch('https://api.minimaxi.com/anthropic/v1/messages', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
The hardcoded MiniMax messages endpoint indicates conversation content can leave the local environment for processing. Given this skill manages identity and distilled memories, the context amplifies risk because uploaded content is likely more persistent and sensitive than ordinary prompts.
}
try {
const response = await fetch('https://api.minimaxi.com/anthropic/v1/messages', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
The dependency uses a caret range (^0.27.1), which allows automatic installation of newer compatible versions rather than a single audited release. This increases supply-chain risk because a compromised upstream release or breaking security change could be pulled into the skill without explicit review; in a memory-layer skill that stores and retrieves long-term agent data, a malicious dependency could access sensitive conversation history or corrupt memory behavior.
"extensions": ["./index.js"]
},
"dependencies": {
"@lancedb/lancedb": "^0.27.1"
}
}
The client reads MINIMAX_API_KEY from the environment, which is a sensitive credential access pattern covered by the warning requirement for code files. There is no nearby comment, docstring, or user-facing notice explaining that the skill depends on and accesses this credential.
Detected: suspicious.env_credential_access