@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/DETECTION_CLAIMS.md +69 -1
- package/README.md +6 -0
- 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/index.d.ts +4 -0
- package/dist/analyzers/index.d.ts.map +1 -1
- package/dist/analyzers/index.js +43 -0
- package/dist/analyzers/index.js.map +1 -1
- package/dist/analyzers/injection-detector.d.ts +1 -0
- package/dist/analyzers/injection-detector.d.ts.map +1 -1
- package/dist/analyzers/injection-detector.js +58 -4
- 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/index.ts +39 -0
- package/src/analyzers/injection-detector.ts +54 -4
- 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/tests/analyzers/redaction.test.ts +36 -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
|
+
}
|
package/src/analyzers/index.ts
CHANGED
|
@@ -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
|
-
[
|
|
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
|
|
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
|
-
|
|
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, '<')
|
|
250
300
|
.replace(/>/g, '>')
|
|
251
301
|
.replace(/"/g, '"');
|