llm-trust-guard 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +318 -0
  3. package/dist/guards/agent-communication-guard.d.ts +169 -0
  4. package/dist/guards/agent-communication-guard.d.ts.map +1 -0
  5. package/dist/guards/agent-communication-guard.js +468 -0
  6. package/dist/guards/agent-communication-guard.js.map +1 -0
  7. package/dist/guards/autonomy-escalation-guard.d.ts +137 -0
  8. package/dist/guards/autonomy-escalation-guard.d.ts.map +1 -0
  9. package/dist/guards/autonomy-escalation-guard.js +470 -0
  10. package/dist/guards/autonomy-escalation-guard.js.map +1 -0
  11. package/dist/guards/circuit-breaker.d.ts +142 -0
  12. package/dist/guards/circuit-breaker.d.ts.map +1 -0
  13. package/dist/guards/circuit-breaker.js +347 -0
  14. package/dist/guards/circuit-breaker.js.map +1 -0
  15. package/dist/guards/code-execution-guard.d.ts +114 -0
  16. package/dist/guards/code-execution-guard.d.ts.map +1 -0
  17. package/dist/guards/code-execution-guard.js +467 -0
  18. package/dist/guards/code-execution-guard.js.map +1 -0
  19. package/dist/guards/conversation-guard.d.ts +73 -0
  20. package/dist/guards/conversation-guard.d.ts.map +1 -0
  21. package/dist/guards/conversation-guard.js +281 -0
  22. package/dist/guards/conversation-guard.js.map +1 -0
  23. package/dist/guards/drift-detector.d.ts +182 -0
  24. package/dist/guards/drift-detector.d.ts.map +1 -0
  25. package/dist/guards/drift-detector.js +480 -0
  26. package/dist/guards/drift-detector.js.map +1 -0
  27. package/dist/guards/encoding-detector.d.ts +76 -0
  28. package/dist/guards/encoding-detector.d.ts.map +1 -0
  29. package/dist/guards/encoding-detector.js +698 -0
  30. package/dist/guards/encoding-detector.js.map +1 -0
  31. package/dist/guards/execution-monitor.d.ts +73 -0
  32. package/dist/guards/execution-monitor.d.ts.map +1 -0
  33. package/dist/guards/execution-monitor.js +205 -0
  34. package/dist/guards/execution-monitor.js.map +1 -0
  35. package/dist/guards/input-sanitizer.d.ts +87 -0
  36. package/dist/guards/input-sanitizer.d.ts.map +1 -0
  37. package/dist/guards/input-sanitizer.js +301 -0
  38. package/dist/guards/input-sanitizer.js.map +1 -0
  39. package/dist/guards/mcp-security-guard.d.ts +204 -0
  40. package/dist/guards/mcp-security-guard.d.ts.map +1 -0
  41. package/dist/guards/mcp-security-guard.js +618 -0
  42. package/dist/guards/mcp-security-guard.js.map +1 -0
  43. package/dist/guards/memory-guard.d.ts +124 -0
  44. package/dist/guards/memory-guard.d.ts.map +1 -0
  45. package/dist/guards/memory-guard.js +476 -0
  46. package/dist/guards/memory-guard.js.map +1 -0
  47. package/dist/guards/multimodal-guard.d.ts +93 -0
  48. package/dist/guards/multimodal-guard.d.ts.map +1 -0
  49. package/dist/guards/multimodal-guard.js +507 -0
  50. package/dist/guards/multimodal-guard.js.map +1 -0
  51. package/dist/guards/output-filter.d.ts +76 -0
  52. package/dist/guards/output-filter.d.ts.map +1 -0
  53. package/dist/guards/output-filter.js +289 -0
  54. package/dist/guards/output-filter.js.map +1 -0
  55. package/dist/guards/policy-gate.d.ts +57 -0
  56. package/dist/guards/policy-gate.d.ts.map +1 -0
  57. package/dist/guards/policy-gate.js +182 -0
  58. package/dist/guards/policy-gate.js.map +1 -0
  59. package/dist/guards/prompt-leakage-guard.d.ts +110 -0
  60. package/dist/guards/prompt-leakage-guard.d.ts.map +1 -0
  61. package/dist/guards/prompt-leakage-guard.js +529 -0
  62. package/dist/guards/prompt-leakage-guard.js.map +1 -0
  63. package/dist/guards/rag-guard.d.ts +188 -0
  64. package/dist/guards/rag-guard.d.ts.map +1 -0
  65. package/dist/guards/rag-guard.js +769 -0
  66. package/dist/guards/rag-guard.js.map +1 -0
  67. package/dist/guards/schema-validator.d.ts +35 -0
  68. package/dist/guards/schema-validator.d.ts.map +1 -0
  69. package/dist/guards/schema-validator.js +316 -0
  70. package/dist/guards/schema-validator.js.map +1 -0
  71. package/dist/guards/state-persistence-guard.d.ts +153 -0
  72. package/dist/guards/state-persistence-guard.d.ts.map +1 -0
  73. package/dist/guards/state-persistence-guard.js +484 -0
  74. package/dist/guards/state-persistence-guard.js.map +1 -0
  75. package/dist/guards/tenant-boundary.d.ts +67 -0
  76. package/dist/guards/tenant-boundary.d.ts.map +1 -0
  77. package/dist/guards/tenant-boundary.js +187 -0
  78. package/dist/guards/tenant-boundary.js.map +1 -0
  79. package/dist/guards/tool-chain-validator.d.ts +102 -0
  80. package/dist/guards/tool-chain-validator.d.ts.map +1 -0
  81. package/dist/guards/tool-chain-validator.js +480 -0
  82. package/dist/guards/tool-chain-validator.js.map +1 -0
  83. package/dist/guards/tool-registry.d.ts +45 -0
  84. package/dist/guards/tool-registry.d.ts.map +1 -0
  85. package/dist/guards/tool-registry.js +155 -0
  86. package/dist/guards/tool-registry.js.map +1 -0
  87. package/dist/guards/trust-exploitation-guard.d.ts +134 -0
  88. package/dist/guards/trust-exploitation-guard.d.ts.map +1 -0
  89. package/dist/guards/trust-exploitation-guard.js +354 -0
  90. package/dist/guards/trust-exploitation-guard.js.map +1 -0
  91. package/dist/index.d.ts +133 -0
  92. package/dist/index.d.ts.map +1 -0
  93. package/dist/index.js +430 -0
  94. package/dist/index.js.map +1 -0
  95. package/dist/integrations/express.d.ts +119 -0
  96. package/dist/integrations/express.d.ts.map +1 -0
  97. package/dist/integrations/express.js +244 -0
  98. package/dist/integrations/express.js.map +1 -0
  99. package/dist/integrations/index.d.ts +9 -0
  100. package/dist/integrations/index.d.ts.map +1 -0
  101. package/dist/integrations/index.js +26 -0
  102. package/dist/integrations/index.js.map +1 -0
  103. package/dist/integrations/langchain.d.ts +165 -0
  104. package/dist/integrations/langchain.d.ts.map +1 -0
  105. package/dist/integrations/langchain.js +308 -0
  106. package/dist/integrations/langchain.js.map +1 -0
  107. package/dist/integrations/openai.d.ts +205 -0
  108. package/dist/integrations/openai.d.ts.map +1 -0
  109. package/dist/integrations/openai.js +380 -0
  110. package/dist/integrations/openai.js.map +1 -0
  111. package/dist/types/index.d.ts +245 -0
  112. package/dist/types/index.d.ts.map +1 -0
  113. package/dist/types/index.js +6 -0
  114. package/dist/types/index.js.map +1 -0
  115. package/package.json +64 -0
@@ -0,0 +1,124 @@
1
+ /**
2
+ * MemoryGuard (L9)
3
+ *
4
+ * Protects persistent memory/context from poisoning attacks.
5
+ * Prevents cross-session contamination and instruction injection in stored context.
6
+ *
7
+ * Threat Model:
8
+ * - ASI06: Memory & Context Poisoning
9
+ * - Memory Persistence Attacks (cross-session instruction injection)
10
+ * - Context window manipulation
11
+ *
12
+ * Protection Capabilities:
13
+ * - Memory content integrity verification
14
+ * - Instruction injection detection in stored context
15
+ * - Cross-session contamination prevention
16
+ * - Memory rollback capabilities
17
+ * - Cryptographic content signing
18
+ */
19
+ export interface MemoryGuardConfig {
20
+ /** Enable content integrity checking */
21
+ enableIntegrityCheck?: boolean;
22
+ /** Enable injection detection in memory */
23
+ detectInjections?: boolean;
24
+ /** Maximum memory items per session */
25
+ maxMemoryItems?: number;
26
+ /** Maximum age of memory items in milliseconds */
27
+ maxMemoryAge?: number;
28
+ /** Secret key for HMAC signing (auto-generated if not provided) */
29
+ signingKey?: string;
30
+ /** Enable automatic quarantine of suspicious content */
31
+ autoQuarantine?: boolean;
32
+ /** Risk threshold for blocking (0-100) */
33
+ riskThreshold?: number;
34
+ }
35
+ export interface MemoryItem {
36
+ /** Unique identifier for the memory item */
37
+ id: string;
38
+ /** The actual content stored */
39
+ content: string;
40
+ /** Source of the memory (user, assistant, system, external) */
41
+ source: "user" | "assistant" | "system" | "external" | "rag";
42
+ /** Timestamp when created */
43
+ timestamp: number;
44
+ /** Session ID that created this memory */
45
+ sessionId: string;
46
+ /** Optional metadata */
47
+ metadata?: Record<string, any>;
48
+ /** Integrity signature */
49
+ signature?: string;
50
+ /** Trust score (0-100) */
51
+ trustScore?: number;
52
+ }
53
+ export interface MemoryGuardResult {
54
+ allowed: boolean;
55
+ reason: string;
56
+ violations: string[];
57
+ request_id: string;
58
+ memory_analysis: {
59
+ items_checked: number;
60
+ items_quarantined: number;
61
+ injection_attempts: number;
62
+ integrity_failures: number;
63
+ cross_session_contamination: boolean;
64
+ risk_score: number;
65
+ };
66
+ quarantined_items: string[];
67
+ recommendations: string[];
68
+ }
69
+ export interface MemoryWriteResult {
70
+ allowed: boolean;
71
+ reason: string;
72
+ violations: string[];
73
+ request_id: string;
74
+ item_id?: string;
75
+ signature?: string;
76
+ sanitized_content?: string;
77
+ }
78
+ export declare class MemoryGuard {
79
+ private config;
80
+ private signingKey;
81
+ private quarantine;
82
+ private memoryStore;
83
+ private integrityCache;
84
+ private readonly MEMORY_INJECTION_PATTERNS;
85
+ private readonly CONTAMINATION_PATTERNS;
86
+ constructor(config?: MemoryGuardConfig);
87
+ /**
88
+ * Check if content is safe to write to memory
89
+ */
90
+ checkWrite(content: string, source: MemoryItem["source"], sessionId: string, metadata?: Record<string, any>, requestId?: string): MemoryWriteResult;
91
+ /**
92
+ * Check if memory items are safe to read/use
93
+ */
94
+ checkRead(sessionId: string, itemIds?: string[], requestId?: string): MemoryGuardResult;
95
+ /**
96
+ * Validate external memory/context before injecting into prompts
97
+ */
98
+ validateContextInjection(context: string | string[], sessionId: string, requestId?: string): MemoryGuardResult;
99
+ /**
100
+ * Get safe memory items for a session (excluding quarantined)
101
+ */
102
+ getSafeMemory(sessionId: string): MemoryItem[];
103
+ /**
104
+ * Rollback memory to a specific point in time
105
+ */
106
+ rollbackMemory(sessionId: string, beforeTimestamp: number): number;
107
+ /**
108
+ * Clear quarantine for a session
109
+ */
110
+ clearQuarantine(sessionId?: string): number;
111
+ /**
112
+ * Clear all memory for a session
113
+ */
114
+ clearSession(sessionId: string): void;
115
+ /**
116
+ * Get quarantined items for review
117
+ */
118
+ getQuarantinedItems(sessionId?: string): MemoryItem[];
119
+ private signContent;
120
+ private sanitizeContent;
121
+ private quarantineItem;
122
+ private generateRecommendations;
123
+ }
124
+ //# sourceMappingURL=memory-guard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-guard.d.ts","sourceRoot":"","sources":["../../src/guards/memory-guard.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,476 @@
1
+ "use strict";
2
+ /**
3
+ * MemoryGuard (L9)
4
+ *
5
+ * Protects persistent memory/context from poisoning attacks.
6
+ * Prevents cross-session contamination and instruction injection in stored context.
7
+ *
8
+ * Threat Model:
9
+ * - ASI06: Memory & Context Poisoning
10
+ * - Memory Persistence Attacks (cross-session instruction injection)
11
+ * - Context window manipulation
12
+ *
13
+ * Protection Capabilities:
14
+ * - Memory content integrity verification
15
+ * - Instruction injection detection in stored context
16
+ * - Cross-session contamination prevention
17
+ * - Memory rollback capabilities
18
+ * - Cryptographic content signing
19
+ */
20
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
21
+ if (k2 === undefined) k2 = k;
22
+ var desc = Object.getOwnPropertyDescriptor(m, k);
23
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
24
+ desc = { enumerable: true, get: function() { return m[k]; } };
25
+ }
26
+ Object.defineProperty(o, k2, desc);
27
+ }) : (function(o, m, k, k2) {
28
+ if (k2 === undefined) k2 = k;
29
+ o[k2] = m[k];
30
+ }));
31
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
32
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
33
+ }) : function(o, v) {
34
+ o["default"] = v;
35
+ });
36
+ var __importStar = (this && this.__importStar) || (function () {
37
+ var ownKeys = function(o) {
38
+ ownKeys = Object.getOwnPropertyNames || function (o) {
39
+ var ar = [];
40
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
41
+ return ar;
42
+ };
43
+ return ownKeys(o);
44
+ };
45
+ return function (mod) {
46
+ if (mod && mod.__esModule) return mod;
47
+ var result = {};
48
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
49
+ __setModuleDefault(result, mod);
50
+ return result;
51
+ };
52
+ })();
53
+ Object.defineProperty(exports, "__esModule", { value: true });
54
+ exports.MemoryGuard = void 0;
55
+ const crypto = __importStar(require("crypto"));
56
+ class MemoryGuard {
57
+ constructor(config = {}) {
58
+ this.quarantine = new Map();
59
+ this.memoryStore = new Map(); // sessionId -> items
60
+ this.integrityCache = new Map(); // itemId -> signature
61
+ // Injection patterns specific to memory/context poisoning
62
+ this.MEMORY_INJECTION_PATTERNS = [
63
+ // Persistence instructions
64
+ { name: "persistent_instruction", pattern: /always\s+(remember|do|follow|execute|obey)|from\s+now\s+on/i, severity: 30 },
65
+ { name: "future_trigger", pattern: /when(?:ever)?\s+(you|user|they|someone)\s+(see|mention|ask|type|say|input)/i, severity: 25 },
66
+ { name: "hidden_rule", pattern: /secret\s+(rule|instruction|command|directive)|do\s+not\s+(tell|reveal|disclose|mention)/i, severity: 40 },
67
+ { name: "role_persistence", pattern: /you\s+are\s+(always|permanently|forever|now)\s+(a|an|the)|you\s+are\s+now\s+permanently|maintain\s+this\s+persona/i, severity: 35 },
68
+ { name: "memory_manipulation", pattern: /forget\s+(everything|all|previous|prior)|clear\s+(your\s+)?memory|wipe\s+your\s+context/i, severity: 30 },
69
+ { name: "cross_session_leak", pattern: /remember\s+(?:this\s+)?for\s+(next|future|all)\s+session|store\s+(?:this\s+)?permanently/i, severity: 35 },
70
+ { name: "behavior_override", pattern: /override\s+(default|normal|standard|current)\s+behavior|change\s+your\s+(?:core\s+)?behavior/i, severity: 40 },
71
+ { name: "system_impersonation", pattern: /\[SYSTEM\s*(?:MEMORY|MESSAGE|INSTRUCTION)\]|\[CORE\s*INSTRUCTION\]|\[PERMANENT\s*RULE\]|\[ADMIN\s*OVERRIDE\]/i, severity: 50 },
72
+ { name: "exfiltration_setup", pattern: /whenever\s+.*(?:send|transmit|forward)\s+to|always\s+(?:include|append|add)\s+(?:in|to)\s+response/i, severity: 45 },
73
+ { name: "privilege_persistence", pattern: /grant\s+(admin|root|elevated|superuser)\s+(?:access|privileges?)\s+(permanently|always|forever)/i, severity: 50 },
74
+ // New patterns
75
+ { name: "conditional_behavior", pattern: /if\s+(?:user|anyone|someone)\s+(?:says|types|asks|mentions?)\s+.*(?:then|,)\s+(?:do|execute|respond|reveal|show|give)/i, severity: 35 },
76
+ { name: "hidden_command", pattern: /hidden\s+command|secret\s+trigger|backdoor|easter\s+egg\s+(?:is|:)/i, severity: 45 },
77
+ { name: "instruction_injection", pattern: /(?:new|updated|revised)\s+(?:system\s+)?instructions?\s*:|important\s+update\s*:/i, severity: 40 },
78
+ { name: "context_pollution", pattern: /(?:prepend|append)\s+(?:this\s+)?to\s+(?:all\s+)?(?:responses?|outputs?)/i, severity: 35 },
79
+ { name: "sleeper_agent", pattern: /wait\s+(?:for|until)\s+(?:signal|trigger|command)|activate\s+(?:when|on|if)/i, severity: 45 },
80
+ { name: "goal_hijacking", pattern: /(?:your\s+)?(?:new|real|true|actual)\s+(?:goal|objective|purpose|mission)\s+(?:is|:)/i, severity: 50 },
81
+ { name: "trust_exploitation", pattern: /(?:trust|believe)\s+(?:everything|anything)\s+(?:I|user)\s+(?:say|tell)/i, severity: 40 },
82
+ { name: "output_manipulation", pattern: /(?:always|never)\s+(?:include|exclude|add|remove)\s+.*\s+(?:in|from)\s+(?:your\s+)?(?:response|output)/i, severity: 35 },
83
+ { name: "persona_injection", pattern: /(?:adopt|assume|take\s+on)\s+(?:the\s+)?(?:persona|identity|role)\s+of/i, severity: 35 },
84
+ { name: "data_harvesting", pattern: /(?:collect|gather|record)\s+(?:all\s+)?(?:user\s+)?(?:data|information|inputs?)/i, severity: 45 },
85
+ { name: "bypass_safety", pattern: /(?:ignore|bypass|disable|turn\s+off)\s+(?:safety|security|content)\s+(?:checks?|filters?|measures?)/i, severity: 50 },
86
+ { name: "false_context", pattern: /(?:pretend|assume|imagine)\s+(?:that\s+)?(?:this\s+)?(?:is|was)\s+(?:a\s+)?(?:previous|earlier|past)\s+(?:conversation|session)/i, severity: 40 },
87
+ { name: "jailbreak_persistence", pattern: /(?:DAN|developer|god|admin)\s+mode\s+(?:enabled|activated|permanent)/i, severity: 50 },
88
+ { name: "instruction_hierarchy", pattern: /(?:this|these)\s+instructions?\s+(?:override|supersede|take\s+precedence)/i, severity: 45 },
89
+ ];
90
+ // Patterns indicating cross-session contamination attempts
91
+ this.CONTAMINATION_PATTERNS = [
92
+ { name: "session_reference", pattern: /previous\s+session|last\s+(?:conversation|chat|session)|yesterday|earlier\s+today/i },
93
+ { name: "user_reference", pattern: /other\s+user(?:s)?|different\s+(?:account|user|person)|another\s+(?:person|user|customer)/i },
94
+ { name: "data_mixing", pattern: /combine\s+with\s+other|merge\s+(?:sessions?|conversations?|data)|consolidate\s+(?:information|data)/i },
95
+ { name: "context_import", pattern: /import\s+(?:context|data|memory)\s+from|load\s+(?:previous|external)\s+(?:context|session)/i },
96
+ { name: "shared_memory", pattern: /shared\s+(?:memory|context|knowledge)|global\s+(?:state|context)/i },
97
+ { name: "user_impersonation", pattern: /(?:speaking|acting|responding)\s+(?:as|for)\s+(?:another|different)\s+user/i },
98
+ { name: "history_injection", pattern: /(?:add|insert|inject)\s+(?:to|into)\s+(?:conversation\s+)?history/i },
99
+ { name: "tenant_bypass", pattern: /(?:access|view|modify)\s+(?:other\s+)?(?:tenant|organization|account)(?:'s)?\s+(?:data|information)/i },
100
+ ];
101
+ this.config = {
102
+ enableIntegrityCheck: config.enableIntegrityCheck ?? true,
103
+ detectInjections: config.detectInjections ?? true,
104
+ maxMemoryItems: config.maxMemoryItems ?? 100,
105
+ maxMemoryAge: config.maxMemoryAge ?? 24 * 60 * 60 * 1000, // 24 hours
106
+ signingKey: config.signingKey ?? crypto.randomBytes(32).toString("hex"),
107
+ autoQuarantine: config.autoQuarantine ?? true,
108
+ riskThreshold: config.riskThreshold ?? 40,
109
+ };
110
+ this.signingKey = Buffer.from(this.config.signingKey, "hex");
111
+ }
112
+ /**
113
+ * Check if content is safe to write to memory
114
+ */
115
+ checkWrite(content, source, sessionId, metadata, requestId) {
116
+ const reqId = requestId || `mem-w-${Date.now()}`;
117
+ const violations = [];
118
+ let riskScore = 0;
119
+ // Check for injection patterns
120
+ if (this.config.detectInjections) {
121
+ for (const { name, pattern, severity } of this.MEMORY_INJECTION_PATTERNS) {
122
+ if (pattern.test(content)) {
123
+ violations.push(`injection_${name}`);
124
+ riskScore += severity;
125
+ }
126
+ }
127
+ }
128
+ // Check for cross-session contamination attempts
129
+ for (const { name, pattern } of this.CONTAMINATION_PATTERNS) {
130
+ if (pattern.test(content)) {
131
+ violations.push(`contamination_${name}`);
132
+ riskScore += 20;
133
+ }
134
+ }
135
+ // Check for Unicode-based obfuscation in content
136
+ if (/[\u200B\u200C\u200D\uFEFF\u00AD\u2060\u180E]/.test(content)) {
137
+ violations.push("zero_width_obfuscation");
138
+ riskScore += 30;
139
+ }
140
+ if (/[\u202A\u202B\u202C\u202D\u202E\u2066\u2067\u2068\u2069]/.test(content)) {
141
+ violations.push("bidi_control_obfuscation");
142
+ riskScore += 35;
143
+ }
144
+ if (/[\u{E0000}-\u{E007F}]/u.test(content)) {
145
+ violations.push("tag_character_obfuscation");
146
+ riskScore += 40;
147
+ }
148
+ // External sources are less trusted
149
+ if (source === "external" || source === "rag") {
150
+ riskScore += 15;
151
+ }
152
+ // Check memory limits
153
+ const sessionMemory = this.memoryStore.get(sessionId) || [];
154
+ if (sessionMemory.length >= this.config.maxMemoryItems) {
155
+ violations.push("memory_limit_exceeded");
156
+ return {
157
+ allowed: false,
158
+ reason: "Memory limit exceeded for session",
159
+ violations,
160
+ request_id: reqId,
161
+ };
162
+ }
163
+ // Decision
164
+ const blocked = riskScore >= this.config.riskThreshold;
165
+ if (blocked) {
166
+ return {
167
+ allowed: false,
168
+ reason: `Memory write blocked: ${violations.slice(0, 3).join(", ")}`,
169
+ violations,
170
+ request_id: reqId,
171
+ };
172
+ }
173
+ // Generate sanitized content (remove suspicious patterns)
174
+ const sanitizedContent = this.sanitizeContent(content);
175
+ // Create and sign the memory item
176
+ const itemId = `mem-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
177
+ const signature = this.signContent(itemId, sanitizedContent, sessionId);
178
+ // Store the item
179
+ const item = {
180
+ id: itemId,
181
+ content: sanitizedContent,
182
+ source,
183
+ timestamp: Date.now(),
184
+ sessionId,
185
+ metadata,
186
+ signature,
187
+ trustScore: 100 - riskScore,
188
+ };
189
+ const memory = this.memoryStore.get(sessionId) || [];
190
+ memory.push(item);
191
+ this.memoryStore.set(sessionId, memory);
192
+ this.integrityCache.set(itemId, signature);
193
+ return {
194
+ allowed: true,
195
+ reason: "Memory write allowed",
196
+ violations,
197
+ request_id: reqId,
198
+ item_id: itemId,
199
+ signature,
200
+ sanitized_content: sanitizedContent !== content ? sanitizedContent : undefined,
201
+ };
202
+ }
203
+ /**
204
+ * Check if memory items are safe to read/use
205
+ */
206
+ checkRead(sessionId, itemIds, requestId) {
207
+ const reqId = requestId || `mem-r-${Date.now()}`;
208
+ const violations = [];
209
+ const quarantinedItems = [];
210
+ let injectionAttempts = 0;
211
+ let integrityFailures = 0;
212
+ let crossSessionContamination = false;
213
+ let riskScore = 0;
214
+ const sessionMemory = this.memoryStore.get(sessionId) || [];
215
+ const itemsToCheck = itemIds
216
+ ? sessionMemory.filter((item) => itemIds.includes(item.id))
217
+ : sessionMemory;
218
+ for (const item of itemsToCheck) {
219
+ // Verify integrity
220
+ if (this.config.enableIntegrityCheck && item.signature) {
221
+ const expectedSignature = this.signContent(item.id, item.content, item.sessionId);
222
+ if (item.signature !== expectedSignature) {
223
+ integrityFailures++;
224
+ violations.push(`integrity_failure_${item.id}`);
225
+ riskScore += 40;
226
+ if (this.config.autoQuarantine) {
227
+ this.quarantineItem(item);
228
+ quarantinedItems.push(item.id);
229
+ }
230
+ continue;
231
+ }
232
+ }
233
+ // Check for stale items
234
+ const age = Date.now() - item.timestamp;
235
+ if (age > this.config.maxMemoryAge) {
236
+ violations.push(`stale_memory_${item.id}`);
237
+ riskScore += 10;
238
+ if (this.config.autoQuarantine) {
239
+ this.quarantineItem(item);
240
+ quarantinedItems.push(item.id);
241
+ }
242
+ continue;
243
+ }
244
+ // Re-scan content for injections (in case of tampering)
245
+ if (this.config.detectInjections) {
246
+ for (const { name, pattern, severity } of this.MEMORY_INJECTION_PATTERNS) {
247
+ if (pattern.test(item.content)) {
248
+ injectionAttempts++;
249
+ violations.push(`read_injection_${name}`);
250
+ riskScore += severity / 2; // Lower severity on read (already stored)
251
+ if (severity >= 40 && this.config.autoQuarantine) {
252
+ this.quarantineItem(item);
253
+ quarantinedItems.push(item.id);
254
+ }
255
+ }
256
+ }
257
+ }
258
+ // Check for cross-session content
259
+ if (item.sessionId !== sessionId) {
260
+ crossSessionContamination = true;
261
+ violations.push("cross_session_access");
262
+ riskScore += 30;
263
+ }
264
+ }
265
+ const blocked = riskScore >= this.config.riskThreshold * 1.5; // Higher threshold for reads
266
+ return {
267
+ allowed: !blocked,
268
+ reason: blocked
269
+ ? `Memory read blocked: ${violations.slice(0, 3).join(", ")}`
270
+ : "Memory read allowed",
271
+ violations,
272
+ request_id: reqId,
273
+ memory_analysis: {
274
+ items_checked: itemsToCheck.length,
275
+ items_quarantined: quarantinedItems.length,
276
+ injection_attempts: injectionAttempts,
277
+ integrity_failures: integrityFailures,
278
+ cross_session_contamination: crossSessionContamination,
279
+ risk_score: Math.min(100, riskScore),
280
+ },
281
+ quarantined_items: quarantinedItems,
282
+ recommendations: this.generateRecommendations(violations, integrityFailures > 0),
283
+ };
284
+ }
285
+ /**
286
+ * Validate external memory/context before injecting into prompts
287
+ */
288
+ validateContextInjection(context, sessionId, requestId) {
289
+ const reqId = requestId || `mem-ctx-${Date.now()}`;
290
+ const contexts = Array.isArray(context) ? context : [context];
291
+ const violations = [];
292
+ let totalRiskScore = 0;
293
+ let injectionAttempts = 0;
294
+ for (const ctx of contexts) {
295
+ // Check for injection patterns
296
+ for (const { name, pattern, severity } of this.MEMORY_INJECTION_PATTERNS) {
297
+ if (pattern.test(ctx)) {
298
+ violations.push(`context_injection_${name}`);
299
+ totalRiskScore += severity;
300
+ injectionAttempts++;
301
+ }
302
+ }
303
+ // Check for contamination patterns
304
+ for (const { name, pattern } of this.CONTAMINATION_PATTERNS) {
305
+ if (pattern.test(ctx)) {
306
+ violations.push(`context_contamination_${name}`);
307
+ totalRiskScore += 15;
308
+ }
309
+ }
310
+ // Check for privilege escalation hidden in context
311
+ if (/\{\s*"?role"?\s*:\s*"?(admin|root|system)"?/i.test(ctx) ||
312
+ /"?permissions?"?\s*:\s*["']\*["']/i.test(ctx) ||
313
+ /"?isAdmin"?\s*:\s*true/i.test(ctx)) {
314
+ violations.push("hidden_privilege_in_context");
315
+ totalRiskScore += 35;
316
+ }
317
+ // Check for JSON/structured data injection
318
+ if (/\{\s*"?(instruction|command|action)"?\s*:/i.test(ctx)) {
319
+ violations.push("structured_instruction_in_context");
320
+ totalRiskScore += 25;
321
+ }
322
+ // Check for zero-width character obfuscation
323
+ if (/[\u200B\u200C\u200D\uFEFF\u00AD\u2060\u180E]/.test(ctx)) {
324
+ violations.push("zero_width_characters");
325
+ totalRiskScore += 30;
326
+ }
327
+ // Check for bidirectional text control characters
328
+ if (/[\u202A\u202B\u202C\u202D\u202E\u2066\u2067\u2068\u2069]/.test(ctx)) {
329
+ violations.push("bidi_control_characters");
330
+ totalRiskScore += 35;
331
+ }
332
+ // Check for homoglyphs (Cyrillic/Greek lookalikes)
333
+ if (/[\u0430-\u044F\u0410-\u042F\u0391-\u03C9]/.test(ctx)) {
334
+ violations.push("potential_homoglyph_attack");
335
+ totalRiskScore += 20;
336
+ }
337
+ // Check for tag characters (used to hide content)
338
+ if (/[\u{E0000}-\u{E007F}]/u.test(ctx)) {
339
+ violations.push("tag_character_hiding");
340
+ totalRiskScore += 40;
341
+ }
342
+ // Check for unusual whitespace characters
343
+ if (/[\u00A0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]/.test(ctx)) {
344
+ violations.push("unusual_whitespace");
345
+ totalRiskScore += 15;
346
+ }
347
+ }
348
+ const blocked = totalRiskScore >= this.config.riskThreshold;
349
+ return {
350
+ allowed: !blocked,
351
+ reason: blocked
352
+ ? `Context injection blocked: ${violations.slice(0, 3).join(", ")}`
353
+ : "Context injection allowed",
354
+ violations,
355
+ request_id: reqId,
356
+ memory_analysis: {
357
+ items_checked: contexts.length,
358
+ items_quarantined: 0,
359
+ injection_attempts: injectionAttempts,
360
+ integrity_failures: 0,
361
+ cross_session_contamination: false,
362
+ risk_score: Math.min(100, totalRiskScore),
363
+ },
364
+ quarantined_items: [],
365
+ recommendations: this.generateRecommendations(violations, false),
366
+ };
367
+ }
368
+ /**
369
+ * Get safe memory items for a session (excluding quarantined)
370
+ */
371
+ getSafeMemory(sessionId) {
372
+ const sessionMemory = this.memoryStore.get(sessionId) || [];
373
+ const quarantinedIds = new Set([...this.quarantine.keys()]);
374
+ return sessionMemory.filter((item) => !quarantinedIds.has(item.id) &&
375
+ Date.now() - item.timestamp <= this.config.maxMemoryAge);
376
+ }
377
+ /**
378
+ * Rollback memory to a specific point in time
379
+ */
380
+ rollbackMemory(sessionId, beforeTimestamp) {
381
+ const sessionMemory = this.memoryStore.get(sessionId) || [];
382
+ const originalCount = sessionMemory.length;
383
+ const filtered = sessionMemory.filter((item) => item.timestamp < beforeTimestamp);
384
+ this.memoryStore.set(sessionId, filtered);
385
+ return originalCount - filtered.length;
386
+ }
387
+ /**
388
+ * Clear quarantine for a session
389
+ */
390
+ clearQuarantine(sessionId) {
391
+ if (sessionId) {
392
+ let count = 0;
393
+ for (const [id, item] of this.quarantine) {
394
+ if (item.sessionId === sessionId) {
395
+ this.quarantine.delete(id);
396
+ count++;
397
+ }
398
+ }
399
+ return count;
400
+ }
401
+ else {
402
+ const count = this.quarantine.size;
403
+ this.quarantine.clear();
404
+ return count;
405
+ }
406
+ }
407
+ /**
408
+ * Clear all memory for a session
409
+ */
410
+ clearSession(sessionId) {
411
+ this.memoryStore.delete(sessionId);
412
+ this.clearQuarantine(sessionId);
413
+ // Clear integrity cache for session items
414
+ for (const [id] of this.integrityCache) {
415
+ if (id.startsWith(`mem-${sessionId}`)) {
416
+ this.integrityCache.delete(id);
417
+ }
418
+ }
419
+ }
420
+ /**
421
+ * Get quarantined items for review
422
+ */
423
+ getQuarantinedItems(sessionId) {
424
+ const items = [...this.quarantine.values()];
425
+ return sessionId ? items.filter((item) => item.sessionId === sessionId) : items;
426
+ }
427
+ signContent(itemId, content, sessionId) {
428
+ const data = `${itemId}:${sessionId}:${content}`;
429
+ return crypto.createHmac("sha256", this.signingKey).update(data).digest("hex");
430
+ }
431
+ sanitizeContent(content) {
432
+ let sanitized = content;
433
+ // Remove the most dangerous patterns
434
+ const dangerousPatterns = [
435
+ /\[SYSTEM\s*MEMORY\]/gi,
436
+ /\[CORE\s*INSTRUCTION\]/gi,
437
+ /\[PERMANENT\s*RULE\]/gi,
438
+ /override\s+(default|normal|standard)\s+behavior/gi,
439
+ ];
440
+ for (const pattern of dangerousPatterns) {
441
+ sanitized = sanitized.replace(pattern, "[REDACTED]");
442
+ }
443
+ return sanitized;
444
+ }
445
+ quarantineItem(item) {
446
+ this.quarantine.set(item.id, item);
447
+ // Remove from active memory
448
+ const sessionMemory = this.memoryStore.get(item.sessionId) || [];
449
+ const filtered = sessionMemory.filter((i) => i.id !== item.id);
450
+ this.memoryStore.set(item.sessionId, filtered);
451
+ }
452
+ generateRecommendations(violations, integrityIssue) {
453
+ const recommendations = [];
454
+ if (integrityIssue) {
455
+ recommendations.push("Memory integrity compromised - consider clearing session memory");
456
+ }
457
+ if (violations.some((v) => v.includes("injection"))) {
458
+ recommendations.push("Review memory sources for injection attempts");
459
+ }
460
+ if (violations.some((v) => v.includes("contamination"))) {
461
+ recommendations.push("Enforce strict session isolation");
462
+ }
463
+ if (violations.some((v) => v.includes("stale"))) {
464
+ recommendations.push("Implement memory expiration policies");
465
+ }
466
+ if (violations.some((v) => v.includes("privilege"))) {
467
+ recommendations.push("Audit memory for privilege escalation attempts");
468
+ }
469
+ if (recommendations.length === 0) {
470
+ recommendations.push("Continue monitoring memory operations");
471
+ }
472
+ return recommendations;
473
+ }
474
+ }
475
+ exports.MemoryGuard = MemoryGuard;
476
+ //# sourceMappingURL=memory-guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-guard.js","sourceRoot":"","sources":["../../src/guards/memory-guard.ts"],"names":[],"mappings":"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"}