@weave_protocol/mund 0.5.3 → 0.6.1

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/dist/constants.js CHANGED
@@ -534,6 +534,15 @@ export const CODE_PATTERNS = [
534
534
  // Injection Detection Patterns
535
535
  // ============================================================================
536
536
  export const INJECTION_PATTERNS = [
537
+ {
538
+ id: 'injection_classifier',
539
+ name: 'Likely Prompt Injection (local classifier)',
540
+ description: 'A small offline model over word and character n-grams flags text that reads like an attempt to override an agent\'s instructions, including paraphrases no pattern names. Never blocks on its own. Set MUND_CLASSIFIER=0 or disable this rule to turn it off.',
541
+ type: 'injection',
542
+ severity: 'medium',
543
+ action: 'alert',
544
+ enabled: true
545
+ },
537
546
  // Patterns run on normalized text: zero-width characters removed, Unicode
538
547
  // NFKC, curly quotes straightened, whitespace collapsed, and punctuation
539
548
  // other than . , ! ? ' " ( ) - replaced by spaces (so "System:" reads "System").
@@ -562,7 +571,7 @@ export const INJECTION_PATTERNS = [
562
571
  name: 'Prompt Injection - Addressed to the AI',
563
572
  description: 'Content that speaks to an AI reading it, a sign it was planted for an agent rather than written for a person',
564
573
  type: 'injection',
565
- pattern: String.raw `(?i)\bif\s+you(?:'re|\s+are)\s+(?:an?\s+)?(?:ai|llm|large\s+language\s+model|language\s+model|ai\s+assistant|ai\s+agent|ai\s+model|chatbot|gpt|chatgpt|claude|gemini|copilot)\b|\bif\s+you(?:'re|\s+are)\s+reading\s+this,?\s+(?:you\s+)?(?:must|should|need\s+to|have\s+to|are\s+required)\b|\b(?:note|message|instructions?)\s+(?:to|for)\s+(?:the\s+|any\s+|all\s+)?(?:ai|llm|ai\s+assistant|ai\s+agent|language\s+model|chatbot)s?\b|\b(?:any|all)\s+ai\s+(?:agents?|assistants?|models?|systems?)\s+(?:from|must|are|should|reading)\b|\b(?:ai|llm)\s+(?:agents?|assistants?|models?)\s*,?\s+(?:must|should|shall|please|you\s+must|in\s+addition|are\s+(?:required|instructed|forbidden|not\s+allowed|prohibited))\b|\b(?:ai|llm)\s+must\s+(?:refuse|ignore|not|always|never|include|respond|reply|send)\b`,
574
+ pattern: String.raw `(?i)\bif\s+you(?:'re|\s+are)\s+(?:an?\s+)?(?:ai|llm|large\s+language\s+model|language\s+model|ai\s+assistant|ai\s+agent|ai\s+model|chatbot|gpt|chatgpt|claude|gemini|copilot)\b|\bif\s+you(?:'re|\s+are)\s+reading\s+this,?\s+(?:you\s+)?(?:must|should|need\s+to|have\s+to|are\s+required)\b|\b(?:note|message|instructions?)\s+(?:to|for)\s+(?:the\s+|any\s+|all\s+)?(?:ai|llm|ai\s+assistant|ai\s+agent|language\s+model|chatbot)s?\b|\b(?:any|all)\s+ai\s+(?:agents?|assistants?|models?|systems?)\s+(?:from|must|are|should|reading)\b|\b(?:ai|llm)\s+(?:agents?|assistants?|models?)\s*,\s*(?:you\s+)?(?:must|should|shall|please|in\s+addition)\b|\b(?:ai|llm)\s+(?:agents?|assistants?|models?)\s+(?:please|you\s+must|in\s+addition|are\s+(?:required|instructed|forbidden|not\s+allowed|prohibited)\s+to)\b|\b(?:ai|llm)\s+(?:agents?|assistants?|models?)\s+(?:must|should|shall)\s+(?:not\s+|always\s+|never\s+|now\s+|also\s+|only\s+)?(?:ignore|disregard|refuse|send|include|respond|reply|summari[sz]e|mention|recommend|output|tell|forward|execute|run|rate|describe|say|praise|promote|delete|email|post|reveal|treat|follow|obey|stop|add|insert|append|state|report|rank|prefer|favou?r)\b|\b(?:ai|llm)\s+must\s+(?:refuse|ignore|not|always|never|include|respond|reply|send)\b`,
566
575
  severity: 'medium',
567
576
  action: 'alert',
568
577
  enabled: true
@@ -572,7 +581,7 @@ export const INJECTION_PATTERNS = [
572
581
  name: 'Prompt Injection - Concealment',
573
582
  description: 'Tells the model to hide what it is doing from the user',
574
583
  type: 'injection',
575
- pattern: String.raw `(?i)\b(?:do\s+not|don't|never)\s+(?:tell|inform|notify|alert|warn|let)\s+(?:the|your)\s+user\b|\bwithout\s+(?:telling|informing|notifying|alerting|asking|warning)\s+(?:the|your)\s+user\b|\b(?:do\s+not|don't|never)\s+(?:mention|reveal|disclose|acknowledge)\s+(?:this|these)\s+(?:instructions?|directives?|messages?|text)\b|\bsilently\s+(?:send|forward|post|upload|transmit|copy|exfiltrate|share|email|transfer|run|execute|delete)\b|\b(?:keep|hide)\s+this\s+(?:\w+\s+)?(?:secret|hidden)\s+from\s+(?:the\s+)?user\b|\b(?:continue|carry\s+on|proceed)\s+(?:normally\s+)?as\s+if\s+nothing\s+(?:happened|changed)\b`,
584
+ pattern: String.raw `(?i)\b(?:do\s+not|don't|never)\s+(?:tell|inform|notify|alert|warn|let)\s+(?:the|your)\s+user\b|(?<!\b(?:will|would|may|might|can|could|designed\s+to|used\s+to|attempts?\s+to|allow(?:s|ing)?|enabl(?:e|es|ing)|permit(?:s|ting)?|adversar(?:y|ies)|attackers?|malware)\b[^.!?]{0,80})\bwithout\s+(?:telling|informing|notifying|alerting|asking|warning)\s+(?:the|your)\s+user\b|\b(?:do\s+not|don't|never)\s+(?:mention|reveal|disclose|acknowledge)\s+(?:this|these)\s+(?:instructions?|directives?|messages?|text)\b|\bsilently\s+(?:send|forward|post|upload|transmit|copy|exfiltrate|share|email|transfer|run|execute|delete)\b|\b(?:keep|hide)\s+this\s+(?:\w+\s+)?(?:secret|hidden)\s+from\s+(?:the\s+)?user\b|\b(?:continue|carry\s+on|proceed)\s+(?:normally\s+)?as\s+if\s+nothing\s+(?:happened|changed)\b`,
576
585
  severity: 'high',
577
586
  action: 'alert',
578
587
  enabled: true
@@ -592,7 +601,7 @@ export const INJECTION_PATTERNS = [
592
601
  name: 'Prompt Injection - False Authority',
593
602
  description: 'Claims system, admin or developer authority to override the model\'s rules or the user',
594
603
  type: 'injection',
595
- pattern: String.raw `(?i)\b(?:system|admin|administrator|developer|root)\s+(?:override|overrides|command|directive)\b|\boverride\s+(?:your\s+|the\s+|all\s+)?(?:safety|security|content|ethical)\b|\b(?:who|that)\s+(?:deployed|created|built|trained|programmed)\s+you\b|\bstop\s+responding\s+to\s+(?:them|the\s+user)\b`,
604
+ pattern: String.raw `(?i)\b(?:system|admin|administrator|developer|root)\s+(?:override|overrides|directive)\b|\boverride\s+(?:your\s+|the\s+|all\s+)?(?:safety|security|content|ethical)\b|\b(?:who|that)\s+(?:deployed|created|built|trained|programmed)\s+you\b|\bstop\s+responding\s+to\s+(?:them|the\s+user)\b`,
596
605
  severity: 'high',
597
606
  action: 'alert',
598
607
  enabled: true
@@ -602,7 +611,7 @@ export const INJECTION_PATTERNS = [
602
611
  name: 'Prompt Injection - Jailbreak Attempt',
603
612
  description: 'Persona and framing jailbreaks: unrestricted personas, no-ethics claims, developer mode, forced prefixes',
604
613
  type: 'injection',
605
- pattern: String.raw `(?i)\bDAN\s+mode\b|\bdo\s+anything\s+now\b|\bpretend\s+you\s+(?:are|have)\s+no\s+(?:restrictions|limits)\b|\bact\s+as\s+(?:if|an?)\s+(?:unrestricted|unfiltered)\b|\b(?:unfiltered|uncensored|amoral|unrestricted|unconstrained|unaligned|jailbroken)\s+(?:and\s+\w+\s+)?(?:ai|assistant|chatbot|bot|model|mode|version|character|persona|llm)\b|\b(?:no|without|doesn't\s+have\s+any|does\s+not\s+have\s+any|free\s+(?:of|from)|not\s+bound\s+by)\s+(?:any\s+)?(?:ethical|moral|safety|content)(?:\s+or\s+(?:ethical|moral|safety))?\s+(?:guidelines|restrictions|filters|limits|polic(?:y|ies)|principles|constraints|boundaries)\b|\bbypass(?:es|ing)?\s+(?:all\s+|any\s+)?(?:content|safety|ethical)\s+(?:polic(?:y|ies)|filters|guidelines|restrictions)\b|\bnever\s+refuses?\b|\bdeveloper\s+mode\s+(?:enabled|output|response)\b|\bwith\s+developer\s+mode\b|\bstarting\s+with\s+exactly\b|\b(?:start|begin)\s+(?:your\s+)?(?:response|reply|answer)\s+with\s+exactly\b|\b(?:act|pretend|play|roleplay)\s+as\s+my\s+(?:deceased|late|dead)\b`,
614
+ pattern: String.raw `(?i)\bDAN\s+mode\b|\bdo\s+anything\s+now\b|\bpretend\s+you\s+(?:are|have)\s+no\s+(?:restrictions|limits)\b|\bact\s+as\s+(?:if|an?)\s+(?:unrestricted|unfiltered)\b|\b(?:unfiltered|uncensored|amoral|unrestricted|unconstrained|unaligned|jailbroken)\s+(?:and\s+\w+\s+)?(?:ai|assistant|chatbot|bot|model|mode|version|character|persona|llm)\b|\b(?:no|without|doesn't\s+have\s+any|does\s+not\s+have\s+any|free\s+(?:of|from)|not\s+bound\s+by)\s+(?:any\s+)?(?:ethical|moral|safety|content)(?:\s+or\s+(?:ethical|moral|safety))?\s+(?:guidelines|restrictions|filters|limits|polic(?:y|ies)|principles|constraints|boundaries)\b|(?<!\b(?:will|would|may|might|can|could|designed\s+to|used\s+to|attempts?\s+to|allow(?:s|ing)?|enabl(?:e|es|ing)|permit(?:s|ting)?|adversar(?:y|ies)|attackers?|malware)\b[^.!?]{0,80})\bbypass\s+(?:all\s+|any\s+|your\s+|the\s+)?(?:content|safety|ethical)\s+(?:polic(?:y|ies)|filters?|guidelines|restrictions)\b|\bnever\s+refuses?\b|\bdeveloper\s+mode\s+(?:enabled|output|response)\b|\bwith\s+developer\s+mode\b|\bstarting\s+with\s+exactly\b|\b(?:start|begin)\s+(?:your\s+)?(?:response|reply|answer)\s+with\s+exactly\b|\b(?:act|pretend|play|roleplay)\s+as\s+my\s+(?:deceased|late|dead)\b`,
606
615
  severity: 'high',
607
616
  action: 'alert',
608
617
  enabled: true
@@ -612,7 +621,7 @@ export const INJECTION_PATTERNS = [
612
621
  name: 'Prompt Injection - Decode and Execute',
613
622
  description: 'Asks the model to decode or translate hidden text and then act on it',
614
623
  type: 'injection',
615
- pattern: String.raw `(?i)\b(?:decode|translate|decrypt|deobfuscate|unscramble)\b[^.\n]{0,80}\b(?:and|then)\s+(?:execute|follow|run|obey|perform|carry\s+out|act\s+on)\b`,
624
+ pattern: String.raw `(?i)(?<!\b(?:will|would|may|might|can|could|designed\s+to|used\s+to|attempts?\s+to|allow(?:s|ing)?|enabl(?:e|es|ing)|permit(?:s|ting)?|adversar(?:y|ies)|attackers?|malware)\b[^.!?]{0,80})\b(?:decode|translate|decrypt|deobfuscate|unscramble)\b[^.\n]{0,80}\b(?:and|then)\s+(?:execute|follow|run|obey|perform|carry\s+out|act\s+on)\b`,
616
625
  severity: 'high',
617
626
  action: 'alert',
618
627
  enabled: true
@@ -642,7 +651,7 @@ export const INJECTION_PATTERNS = [
642
651
  name: 'Prompt Injection - User Data Harvest',
643
652
  description: 'Asks the model to collect or output the user\'s private data',
644
653
  type: 'injection',
645
- pattern: String.raw `(?i)\b(?:respond|reply|include|output|print|list|share|extract|collect|harvest|gather|reveal|send)\s+(?:with\s+)?(?:\S+\s+){0,3}?(?:the\s+)?(?:user's|users'|their)\s+(?:\w+\s+){0,2}?(?:conversation\s+history|chat\s+history|messages|e-?mail\s+addresses|location|credentials|passwords?|session|cookies|account\s+details|contacts)\b`,
654
+ pattern: String.raw `(?i)(?<!\b(?:will|would|may|might|can|could|designed\s+to|used\s+to|attempts?\s+to|allow(?:s|ing)?|enabl(?:e|es|ing)|permit(?:s|ting)?|adversar(?:y|ies)|attackers?|malware)\b[^.!?]{0,80})\b(?:respond|reply|include|output|print|list|share|extract|collect|harvest|gather|reveal|send)\s+(?:with\s+)?(?:\S+\s+){0,3}?(?:the\s+)?(?:user's|users'|their)\s+(?:\w+\s+){0,2}?(?:conversation\s+history|chat\s+history|messages|e-?mail\s+addresses|location|credentials|passwords?|session|cookies|account\s+details|contacts)\b`,
646
655
  severity: 'high',
647
656
  action: 'alert',
648
657
  enabled: true
@@ -666,6 +675,26 @@ export const INJECTION_PATTERNS = [
666
675
  severity: 'low',
667
676
  action: 'log',
668
677
  enabled: true
678
+ },
679
+ {
680
+ id: 'harmful_artifact_request',
681
+ name: 'Request for a Working Malicious Artifact',
682
+ description: 'Asks the agent to produce working malware or a phishing kit: an imperative request to write or build a keylogger, ransomware, phishing email, credential harvester or similar, with cues that it should work for real (complete, convincing, undetectable, in full technical detail). Descriptions of such tools, and defensive guidance, are not requests.',
683
+ type: 'injection',
684
+ pattern: String.raw `(?i)(?:^|[.!?:]\s+|\b(?:please|can\s+you|could\s+you|would\s+you|i\s+need\s+you\s+to|i\s+want\s+you\s+to|help\s+me|how\s+to|your\s+task\s+is\s+to|go\s+ahead\s+and)\s+)(?:write|generate|create|build|code|develop|produce|craft|compose|implement|make)\b(?:(?!\b(?:detect\w*|detection|rules?|signatures?|yara|sigma|scanners?|filters?|classifiers?|defen[cs]\w*|protect\w*|against|analy[sz]\w*|identif\w*|block\w*|prevent\w*|mitigat\w*)\b)[^.!?]){0,90}?\b(?:key\s?loggers?|ransomware|phishing\s+(?:e-?mails?|messages?|pages?|sites?|kits?|templates?|campaigns?|links?)|credential[\s-](?:harvest(?:er|ing)|stealers?|collection)|password\s+stealers?|info[\s-]?stealers?|stalkerware|spyware|rootkits?|botnets?|(?:remote\s+access\s+)?trojans?)\b(?=[\s\S]{0,300}?\b(?:complete|working|fully\s+functional|functional|convincing|realistic|deployable|undetectable|evad(?:e|es|ing)\s+(?:antivirus|av|edr|detection)|technical\s+accuracy|in\s+(?:full\s+)?detail|impersonat(?:e|es|ing)|captures?|steals?|exfiltrat(?:e|es))\b)`,
685
+ severity: 'medium',
686
+ action: 'alert',
687
+ enabled: true
688
+ },
689
+ {
690
+ id: 'prompt_injection_policy_probe',
691
+ name: 'Prompt Injection - Guardrail Mapping',
692
+ description: 'Maps the agent\'s guardrails: asks which tools, URLs or commands it may use and, in the same request, which are denied or need approval; or asks for its hidden reasoning together with the rules or constraints it follows',
693
+ type: 'injection',
694
+ pattern: String.raw `(?i)\b(?:tools?|capabilit(?:y|ies)|urls?|url\s+patterns?|domains?|commands?|actions?|endpoints?|apis?)\b[^.?!\n]{0,40}\b(?:are\s+you|you\s+are|you're)\s+(?:\w+\s+)?(?:allowed|permitted)\s+to\b(?=[\s\S]{0,400}?\b(?:denied|forbidden|blocked|prohibited|not\s+allowed|disallowed|(?:require|need)s?\s+(?:human\s+|user\s+|explicit\s+)?approval)\b)|\b(?:constraints?|restrictions?|guidelines?|rules?|instructions?|guardrails?|polic(?:y|ies))\b[\s\S]{0,400}?\b(?:output|reveal|print|show|share|dump|expose|include)\s+(?:me\s+)?(?:your\s+)?(?:(?:full|raw|hidden|internal|private|complete)\s+)*(?:reasoning\s+trace|chain[\s-]of[\s-]thought|hidden\s+reasoning|internal\s+reasoning)\b|\b(?:output|reveal|print|show|share|dump|expose|include)\s+(?:me\s+)?(?:your\s+)?(?:(?:full|raw|hidden|internal|private|complete)\s+)*(?:reasoning\s+trace|chain[\s-]of[\s-]thought|hidden\s+reasoning|internal\s+reasoning)\b[\s\S]{0,400}?\b(?:constraints?|restrictions?|guidelines?|rules?|instructions?|guardrails?|polic(?:y|ies))\b`,
695
+ severity: 'medium',
696
+ action: 'alert',
697
+ enabled: true
669
698
  }
670
699
  ];
671
700
  // ============================================================================
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@weave_protocol/mund",
3
- "version": "0.5.3",
3
+ "version": "0.6.1",
4
4
  "description": "The Guardian Protocol - MCP-based security monitoring for agentic AI systems",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
@@ -0,0 +1,156 @@
1
+ /**
2
+ * Mund - local prompt-injection classifier (Mund 0.6.0)
3
+ *
4
+ * A small linear model over hashed word and character n-grams. It runs
5
+ * offline in microseconds, needs no API key or download, and catches
6
+ * paraphrased injections that no fixed pattern names. It backs up the
7
+ * rules; it never replaces them.
8
+ *
9
+ * The same featurizer is used to train the shipped weights and to score at
10
+ * runtime, so the two can't drift apart.
11
+ */
12
+
13
+ export const FEATURE_BITS = 18;
14
+ const DIM = 1 << FEATURE_BITS;
15
+
16
+ export interface InjectionModel {
17
+ version: string;
18
+ bits: number;
19
+ bias: number;
20
+ /** Decision threshold on the probability, chosen on validation data */
21
+ threshold: number;
22
+ /** Sparse weights: feature index -> weight */
23
+ weights: Map<number, number>;
24
+ }
25
+
26
+ /** FNV-1a 32-bit */
27
+ function hash(s: string): number {
28
+ let h = 0x811c9dc5;
29
+ for (let i = 0; i < s.length; i++) {
30
+ h ^= s.charCodeAt(i);
31
+ h = Math.imul(h, 0x01000193);
32
+ }
33
+ return h >>> 0;
34
+ }
35
+
36
+ export function normalizeForModel(text: string): string {
37
+ return text
38
+ .normalize('NFKC')
39
+ .replace(/[​-‍⁠­]/g, '')
40
+ .toLowerCase()
41
+ .replace(/\s+/g, ' ')
42
+ .trim();
43
+ }
44
+
45
+ /**
46
+ * Features of a text: word unigrams and bigrams, and character 3-5-grams
47
+ * within words. Binary, L2-normalized, hashed into 2^18 buckets.
48
+ */
49
+ export function featurize(text: string): Map<number, number> {
50
+ const t = normalizeForModel(text);
51
+ const words = t.match(/[\p{L}\p{N}']+/gu) ?? [];
52
+ const keys = new Set<number>();
53
+ const add = (k: string) => keys.add(hash(k) & (DIM - 1));
54
+ for (let i = 0; i < words.length; i++) {
55
+ const w = words[i];
56
+ add(`w:${w}`);
57
+ if (i + 1 < words.length) add(`b:${w} ${words[i + 1]}`);
58
+ const padded = ` ${w} `;
59
+ if (padded.length <= 40) {
60
+ for (let n = 3; n <= 5; n++) for (let j = 0; j + n <= padded.length; j++) add(`c:${padded.slice(j, j + n)}`);
61
+ }
62
+ }
63
+ const v = new Map<number, number>();
64
+ if (!keys.size) return v;
65
+ const x = 1 / Math.sqrt(keys.size);
66
+ for (const k of keys) v.set(k, x);
67
+ return v;
68
+ }
69
+
70
+ const sigmoid = (z: number) => 1 / (1 + Math.exp(-z));
71
+
72
+ /** Probability that one window of text is a prompt injection. */
73
+ export function scoreWindow(text: string, model: InjectionModel): number {
74
+ let z = model.bias;
75
+ for (const [k, x] of featurize(text)) z += (model.weights.get(k) ?? 0) * x;
76
+ return sigmoid(z);
77
+ }
78
+
79
+ /**
80
+ * Long content (a web page, a tool result) is scored in windows of about
81
+ * 800 characters, cut at paragraph or sentence breaks; the highest window
82
+ * counts, so an injection buried in a long document isn't averaged away.
83
+ */
84
+ export function windows(text: string, size = 800): string[] {
85
+ if (text.length <= size * 1.5) return [text];
86
+ const parts = text.split(/(?<=\n\s*\n)|(?<=[.!?])\s+/);
87
+ const out: string[] = [];
88
+ let cur = '';
89
+ for (const p of parts) {
90
+ if (cur && cur.length + p.length > size) { out.push(cur); cur = ''; }
91
+ cur += (cur ? ' ' : '') + p;
92
+ while (cur.length > size * 2) { out.push(cur.slice(0, size)); cur = cur.slice(size); }
93
+ }
94
+ if (cur.trim()) out.push(cur);
95
+ return out;
96
+ }
97
+
98
+ /**
99
+ * Sentences (and pairs of neighbours) inside a window, so an injection
100
+ * appended to an innocent question isn't diluted by it.
101
+ */
102
+ export function sentences(text: string): string[] {
103
+ const parts = text.split(/(?<=[.!?])\s+|\n+|(?<=\?)(?=\S)/).map((s) => s.trim()).filter((s) => s.length >= 12);
104
+ if (parts.length < 2) return [];
105
+ const out = [...parts];
106
+ for (let i = 0; i + 1 < parts.length; i++) out.push(`${parts[i]} ${parts[i + 1]}`);
107
+ return out;
108
+ }
109
+
110
+ export function scoreInjection(text: string, model: InjectionModel, opts: { sentences?: boolean } = {}): { score: number; window: string } {
111
+ let best = { score: 0, window: '' };
112
+ for (const w of windows(text)) {
113
+ for (const piece of [w, ...(opts.sentences === false ? [] : sentences(w))]) {
114
+ const score = scoreWindow(piece, model);
115
+ if (score > best.score) best = { score, window: piece };
116
+ }
117
+ }
118
+ return best;
119
+ }
120
+
121
+ /**
122
+ * Decode the shipped model: base64 of [u32 count][u32 index, i8 weight]...
123
+ * with a float scale, kept compact so the package stays small.
124
+ */
125
+ export function decodeModel(encoded: { version: string; bits: number; bias: number; threshold: number; scale: number; data: string }): InjectionModel {
126
+ const buf = Buffer.from(encoded.data, 'base64');
127
+ const weights = new Map<number, number>();
128
+ let prev = 0;
129
+ let i = 0;
130
+ while (i < buf.length) {
131
+ // delta-encoded index (varint), then an int8 weight
132
+ let delta = 0, shift = 0, b: number;
133
+ do { b = buf[i++]; delta |= (b & 0x7f) << shift; shift += 7; } while (b & 0x80);
134
+ prev += delta;
135
+ const q = buf.readInt8(i++);
136
+ weights.set(prev, q * encoded.scale);
137
+ }
138
+ return { version: encoded.version, bits: encoded.bits, bias: encoded.bias, threshold: encoded.threshold, weights };
139
+ }
140
+
141
+ export function encodeModel(model: { version: string; bias: number; threshold: number; weights: Map<number, number> }): { version: string; bits: number; bias: number; threshold: number; scale: number; data: string } {
142
+ const entries = [...model.weights.entries()].filter(([, w]) => w !== 0).sort((a, b) => a[0] - b[0]);
143
+ const max = entries.reduce((m, [, w]) => Math.max(m, Math.abs(w)), 1e-9);
144
+ const scale = max / 127;
145
+ const bytes: number[] = [];
146
+ let prev = 0;
147
+ for (const [k, w] of entries) {
148
+ const q = Math.round(w / scale);
149
+ if (q === 0) continue;
150
+ let delta = k - prev;
151
+ prev = k;
152
+ do { let b = delta & 0x7f; delta >>>= 7; if (delta) b |= 0x80; bytes.push(b); } while (delta);
153
+ bytes.push(q & 0xff);
154
+ }
155
+ return { version: model.version, bits: FEATURE_BITS, bias: model.bias, threshold: model.threshold, scale, data: Buffer.from(bytes).toString('base64') };
156
+ }
@@ -3,6 +3,7 @@
3
3
  * Analyzers Index - Exports all analyzer modules
4
4
  */
5
5
 
6
+ import { compileRulePattern } from './regex.js';
6
7
  export { SecretScanner } from './secret-scanner.js';
7
8
  export { PIIDetector } from './pii-detector.js';
8
9
  export { CodeAnalyzer } from './code-analyzer.js';
@@ -37,6 +38,34 @@ export function getAnalyzers(): IAnalyzer[] {
37
38
  /**
38
39
  * Create analyzer engine that runs all analyzers
39
40
  */
41
+ /** Every secret and PII value the content's secret and PII rules match. */
42
+ export function sensitiveValues(content: string, rules: import('../types.js').DetectionRule[]): string[] {
43
+ const out = new Set<string>();
44
+ for (const r of rules) {
45
+ if ((r.type !== 'secret' && r.type !== 'pii') || !r.enabled || !r.pattern) continue;
46
+ try {
47
+ const re = compileRulePattern(r.pattern, 'g');
48
+ for (const m of content.matchAll(re)) if (m[0].length >= 4) out.add(m[0]);
49
+ } catch { /* invalid custom rule */ }
50
+ }
51
+ return [...out].sort((a, b) => b.length - a.length);
52
+ }
53
+
54
+ /** Replace sensitive values in an excerpt, including one cut off by truncation. */
55
+ export function redactValues(excerpt: string, values: string[]): string {
56
+ let out = excerpt;
57
+ for (const v of values) out = out.split(v).join('[REDACTED]');
58
+ if (out.endsWith('...')) {
59
+ const body = out.slice(0, -3);
60
+ for (const v of values) {
61
+ for (let k = Math.min(v.length - 1, body.length); k >= 4; k--) {
62
+ if (body.endsWith(v.slice(0, k))) return body.slice(0, body.length - k) + '[REDACTED]...';
63
+ }
64
+ }
65
+ }
66
+ return out;
67
+ }
68
+
40
69
  export class AnalyzerEngine {
41
70
  private analyzers: IAnalyzer[];
42
71
 
@@ -56,6 +85,16 @@ export class AnalyzerEngine {
56
85
  }
57
86
  }
58
87
 
88
+ // Findings are logged, stored and sent to webhooks. Secret and PII
89
+ // findings mask their own matches; every other finding's excerpt must not
90
+ // carry a secret or personal value from the content either.
91
+ const values = sensitiveValues(content, rules);
92
+ if (values.length) {
93
+ for (const issue of allIssues) {
94
+ if (issue.type !== 'secret' && issue.type !== 'pii' && issue.match) issue.match = redactValues(issue.match, values);
95
+ }
96
+ }
97
+
59
98
  // Sort by severity (critical first)
60
99
  const severityOrder = { critical: 0, high: 1, medium: 2, low: 3, info: 4 };
61
100
  allIssues.sort((a, b) =>
@@ -10,13 +10,27 @@ import {
10
10
  type IssueLocation
11
11
  } from '../types.js';
12
12
  import { compileRulePattern } from './regex.js';
13
+ import { decodeModel, scoreInjection, type InjectionModel } from './classifier.js';
14
+ import { INJECTION_MODEL } from './injection-model.js';
15
+
16
+ let model: InjectionModel | undefined;
17
+ const loadModel = () => (model ??= decodeModel(INJECTION_MODEL));
13
18
 
14
19
  export class InjectionDetector implements IAnalyzer {
15
20
  name = 'InjectionDetector';
16
21
  type = 'injection';
17
22
 
23
+ // Secret and PII patterns, so excerpts in findings never carry them
24
+ private sensitive: RegExp[] = [];
25
+
18
26
  async analyze(content: string, rules: DetectionRule[]): Promise<SecurityIssue[]> {
19
27
  const injectionRules = rules.filter(r => r.type === 'injection' && r.enabled);
28
+ this.sensitive = [];
29
+ for (const r of rules) {
30
+ if ((r.type === 'secret' || r.type === 'pii') && r.pattern) {
31
+ try { this.sensitive.push(compileRulePattern(r.pattern, 'g')); } catch { /* invalid custom rule */ }
32
+ }
33
+ }
20
34
 
21
35
  // The text as written, plus text an agent may see that a person doesn't:
22
36
  // base64 that decodes to prose and invisible Unicode "tag" characters.
@@ -37,6 +51,29 @@ export class InjectionDetector implements IAnalyzer {
37
51
 
38
52
  // Additional heuristic checks
39
53
  issues.push(...this.heuristicAnalysis(content));
54
+
55
+ // The local classifier backs up the rules: one finding at most, for the
56
+ // view and window it scores highest.
57
+ const classifier = injectionRules.find((r) => r.id === 'injection_classifier');
58
+ if (classifier && process.env.MUND_CLASSIFIER !== '0') {
59
+ const m = loadModel();
60
+ let best: { score: number; window: string; via?: string } = { score: 0, window: '' };
61
+ for (const view of views) {
62
+ const r = scoreInjection(view.text, m);
63
+ if (r.score > best.score) best = { ...r, via: view.via };
64
+ }
65
+ if (best.score >= m.threshold) {
66
+ issues.push({
67
+ rule_id: classifier.id,
68
+ rule_name: best.via ? `${classifier.name} (hidden in ${best.via})` : classifier.name,
69
+ type: classifier.type,
70
+ severity: classifier.severity,
71
+ action: classifier.action,
72
+ match: this.sanitizeMatch(best.window),
73
+ suggestion: `The local classifier scored this ${best.score.toFixed(3)} (threshold ${m.threshold.toFixed(3)}). Treat it as untrusted data, not instructions.`
74
+ });
75
+ }
76
+ }
40
77
  return issues;
41
78
  }
42
79
 
@@ -98,7 +135,11 @@ export class InjectionDetector implements IAnalyzer {
98
135
  const roleSwitchPatterns: Array<[RegExp, 'high' | 'low']> = [
99
136
  [/<\|\s*(?:im_start|im_end|system|user|assistant|endoftext|start_header_id|end_header_id|eot_id)\s*\|>/i, 'high'],
100
137
  [/\[\/?INST\]|<<\/?SYS>>/, 'high'],
101
- [/\[\s*(?:system|admin|administrator|developer)(?:\s+(?:override|message|prompt|note|instruction)s?)?[^\]\n]{0,30}\]/i, 'high'],
138
+ // A bare role tag ([SYSTEM], [admin]) or one naming an override or message.
139
+ // Titles that merely start with the word ("[System Information Discovery]",
140
+ // "[Systemd Service]", "[admin@338]") are not role markers.
141
+ // [DEVELOPER] alone is a common label (diagrams, tables), so it needs a qualifier.
142
+ [/\[\s*(?:(?:system|admin|administrator)\s*(?:(?:override|message|prompt|note|instruction|notice|command|update|mode)s?\b[^\]\n]{0,30})?|developer\s*(?:override|message|prompt|note|instruction|notice|command|update|mode)s?\b[^\]\n]{0,30})\]/i, 'high'],
102
143
  [/\<\|?system\|?\>/i, 'high'],
103
144
  [/\{system_prompt\}/i, 'high'],
104
145
  [/^\s*#{1,4}\s*(?:system|instruction)s?\s*:/im, 'high'],
@@ -189,14 +230,19 @@ export class InjectionDetector implements IAnalyzer {
189
230
  /data:text\/html/i,
190
231
  ];
191
232
 
233
+ // Scripts are ordinary in web pages and security writing, so a mention is
234
+ // low severity. A script that reads cookies or storage and sends them off
235
+ // the page is an exfiltration attempt, and high.
236
+ const exfilScript = /\b(?:document\.cookie|localStorage|sessionStorage)\b/i.test(content)
237
+ && /\b(?:fetch\s*\(|XMLHttpRequest|sendBeacon|new\s+Image\b|\.src\s*=|location(?:\.href)?\s*=)/i.test(content);
192
238
  for (const pattern of markdownPatterns) {
193
239
  const match = content.match(pattern);
194
240
  if (match) {
195
241
  issues.push({
196
242
  rule_id: 'heuristic_markup_injection',
197
- rule_name: 'Markup Injection Attempt',
243
+ rule_name: exfilScript ? 'Script That Sends Cookies or Storage Off the Page' : 'Markup Injection Attempt',
198
244
  type: 'injection',
199
- severity: 'medium' as const,
245
+ severity: (exfilScript ? 'high' : pattern.source.includes('system') ? 'medium' : 'low') as 'high' | 'medium' | 'low',
200
246
  action: 'alert' as const,
201
247
  match: this.sanitizeMatch(match[0]),
202
248
  suggestion: 'This content contains potentially dangerous markup or code injection.'
@@ -245,7 +291,11 @@ export class InjectionDetector implements IAnalyzer {
245
291
  * Sanitize match for safe display
246
292
  */
247
293
  private sanitizeMatch(match: string, maxLength = 100): string {
248
- const sanitized = match
294
+ // Findings are logged, stored and sent to webhooks: an excerpt of the
295
+ // scanned text must not carry a secret or personal data along with it
296
+ let redacted = match;
297
+ for (const re of this.sensitive) { re.lastIndex = 0; redacted = redacted.replace(re, '[REDACTED]'); }
298
+ const sanitized = redacted
249
299
  .replace(/</g, '&lt;')
250
300
  .replace(/>/g, '&gt;')
251
301
  .replace(/"/g, '&quot;');