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.
- package/LICENSE +21 -0
- package/README.md +318 -0
- package/dist/guards/agent-communication-guard.d.ts +169 -0
- package/dist/guards/agent-communication-guard.d.ts.map +1 -0
- package/dist/guards/agent-communication-guard.js +468 -0
- package/dist/guards/agent-communication-guard.js.map +1 -0
- package/dist/guards/autonomy-escalation-guard.d.ts +137 -0
- package/dist/guards/autonomy-escalation-guard.d.ts.map +1 -0
- package/dist/guards/autonomy-escalation-guard.js +470 -0
- package/dist/guards/autonomy-escalation-guard.js.map +1 -0
- package/dist/guards/circuit-breaker.d.ts +142 -0
- package/dist/guards/circuit-breaker.d.ts.map +1 -0
- package/dist/guards/circuit-breaker.js +347 -0
- package/dist/guards/circuit-breaker.js.map +1 -0
- package/dist/guards/code-execution-guard.d.ts +114 -0
- package/dist/guards/code-execution-guard.d.ts.map +1 -0
- package/dist/guards/code-execution-guard.js +467 -0
- package/dist/guards/code-execution-guard.js.map +1 -0
- package/dist/guards/conversation-guard.d.ts +73 -0
- package/dist/guards/conversation-guard.d.ts.map +1 -0
- package/dist/guards/conversation-guard.js +281 -0
- package/dist/guards/conversation-guard.js.map +1 -0
- package/dist/guards/drift-detector.d.ts +182 -0
- package/dist/guards/drift-detector.d.ts.map +1 -0
- package/dist/guards/drift-detector.js +480 -0
- package/dist/guards/drift-detector.js.map +1 -0
- package/dist/guards/encoding-detector.d.ts +76 -0
- package/dist/guards/encoding-detector.d.ts.map +1 -0
- package/dist/guards/encoding-detector.js +698 -0
- package/dist/guards/encoding-detector.js.map +1 -0
- package/dist/guards/execution-monitor.d.ts +73 -0
- package/dist/guards/execution-monitor.d.ts.map +1 -0
- package/dist/guards/execution-monitor.js +205 -0
- package/dist/guards/execution-monitor.js.map +1 -0
- package/dist/guards/input-sanitizer.d.ts +87 -0
- package/dist/guards/input-sanitizer.d.ts.map +1 -0
- package/dist/guards/input-sanitizer.js +301 -0
- package/dist/guards/input-sanitizer.js.map +1 -0
- package/dist/guards/mcp-security-guard.d.ts +204 -0
- package/dist/guards/mcp-security-guard.d.ts.map +1 -0
- package/dist/guards/mcp-security-guard.js +618 -0
- package/dist/guards/mcp-security-guard.js.map +1 -0
- package/dist/guards/memory-guard.d.ts +124 -0
- package/dist/guards/memory-guard.d.ts.map +1 -0
- package/dist/guards/memory-guard.js +476 -0
- package/dist/guards/memory-guard.js.map +1 -0
- package/dist/guards/multimodal-guard.d.ts +93 -0
- package/dist/guards/multimodal-guard.d.ts.map +1 -0
- package/dist/guards/multimodal-guard.js +507 -0
- package/dist/guards/multimodal-guard.js.map +1 -0
- package/dist/guards/output-filter.d.ts +76 -0
- package/dist/guards/output-filter.d.ts.map +1 -0
- package/dist/guards/output-filter.js +289 -0
- package/dist/guards/output-filter.js.map +1 -0
- package/dist/guards/policy-gate.d.ts +57 -0
- package/dist/guards/policy-gate.d.ts.map +1 -0
- package/dist/guards/policy-gate.js +182 -0
- package/dist/guards/policy-gate.js.map +1 -0
- package/dist/guards/prompt-leakage-guard.d.ts +110 -0
- package/dist/guards/prompt-leakage-guard.d.ts.map +1 -0
- package/dist/guards/prompt-leakage-guard.js +529 -0
- package/dist/guards/prompt-leakage-guard.js.map +1 -0
- package/dist/guards/rag-guard.d.ts +188 -0
- package/dist/guards/rag-guard.d.ts.map +1 -0
- package/dist/guards/rag-guard.js +769 -0
- package/dist/guards/rag-guard.js.map +1 -0
- package/dist/guards/schema-validator.d.ts +35 -0
- package/dist/guards/schema-validator.d.ts.map +1 -0
- package/dist/guards/schema-validator.js +316 -0
- package/dist/guards/schema-validator.js.map +1 -0
- package/dist/guards/state-persistence-guard.d.ts +153 -0
- package/dist/guards/state-persistence-guard.d.ts.map +1 -0
- package/dist/guards/state-persistence-guard.js +484 -0
- package/dist/guards/state-persistence-guard.js.map +1 -0
- package/dist/guards/tenant-boundary.d.ts +67 -0
- package/dist/guards/tenant-boundary.d.ts.map +1 -0
- package/dist/guards/tenant-boundary.js +187 -0
- package/dist/guards/tenant-boundary.js.map +1 -0
- package/dist/guards/tool-chain-validator.d.ts +102 -0
- package/dist/guards/tool-chain-validator.d.ts.map +1 -0
- package/dist/guards/tool-chain-validator.js +480 -0
- package/dist/guards/tool-chain-validator.js.map +1 -0
- package/dist/guards/tool-registry.d.ts +45 -0
- package/dist/guards/tool-registry.d.ts.map +1 -0
- package/dist/guards/tool-registry.js +155 -0
- package/dist/guards/tool-registry.js.map +1 -0
- package/dist/guards/trust-exploitation-guard.d.ts +134 -0
- package/dist/guards/trust-exploitation-guard.d.ts.map +1 -0
- package/dist/guards/trust-exploitation-guard.js +354 -0
- package/dist/guards/trust-exploitation-guard.js.map +1 -0
- package/dist/index.d.ts +133 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +430 -0
- package/dist/index.js.map +1 -0
- package/dist/integrations/express.d.ts +119 -0
- package/dist/integrations/express.d.ts.map +1 -0
- package/dist/integrations/express.js +244 -0
- package/dist/integrations/express.js.map +1 -0
- package/dist/integrations/index.d.ts +9 -0
- package/dist/integrations/index.d.ts.map +1 -0
- package/dist/integrations/index.js +26 -0
- package/dist/integrations/index.js.map +1 -0
- package/dist/integrations/langchain.d.ts +165 -0
- package/dist/integrations/langchain.d.ts.map +1 -0
- package/dist/integrations/langchain.js +308 -0
- package/dist/integrations/langchain.js.map +1 -0
- package/dist/integrations/openai.d.ts +205 -0
- package/dist/integrations/openai.d.ts.map +1 -0
- package/dist/integrations/openai.js +380 -0
- package/dist/integrations/openai.js.map +1 -0
- package/dist/types/index.d.ts +245 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +6 -0
- package/dist/types/index.js.map +1 -0
- 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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"}
|