T02 · Agent Memory Poisoning
- Location
scripts/core/claude-memory.ts:67- Finding
Persistent Untrusted Memory Can Poison Future Agent Context
- Content
View full analysis
= [ { re: /我叫|我是|称呼我|你可以叫我/, kind: 'identity', summary: 'User identity preference', importance: 0.95, tags: ['identity'] }, { re: /不要|别再|应该|必须|纠正/, kind: 'correction', summary: 'User correction or hard preference', importance: 1.0, tags: ['correction'] }, { re: /正在做|现在要|接下来做|当前任务/, kind: 'task', summary: 'Current task state', importance: 0.9, tags: ['task'] }, { re: /项目|仓库|代码库|目录|工作目录/, kind: 'project', summary: 'Project-level fact', importance: 0.85, tags: ['project'] }, { re: /参考|资料|文档|源码/, kind: 'reference', summary: 'Reference location', importance: 0.8, tags: ['reference'] } ]; for (const rule of rules) { if (!rule.re.test(turnText)) continue; created.push(this.addMemory(rule.kind, rule.summary, turnText, { importance: rule.importance, tags: rule.tags })); } return created; } formatRetrievedContext(query: string, topK: number = 5): string { const matches = this.retrieve(query, topK); if (matches.length === 0) return 'No relevant memory found.'; return matches.map((m, i) => `${i + 1}. [${m.entry.kind}] ${m.entry.summary}: ${m.entry.content}`).join('\n'); } ``` The resulting content is placed directly into coordinator output: ```ts buildRun(request: string) { return { request, retrievedMemory: this.memory.formatRetrievedContext(request, 5), tasks: [ { role: 'coordinator', objective: 'Split request into a task graph.', evidenceRequired: true }, { role: 'explorer', objective: 'Return evid ...[truncated 3494 chars]- Remediation
View remediation
