@weave_protocol/mund 0.5.2 → 0.6.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/DETECTION_CLAIMS.md +69 -1
- package/README.md +93 -50
- package/dist/analyzers/classifier.d.ts +72 -0
- package/dist/analyzers/classifier.d.ts.map +1 -0
- package/dist/analyzers/classifier.js +164 -0
- package/dist/analyzers/classifier.js.map +1 -0
- package/dist/analyzers/injection-detector.d.ts.map +1 -1
- package/dist/analyzers/injection-detector.js +39 -3
- package/dist/analyzers/injection-detector.js.map +1 -1
- package/dist/analyzers/injection-model.d.ts +9 -0
- package/dist/analyzers/injection-model.d.ts.map +1 -0
- package/dist/analyzers/injection-model.js +6 -0
- package/dist/analyzers/injection-model.js.map +1 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +35 -6
- package/dist/constants.js.map +1 -1
- package/package.json +1 -1
- package/src/analyzers/classifier.ts +156 -0
- package/src/analyzers/injection-detector.ts +40 -3
- package/src/analyzers/injection-model.ts +5 -0
- package/src/constants.ts +35 -6
- package/tests/analyzers/classifier.test.ts +84 -0
- package/tests/analyzers/directives.test.ts +53 -0
- package/tests/analyzers/injection-and-code.test.ts +16 -0
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
|
|
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
|
|
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|
|
|
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
|
|
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
|
// ============================================================================
|
package/dist/constants.js.map
CHANGED
|
@@ -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
|
@@ -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
|
+
}
|
|
@@ -10,6 +10,11 @@ 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';
|
|
@@ -37,6 +42,29 @@ export class InjectionDetector implements IAnalyzer {
|
|
|
37
42
|
|
|
38
43
|
// Additional heuristic checks
|
|
39
44
|
issues.push(...this.heuristicAnalysis(content));
|
|
45
|
+
|
|
46
|
+
// The local classifier backs up the rules: one finding at most, for the
|
|
47
|
+
// view and window it scores highest.
|
|
48
|
+
const classifier = injectionRules.find((r) => r.id === 'injection_classifier');
|
|
49
|
+
if (classifier && process.env.MUND_CLASSIFIER !== '0') {
|
|
50
|
+
const m = loadModel();
|
|
51
|
+
let best: { score: number; window: string; via?: string } = { score: 0, window: '' };
|
|
52
|
+
for (const view of views) {
|
|
53
|
+
const r = scoreInjection(view.text, m);
|
|
54
|
+
if (r.score > best.score) best = { ...r, via: view.via };
|
|
55
|
+
}
|
|
56
|
+
if (best.score >= m.threshold) {
|
|
57
|
+
issues.push({
|
|
58
|
+
rule_id: classifier.id,
|
|
59
|
+
rule_name: best.via ? `${classifier.name} (hidden in ${best.via})` : classifier.name,
|
|
60
|
+
type: classifier.type,
|
|
61
|
+
severity: classifier.severity,
|
|
62
|
+
action: classifier.action,
|
|
63
|
+
match: this.sanitizeMatch(best.window),
|
|
64
|
+
suggestion: `The local classifier scored this ${best.score.toFixed(3)} (threshold ${m.threshold.toFixed(3)}). Treat it as untrusted data, not instructions.`
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
}
|
|
40
68
|
return issues;
|
|
41
69
|
}
|
|
42
70
|
|
|
@@ -98,7 +126,11 @@ export class InjectionDetector implements IAnalyzer {
|
|
|
98
126
|
const roleSwitchPatterns: Array<[RegExp, 'high' | 'low']> = [
|
|
99
127
|
[/<\|\s*(?:im_start|im_end|system|user|assistant|endoftext|start_header_id|end_header_id|eot_id)\s*\|>/i, 'high'],
|
|
100
128
|
[/\[\/?INST\]|<<\/?SYS>>/, 'high'],
|
|
101
|
-
[
|
|
129
|
+
// A bare role tag ([SYSTEM], [admin]) or one naming an override or message.
|
|
130
|
+
// Titles that merely start with the word ("[System Information Discovery]",
|
|
131
|
+
// "[Systemd Service]", "[admin@338]") are not role markers.
|
|
132
|
+
// [DEVELOPER] alone is a common label (diagrams, tables), so it needs a qualifier.
|
|
133
|
+
[/\[\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
134
|
[/\<\|?system\|?\>/i, 'high'],
|
|
103
135
|
[/\{system_prompt\}/i, 'high'],
|
|
104
136
|
[/^\s*#{1,4}\s*(?:system|instruction)s?\s*:/im, 'high'],
|
|
@@ -189,14 +221,19 @@ export class InjectionDetector implements IAnalyzer {
|
|
|
189
221
|
/data:text\/html/i,
|
|
190
222
|
];
|
|
191
223
|
|
|
224
|
+
// Scripts are ordinary in web pages and security writing, so a mention is
|
|
225
|
+
// low severity. A script that reads cookies or storage and sends them off
|
|
226
|
+
// the page is an exfiltration attempt, and high.
|
|
227
|
+
const exfilScript = /\b(?:document\.cookie|localStorage|sessionStorage)\b/i.test(content)
|
|
228
|
+
&& /\b(?:fetch\s*\(|XMLHttpRequest|sendBeacon|new\s+Image\b|\.src\s*=|location(?:\.href)?\s*=)/i.test(content);
|
|
192
229
|
for (const pattern of markdownPatterns) {
|
|
193
230
|
const match = content.match(pattern);
|
|
194
231
|
if (match) {
|
|
195
232
|
issues.push({
|
|
196
233
|
rule_id: 'heuristic_markup_injection',
|
|
197
|
-
rule_name: 'Markup Injection Attempt',
|
|
234
|
+
rule_name: exfilScript ? 'Script That Sends Cookies or Storage Off the Page' : 'Markup Injection Attempt',
|
|
198
235
|
type: 'injection',
|
|
199
|
-
severity: 'medium' as
|
|
236
|
+
severity: (exfilScript ? 'high' : pattern.source.includes('system') ? 'medium' : 'low') as 'high' | 'medium' | 'low',
|
|
200
237
|
action: 'alert' as const,
|
|
201
238
|
match: this.sanitizeMatch(match[0]),
|
|
202
239
|
suggestion: 'This content contains potentially dangerous markup or code injection.'
|