T02 · Agent Memory Poisoning
- Location
convex/memory.js:6- Finding
Missing Authorization Allows Cross-Agent Memory Access, Poisoning, and Deletion
- Content
View full analysis
{ return await ctx.runMutation(components.openclawBackend.memory.addMemory, args); }, }); export const searchMemory = query({ args: { agentId: v.string(), type: v.optional( v.union( v.literal("fact"), v.literal("preference"), v.literal("decision"), v.literal("note"), ), ), limit: v.optional(v.number()), }, returns: v.array( v.object({ _id: v.string(), type: v.union( v.literal("fact"), v.literal("preference"), v.literal("decision"), v.literal("note"), ), content: v.string(), tags: v.optional(v.array(v.string())), createdAt: v.number(), }), ), handler: async (ctx, args) => { return await ctx.runQuery(components.openclawBackend.memory.searchMemory, args); }, }); export const deleteMemory = mutation({ args: { memoryId: v.string(), }, returns: v.boolean(), handler: async (ctx, args) => { return await ctx.runMutation(components.openclawBackend.memory.deleteMemory, args); }, }); ``` The component trusts the supplied `agentId` and deletes records without checking ownership: ```js export const searchMemory = query({ args: { agentId: v.string(), type: v.optional( v. ...[truncated 3976 chars]- Remediation
View remediation
