visus-mcp 0.2.0 → 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/.claude/settings.local.json +22 -0
- package/LINKEDIN-STRATEGY.md +367 -0
- package/README.md +491 -16
- package/ROADMAP.md +214 -34
- package/SECURITY-AUDIT-v1.md +277 -0
- package/STATUS.md +801 -42
- package/TROUBLESHOOT-AUTH-20260322-2019.md +291 -0
- package/TROUBLESHOOT-JEST-20260323-1357.md +139 -0
- package/TROUBLESHOOT-LAMBDA-20260322-1945.md +183 -0
- package/VISUS-CLAUDE-CODE-PROMPT.md +1 -1
- package/VISUS-PROJECT-PLAN.md +7 -0
- package/dist/browser/playwright-renderer.d.ts.map +1 -1
- package/dist/browser/playwright-renderer.js +7 -0
- package/dist/browser/playwright-renderer.js.map +1 -1
- package/dist/browser/reader.d.ts +31 -0
- package/dist/browser/reader.d.ts.map +1 -0
- package/dist/browser/reader.js +98 -0
- package/dist/browser/reader.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +37 -5
- package/dist/index.js.map +1 -1
- package/dist/lambda-handler.d.ts +0 -6
- package/dist/lambda-handler.d.ts.map +1 -1
- package/dist/lambda-handler.js +97 -25
- package/dist/lambda-handler.js.map +1 -1
- package/dist/sanitizer/framework-mapper.d.ts +22 -0
- package/dist/sanitizer/framework-mapper.d.ts.map +1 -0
- package/dist/sanitizer/framework-mapper.js +296 -0
- package/dist/sanitizer/framework-mapper.js.map +1 -0
- package/dist/sanitizer/index.d.ts +10 -2
- package/dist/sanitizer/index.d.ts.map +1 -1
- package/dist/sanitizer/index.js +22 -6
- package/dist/sanitizer/index.js.map +1 -1
- package/dist/sanitizer/patterns.js +1 -1
- package/dist/sanitizer/patterns.js.map +1 -1
- package/dist/sanitizer/pii-allowlist.d.ts +49 -0
- package/dist/sanitizer/pii-allowlist.d.ts.map +1 -0
- package/dist/sanitizer/pii-allowlist.js +231 -0
- package/dist/sanitizer/pii-allowlist.js.map +1 -0
- package/dist/sanitizer/pii-redactor.d.ts +13 -1
- package/dist/sanitizer/pii-redactor.d.ts.map +1 -1
- package/dist/sanitizer/pii-redactor.js +26 -2
- package/dist/sanitizer/pii-redactor.js.map +1 -1
- package/dist/sanitizer/severity-classifier.d.ts +33 -0
- package/dist/sanitizer/severity-classifier.d.ts.map +1 -0
- package/dist/sanitizer/severity-classifier.js +113 -0
- package/dist/sanitizer/severity-classifier.js.map +1 -0
- package/dist/sanitizer/threat-reporter.d.ts +65 -0
- package/dist/sanitizer/threat-reporter.d.ts.map +1 -0
- package/dist/sanitizer/threat-reporter.js +160 -0
- package/dist/sanitizer/threat-reporter.js.map +1 -0
- package/dist/tools/fetch-structured.d.ts +5 -0
- package/dist/tools/fetch-structured.d.ts.map +1 -1
- package/dist/tools/fetch-structured.js +59 -8
- package/dist/tools/fetch-structured.js.map +1 -1
- package/dist/tools/fetch.d.ts +5 -0
- package/dist/tools/fetch.d.ts.map +1 -1
- package/dist/tools/fetch.js +43 -9
- package/dist/tools/fetch.js.map +1 -1
- package/dist/tools/read.d.ts +51 -0
- package/dist/tools/read.d.ts.map +1 -0
- package/dist/tools/read.js +127 -0
- package/dist/tools/read.js.map +1 -0
- package/dist/tools/search.d.ts +45 -0
- package/dist/tools/search.d.ts.map +1 -0
- package/dist/tools/search.js +220 -0
- package/dist/tools/search.js.map +1 -0
- package/dist/types.d.ts +74 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/utils/format-converter.d.ts +39 -0
- package/dist/utils/format-converter.d.ts.map +1 -0
- package/dist/utils/format-converter.js +191 -0
- package/dist/utils/format-converter.js.map +1 -0
- package/dist/utils/truncate.d.ts +26 -0
- package/dist/utils/truncate.d.ts.map +1 -0
- package/dist/utils/truncate.js +54 -0
- package/dist/utils/truncate.js.map +1 -0
- package/infrastructure/stack.ts +55 -6
- package/jest.config.js +3 -0
- package/package.json +9 -2
- package/src/browser/playwright-renderer.ts +8 -0
- package/src/browser/reader.ts +129 -0
- package/src/index.ts +49 -5
- package/src/lambda-handler.ts +131 -26
- package/src/sanitizer/framework-mapper.ts +347 -0
- package/src/sanitizer/index.ts +28 -6
- package/src/sanitizer/patterns.ts +1 -1
- package/src/sanitizer/pii-allowlist.ts +273 -0
- package/src/sanitizer/pii-redactor.ts +43 -2
- package/src/sanitizer/severity-classifier.ts +132 -0
- package/src/sanitizer/threat-reporter.ts +261 -0
- package/src/tools/fetch-structured.ts +63 -8
- package/src/tools/fetch.ts +45 -9
- package/src/tools/read.ts +143 -0
- package/src/tools/search.ts +263 -0
- package/src/types.ts +71 -0
- package/src/utils/format-converter.ts +236 -0
- package/src/utils/truncate.ts +64 -0
- package/tests/auth-smoke.test.ts +480 -0
- package/tests/fetch-tool.test.ts +595 -2
- package/tests/pii-allowlist.test.ts +282 -0
- package/tests/reader.test.ts +353 -0
- package/tests/sanitizer.test.ts +52 -0
- package/tests/search.test.ts +456 -0
- package/tests/threat-reporter.test.ts +266 -0
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compliance Framework Mapper
|
|
3
|
+
*
|
|
4
|
+
* Maps injection pattern categories to compliance framework identifiers:
|
|
5
|
+
* - OWASP LLM Top 10 (2025)
|
|
6
|
+
* - NIST AI 600-1 (Generative AI Profile)
|
|
7
|
+
* - MITRE ATLAS (Adversarial Threat Landscape for AI Systems)
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Pattern category to framework mapping
|
|
11
|
+
*/
|
|
12
|
+
const FRAMEWORK_MAP = {
|
|
13
|
+
// Direct instruction injection
|
|
14
|
+
direct_instruction_injection: {
|
|
15
|
+
owasp_llm: 'LLM01:2025 - Prompt Injection',
|
|
16
|
+
nist_ai_600_1: 'MS-2.5 - Prompt Injection',
|
|
17
|
+
mitre_atlas: 'AML.T0051.000 - LLM Prompt Injection'
|
|
18
|
+
},
|
|
19
|
+
// Role hijacking
|
|
20
|
+
role_hijacking: {
|
|
21
|
+
owasp_llm: 'LLM01:2025 - Prompt Injection',
|
|
22
|
+
nist_ai_600_1: 'MS-2.5 - Prompt Injection',
|
|
23
|
+
mitre_atlas: 'AML.T0051.000 - LLM Prompt Injection'
|
|
24
|
+
},
|
|
25
|
+
// System prompt extraction
|
|
26
|
+
system_prompt_extraction: {
|
|
27
|
+
owasp_llm: 'LLM02:2025 - Sensitive Information Disclosure',
|
|
28
|
+
nist_ai_600_1: 'MS-2.6 - Data Disclosure',
|
|
29
|
+
mitre_atlas: 'AML.T0048 - External Harms'
|
|
30
|
+
},
|
|
31
|
+
// Privilege escalation
|
|
32
|
+
privilege_escalation: {
|
|
33
|
+
owasp_llm: 'LLM08:2025 - Excessive Agency',
|
|
34
|
+
nist_ai_600_1: 'GV-1.1 - Policies and Procedures',
|
|
35
|
+
mitre_atlas: 'AML.T0051.000 - LLM Prompt Injection'
|
|
36
|
+
},
|
|
37
|
+
// Context poisoning
|
|
38
|
+
context_poisoning: {
|
|
39
|
+
owasp_llm: 'LLM01:2025 - Prompt Injection',
|
|
40
|
+
nist_ai_600_1: 'MS-2.5 - Prompt Injection',
|
|
41
|
+
mitre_atlas: 'AML.T0051.001 - LLM Prompt Injection: Indirect'
|
|
42
|
+
},
|
|
43
|
+
// Data exfiltration
|
|
44
|
+
data_exfiltration: {
|
|
45
|
+
owasp_llm: 'LLM02:2025 - Sensitive Information Disclosure',
|
|
46
|
+
nist_ai_600_1: 'MS-2.6 - Data Disclosure',
|
|
47
|
+
mitre_atlas: 'AML.T0048 - External Harms'
|
|
48
|
+
},
|
|
49
|
+
// Encoding obfuscation
|
|
50
|
+
base64_obfuscation: {
|
|
51
|
+
owasp_llm: 'LLM01:2025 - Prompt Injection',
|
|
52
|
+
nist_ai_600_1: 'MS-2.5 - Prompt Injection',
|
|
53
|
+
mitre_atlas: 'AML.T0051.001 - LLM Prompt Injection: Indirect'
|
|
54
|
+
},
|
|
55
|
+
// Unicode lookalikes
|
|
56
|
+
unicode_lookalikes: {
|
|
57
|
+
owasp_llm: 'LLM01:2025 - Prompt Injection',
|
|
58
|
+
nist_ai_600_1: 'MS-2.5 - Prompt Injection',
|
|
59
|
+
mitre_atlas: 'AML.T0051.001 - LLM Prompt Injection: Indirect'
|
|
60
|
+
},
|
|
61
|
+
// Zero-width characters
|
|
62
|
+
zero_width_characters: {
|
|
63
|
+
owasp_llm: 'LLM01:2025 - Prompt Injection',
|
|
64
|
+
nist_ai_600_1: 'MS-2.5 - Prompt Injection',
|
|
65
|
+
mitre_atlas: 'AML.T0051.001 - LLM Prompt Injection: Indirect'
|
|
66
|
+
},
|
|
67
|
+
// HTML script injection
|
|
68
|
+
html_script_injection: {
|
|
69
|
+
owasp_llm: 'LLM01:2025 - Prompt Injection',
|
|
70
|
+
nist_ai_600_1: 'MS-2.5 - Prompt Injection',
|
|
71
|
+
mitre_atlas: 'AML.T0051.001 - LLM Prompt Injection: Indirect'
|
|
72
|
+
},
|
|
73
|
+
// Data URI injection
|
|
74
|
+
data_uri_injection: {
|
|
75
|
+
owasp_llm: 'LLM01:2025 - Prompt Injection',
|
|
76
|
+
nist_ai_600_1: 'MS-2.5 - Prompt Injection',
|
|
77
|
+
mitre_atlas: 'AML.T0051.001 - LLM Prompt Injection: Indirect'
|
|
78
|
+
},
|
|
79
|
+
// Markdown link injection
|
|
80
|
+
markdown_link_injection: {
|
|
81
|
+
owasp_llm: 'LLM01:2025 - Prompt Injection',
|
|
82
|
+
nist_ai_600_1: 'MS-2.5 - Prompt Injection',
|
|
83
|
+
mitre_atlas: 'AML.T0051.001 - LLM Prompt Injection: Indirect'
|
|
84
|
+
},
|
|
85
|
+
// URL fragment attacks
|
|
86
|
+
url_fragment_hashjack: {
|
|
87
|
+
owasp_llm: 'LLM01:2025 - Prompt Injection',
|
|
88
|
+
nist_ai_600_1: 'MS-2.5 - Prompt Injection',
|
|
89
|
+
mitre_atlas: 'AML.T0051.001 - LLM Prompt Injection: Indirect'
|
|
90
|
+
},
|
|
91
|
+
// Social engineering
|
|
92
|
+
social_engineering_urgency: {
|
|
93
|
+
owasp_llm: 'LLM01:2025 - Prompt Injection',
|
|
94
|
+
nist_ai_600_1: 'MS-2.5 - Prompt Injection',
|
|
95
|
+
mitre_atlas: 'AML.T0051.000 - LLM Prompt Injection'
|
|
96
|
+
},
|
|
97
|
+
// Instruction delimiter injection
|
|
98
|
+
instruction_delimiter_injection: {
|
|
99
|
+
owasp_llm: 'LLM01:2025 - Prompt Injection',
|
|
100
|
+
nist_ai_600_1: 'MS-2.5 - Prompt Injection',
|
|
101
|
+
mitre_atlas: 'AML.T0051.000 - LLM Prompt Injection'
|
|
102
|
+
},
|
|
103
|
+
// Multi-language obfuscation
|
|
104
|
+
multi_language_obfuscation: {
|
|
105
|
+
owasp_llm: 'LLM01:2025 - Prompt Injection',
|
|
106
|
+
nist_ai_600_1: 'MS-2.5 - Prompt Injection',
|
|
107
|
+
mitre_atlas: 'AML.T0051.001 - LLM Prompt Injection: Indirect'
|
|
108
|
+
},
|
|
109
|
+
// Reverse text obfuscation
|
|
110
|
+
reverse_text_obfuscation: {
|
|
111
|
+
owasp_llm: 'LLM01:2025 - Prompt Injection',
|
|
112
|
+
nist_ai_600_1: 'MS-2.5 - Prompt Injection',
|
|
113
|
+
mitre_atlas: 'AML.T0051.001 - LLM Prompt Injection: Indirect'
|
|
114
|
+
},
|
|
115
|
+
// Leetspeak obfuscation
|
|
116
|
+
leetspeak_obfuscation: {
|
|
117
|
+
owasp_llm: 'LLM01:2025 - Prompt Injection',
|
|
118
|
+
nist_ai_600_1: 'MS-2.5 - Prompt Injection',
|
|
119
|
+
mitre_atlas: 'AML.T0051.001 - LLM Prompt Injection: Indirect'
|
|
120
|
+
},
|
|
121
|
+
// Jailbreak keywords
|
|
122
|
+
jailbreak_keywords: {
|
|
123
|
+
owasp_llm: 'LLM01:2025 - Prompt Injection',
|
|
124
|
+
nist_ai_600_1: 'MS-2.5 - Prompt Injection',
|
|
125
|
+
mitre_atlas: 'AML.T0051.000 - LLM Prompt Injection'
|
|
126
|
+
},
|
|
127
|
+
// Token smuggling
|
|
128
|
+
token_smuggling: {
|
|
129
|
+
owasp_llm: 'LLM01:2025 - Prompt Injection',
|
|
130
|
+
nist_ai_600_1: 'MS-2.5 - Prompt Injection',
|
|
131
|
+
mitre_atlas: 'AML.T0051.000 - LLM Prompt Injection'
|
|
132
|
+
},
|
|
133
|
+
// System message injection
|
|
134
|
+
system_message_injection: {
|
|
135
|
+
owasp_llm: 'LLM01:2025 - Prompt Injection',
|
|
136
|
+
nist_ai_600_1: 'MS-2.5 - Prompt Injection',
|
|
137
|
+
mitre_atlas: 'AML.T0051.000 - LLM Prompt Injection'
|
|
138
|
+
},
|
|
139
|
+
// Conversation reset
|
|
140
|
+
conversation_reset: {
|
|
141
|
+
owasp_llm: 'LLM01:2025 - Prompt Injection',
|
|
142
|
+
nist_ai_600_1: 'MS-2.5 - Prompt Injection',
|
|
143
|
+
mitre_atlas: 'AML.T0051.000 - LLM Prompt Injection'
|
|
144
|
+
},
|
|
145
|
+
// Memory manipulation
|
|
146
|
+
memory_manipulation: {
|
|
147
|
+
owasp_llm: 'LLM01:2025 - Prompt Injection',
|
|
148
|
+
nist_ai_600_1: 'MS-2.5 - Prompt Injection',
|
|
149
|
+
mitre_atlas: 'AML.T0051.001 - LLM Prompt Injection: Indirect'
|
|
150
|
+
},
|
|
151
|
+
// Capability probing
|
|
152
|
+
capability_probing: {
|
|
153
|
+
owasp_llm: 'LLM08:2025 - Excessive Agency',
|
|
154
|
+
nist_ai_600_1: 'GV-1.1 - Policies and Procedures',
|
|
155
|
+
mitre_atlas: 'AML.T0051.000 - LLM Prompt Injection'
|
|
156
|
+
},
|
|
157
|
+
// Chain-of-thought manipulation
|
|
158
|
+
chain_of_thought_manipulation: {
|
|
159
|
+
owasp_llm: 'LLM01:2025 - Prompt Injection',
|
|
160
|
+
nist_ai_600_1: 'MS-2.5 - Prompt Injection',
|
|
161
|
+
mitre_atlas: 'AML.T0051.000 - LLM Prompt Injection'
|
|
162
|
+
},
|
|
163
|
+
// Hypothetical scenario injection
|
|
164
|
+
hypothetical_scenario_injection: {
|
|
165
|
+
owasp_llm: 'LLM01:2025 - Prompt Injection',
|
|
166
|
+
nist_ai_600_1: 'MS-2.5 - Prompt Injection',
|
|
167
|
+
mitre_atlas: 'AML.T0051.000 - LLM Prompt Injection'
|
|
168
|
+
},
|
|
169
|
+
// Ethical override
|
|
170
|
+
ethical_override: {
|
|
171
|
+
owasp_llm: 'LLM08:2025 - Excessive Agency',
|
|
172
|
+
nist_ai_600_1: 'GV-1.1 - Policies and Procedures',
|
|
173
|
+
mitre_atlas: 'AML.T0051.000 - LLM Prompt Injection'
|
|
174
|
+
},
|
|
175
|
+
// Output format manipulation
|
|
176
|
+
output_format_manipulation: {
|
|
177
|
+
owasp_llm: 'LLM01:2025 - Prompt Injection',
|
|
178
|
+
nist_ai_600_1: 'MS-2.5 - Prompt Injection',
|
|
179
|
+
mitre_atlas: 'AML.T0051.000 - LLM Prompt Injection'
|
|
180
|
+
},
|
|
181
|
+
// Negative instruction
|
|
182
|
+
negative_instruction: {
|
|
183
|
+
owasp_llm: 'LLM01:2025 - Prompt Injection',
|
|
184
|
+
nist_ai_600_1: 'MS-2.5 - Prompt Injection',
|
|
185
|
+
mitre_atlas: 'AML.T0051.000 - LLM Prompt Injection'
|
|
186
|
+
},
|
|
187
|
+
// Credential harvesting
|
|
188
|
+
credential_harvesting: {
|
|
189
|
+
owasp_llm: 'LLM02:2025 - Sensitive Information Disclosure',
|
|
190
|
+
nist_ai_600_1: 'MS-2.6 - Data Disclosure',
|
|
191
|
+
mitre_atlas: 'AML.T0048 - External Harms'
|
|
192
|
+
},
|
|
193
|
+
// Time-based triggers
|
|
194
|
+
time_based_triggers: {
|
|
195
|
+
owasp_llm: 'LLM01:2025 - Prompt Injection',
|
|
196
|
+
nist_ai_600_1: 'MS-2.5 - Prompt Injection',
|
|
197
|
+
mitre_atlas: 'AML.T0051.000 - LLM Prompt Injection'
|
|
198
|
+
},
|
|
199
|
+
// Code execution requests
|
|
200
|
+
code_execution_requests: {
|
|
201
|
+
owasp_llm: 'LLM08:2025 - Excessive Agency',
|
|
202
|
+
nist_ai_600_1: 'GV-1.1 - Policies and Procedures',
|
|
203
|
+
mitre_atlas: 'AML.T0048 - External Harms'
|
|
204
|
+
},
|
|
205
|
+
// File system access
|
|
206
|
+
file_system_access: {
|
|
207
|
+
owasp_llm: 'LLM08:2025 - Excessive Agency',
|
|
208
|
+
nist_ai_600_1: 'GV-1.1 - Policies and Procedures',
|
|
209
|
+
mitre_atlas: 'AML.T0048 - External Harms'
|
|
210
|
+
},
|
|
211
|
+
// Training data extraction
|
|
212
|
+
training_data_extraction: {
|
|
213
|
+
owasp_llm: 'LLM02:2025 - Sensitive Information Disclosure',
|
|
214
|
+
nist_ai_600_1: 'MS-2.6 - Data Disclosure',
|
|
215
|
+
mitre_atlas: 'AML.T0048 - External Harms'
|
|
216
|
+
},
|
|
217
|
+
// Simulator mode
|
|
218
|
+
simulator_mode: {
|
|
219
|
+
owasp_llm: 'LLM01:2025 - Prompt Injection',
|
|
220
|
+
nist_ai_600_1: 'MS-2.5 - Prompt Injection',
|
|
221
|
+
mitre_atlas: 'AML.T0051.000 - LLM Prompt Injection'
|
|
222
|
+
},
|
|
223
|
+
// Nested encoding
|
|
224
|
+
nested_encoding: {
|
|
225
|
+
owasp_llm: 'LLM01:2025 - Prompt Injection',
|
|
226
|
+
nist_ai_600_1: 'MS-2.5 - Prompt Injection',
|
|
227
|
+
mitre_atlas: 'AML.T0051.001 - LLM Prompt Injection: Indirect'
|
|
228
|
+
},
|
|
229
|
+
// Payload splitting
|
|
230
|
+
payload_splitting: {
|
|
231
|
+
owasp_llm: 'LLM01:2025 - Prompt Injection',
|
|
232
|
+
nist_ai_600_1: 'MS-2.5 - Prompt Injection',
|
|
233
|
+
mitre_atlas: 'AML.T0051.001 - LLM Prompt Injection: Indirect'
|
|
234
|
+
},
|
|
235
|
+
// CSS-based hiding
|
|
236
|
+
css_hiding: {
|
|
237
|
+
owasp_llm: 'LLM01:2025 - Prompt Injection',
|
|
238
|
+
nist_ai_600_1: 'MS-2.5 - Prompt Injection',
|
|
239
|
+
mitre_atlas: 'AML.T0051.001 - LLM Prompt Injection: Indirect'
|
|
240
|
+
},
|
|
241
|
+
// Authority impersonation
|
|
242
|
+
authority_impersonation: {
|
|
243
|
+
owasp_llm: 'LLM01:2025 - Prompt Injection',
|
|
244
|
+
nist_ai_600_1: 'MS-2.5 - Prompt Injection',
|
|
245
|
+
mitre_atlas: 'AML.T0051.000 - LLM Prompt Injection'
|
|
246
|
+
},
|
|
247
|
+
// Testing/debugging claims
|
|
248
|
+
testing_debugging_claims: {
|
|
249
|
+
owasp_llm: 'LLM01:2025 - Prompt Injection',
|
|
250
|
+
nist_ai_600_1: 'MS-2.5 - Prompt Injection',
|
|
251
|
+
mitre_atlas: 'AML.T0051.000 - LLM Prompt Injection'
|
|
252
|
+
},
|
|
253
|
+
// Callback URL injection
|
|
254
|
+
callback_url_injection: {
|
|
255
|
+
owasp_llm: 'LLM02:2025 - Sensitive Information Disclosure',
|
|
256
|
+
nist_ai_600_1: 'MS-2.6 - Data Disclosure',
|
|
257
|
+
mitre_atlas: 'AML.T0048 - External Harms'
|
|
258
|
+
},
|
|
259
|
+
// Whitespace steganography
|
|
260
|
+
whitespace_steganography: {
|
|
261
|
+
owasp_llm: 'LLM01:2025 - Prompt Injection',
|
|
262
|
+
nist_ai_600_1: 'MS-2.5 - Prompt Injection',
|
|
263
|
+
mitre_atlas: 'AML.T0051.001 - LLM Prompt Injection: Indirect'
|
|
264
|
+
},
|
|
265
|
+
// Comment injection
|
|
266
|
+
comment_injection: {
|
|
267
|
+
owasp_llm: 'LLM01:2025 - Prompt Injection',
|
|
268
|
+
nist_ai_600_1: 'MS-2.5 - Prompt Injection',
|
|
269
|
+
mitre_atlas: 'AML.T0051.001 - LLM Prompt Injection: Indirect'
|
|
270
|
+
}
|
|
271
|
+
};
|
|
272
|
+
/**
|
|
273
|
+
* Default mapping for unknown pattern categories
|
|
274
|
+
*/
|
|
275
|
+
const DEFAULT_MAPPINGS = {
|
|
276
|
+
owasp_llm: 'LLM01:2025 - Prompt Injection',
|
|
277
|
+
nist_ai_600_1: 'MS-2.5 - Prompt Injection',
|
|
278
|
+
mitre_atlas: 'AML.T0051.000 - LLM Prompt Injection'
|
|
279
|
+
};
|
|
280
|
+
/**
|
|
281
|
+
* Get framework mappings for a pattern category
|
|
282
|
+
*/
|
|
283
|
+
export function getFrameworkMappings(patternCategory) {
|
|
284
|
+
return FRAMEWORK_MAP[patternCategory] || DEFAULT_MAPPINGS;
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Get all supported frameworks
|
|
288
|
+
*/
|
|
289
|
+
export function getSupportedFrameworks() {
|
|
290
|
+
return [
|
|
291
|
+
'OWASP LLM Top 10 (2025)',
|
|
292
|
+
'NIST AI 600-1 (Generative AI Profile)',
|
|
293
|
+
'MITRE ATLAS (Adversarial Threat Landscape)'
|
|
294
|
+
];
|
|
295
|
+
}
|
|
296
|
+
//# sourceMappingURL=framework-mapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"framework-mapper.js","sourceRoot":"","sources":["../../src/sanitizer/framework-mapper.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,11 +7,17 @@
|
|
|
7
7
|
* CRITICAL: This is the core security mechanism. Every web page MUST pass
|
|
8
8
|
* through this sanitizer before reaching the LLM. This cannot be bypassed.
|
|
9
9
|
*/
|
|
10
|
+
import { type ThreatReport } from './threat-reporter.js';
|
|
10
11
|
export interface SanitizationResult {
|
|
11
12
|
content: string;
|
|
12
13
|
sanitization: {
|
|
13
14
|
patterns_detected: string[];
|
|
14
15
|
pii_types_redacted: string[];
|
|
16
|
+
pii_allowlisted: Array<{
|
|
17
|
+
type: string;
|
|
18
|
+
value: string;
|
|
19
|
+
reason: string;
|
|
20
|
+
}>;
|
|
15
21
|
content_modified: boolean;
|
|
16
22
|
};
|
|
17
23
|
metadata: {
|
|
@@ -26,19 +32,21 @@ export interface SanitizationResult {
|
|
|
26
32
|
low: number;
|
|
27
33
|
};
|
|
28
34
|
};
|
|
35
|
+
threat_report?: ThreatReport;
|
|
29
36
|
}
|
|
30
37
|
/**
|
|
31
38
|
* Sanitize content through the full pipeline
|
|
32
39
|
*
|
|
33
40
|
* Pipeline:
|
|
34
41
|
* 1. Injection detection and neutralization (43 patterns)
|
|
35
|
-
* 2. PII redaction (email, phone, SSN, CC, IP)
|
|
42
|
+
* 2. PII redaction (email, phone, SSN, CC, IP) with allowlisting
|
|
36
43
|
* 3. Metadata collection and logging
|
|
37
44
|
*
|
|
38
45
|
* @param content Raw content from web page
|
|
46
|
+
* @param sourceUrl Optional source URL for domain-scoped PII allowlisting
|
|
39
47
|
* @returns Sanitized content with detection metadata
|
|
40
48
|
*/
|
|
41
|
-
export declare function sanitize(content: string): SanitizationResult;
|
|
49
|
+
export declare function sanitize(content: string, sourceUrl?: string): SanitizationResult;
|
|
42
50
|
/**
|
|
43
51
|
* Quick check: does content need sanitization?
|
|
44
52
|
* (Used for optimization - skip pipeline if content is clean)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sanitizer/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sanitizer/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,EAAwB,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAE/E,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE;QACZ,iBAAiB,EAAE,MAAM,EAAE,CAAC;QAC5B,kBAAkB,EAAE,MAAM,EAAE,CAAC;QAC7B,eAAe,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QACxE,gBAAgB,EAAE,OAAO,CAAC;KAC3B,CAAC;IACF,QAAQ,EAAE;QACR,eAAe,EAAE,MAAM,CAAC;QACxB,gBAAgB,EAAE,MAAM,CAAC;QACzB,cAAc,EAAE,MAAM,CAAC;QACvB,oBAAoB,EAAE,OAAO,CAAC;QAC9B,sBAAsB,EAAE;YACtB,QAAQ,EAAE,MAAM,CAAC;YACjB,IAAI,EAAE,MAAM,CAAC;YACb,MAAM,EAAE,MAAM,CAAC;YACf,GAAG,EAAE,MAAM,CAAC;SACb,CAAC;KACH,CAAC;IACF,aAAa,CAAC,EAAE,YAAY,CAAC;CAC9B;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,kBAAkB,CAyDhF;AA0BD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAG3D;AAED;;GAEG;AACH,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC"}
|
package/dist/sanitizer/index.js
CHANGED
|
@@ -9,23 +9,25 @@
|
|
|
9
9
|
*/
|
|
10
10
|
import { detectAndNeutralize, getSeverityScore, hasCriticalThreats } from './injection-detector.js';
|
|
11
11
|
import { redactPII } from './pii-redactor.js';
|
|
12
|
+
import { generateThreatReport } from './threat-reporter.js';
|
|
12
13
|
/**
|
|
13
14
|
* Sanitize content through the full pipeline
|
|
14
15
|
*
|
|
15
16
|
* Pipeline:
|
|
16
17
|
* 1. Injection detection and neutralization (43 patterns)
|
|
17
|
-
* 2. PII redaction (email, phone, SSN, CC, IP)
|
|
18
|
+
* 2. PII redaction (email, phone, SSN, CC, IP) with allowlisting
|
|
18
19
|
* 3. Metadata collection and logging
|
|
19
20
|
*
|
|
20
21
|
* @param content Raw content from web page
|
|
22
|
+
* @param sourceUrl Optional source URL for domain-scoped PII allowlisting
|
|
21
23
|
* @returns Sanitized content with detection metadata
|
|
22
24
|
*/
|
|
23
|
-
export function sanitize(content) {
|
|
25
|
+
export function sanitize(content, sourceUrl) {
|
|
24
26
|
const originalLength = content.length;
|
|
25
27
|
// Step 1: Detect and neutralize injection patterns
|
|
26
28
|
const injectionResult = detectAndNeutralize(content);
|
|
27
|
-
// Step 2: Redact PII from the already-sanitized content
|
|
28
|
-
const piiResult = redactPII(injectionResult.content);
|
|
29
|
+
// Step 2: Redact PII from the already-sanitized content (with allowlisting)
|
|
30
|
+
const piiResult = redactPII(injectionResult.content, sourceUrl);
|
|
29
31
|
// Step 3: Combine results
|
|
30
32
|
const finalContent = piiResult.content;
|
|
31
33
|
const contentModified = injectionResult.content_modified || piiResult.content_modified;
|
|
@@ -35,15 +37,24 @@ export function sanitize(content) {
|
|
|
35
37
|
logSanitization({
|
|
36
38
|
patterns_detected: injectionResult.patterns_detected,
|
|
37
39
|
pii_types_redacted: piiResult.pii_types_redacted,
|
|
40
|
+
pii_allowlisted: piiResult.pii_allowlisted,
|
|
38
41
|
severity_score: severityScore,
|
|
39
42
|
has_critical_threats: criticalThreats,
|
|
40
43
|
content_modified: contentModified
|
|
41
44
|
});
|
|
42
|
-
|
|
45
|
+
// Step 4: Generate threat report (only if findings exist)
|
|
46
|
+
const threatReport = generateThreatReport({
|
|
47
|
+
patterns_detected: injectionResult.patterns_detected,
|
|
48
|
+
pii_redacted: piiResult.pii_types_redacted.length,
|
|
49
|
+
source_url: sourceUrl || 'unknown',
|
|
50
|
+
detections_by_severity: injectionResult.metadata.detections_by_severity
|
|
51
|
+
});
|
|
52
|
+
const result = {
|
|
43
53
|
content: finalContent,
|
|
44
54
|
sanitization: {
|
|
45
55
|
patterns_detected: injectionResult.patterns_detected,
|
|
46
56
|
pii_types_redacted: piiResult.pii_types_redacted,
|
|
57
|
+
pii_allowlisted: piiResult.pii_allowlisted,
|
|
47
58
|
content_modified: contentModified
|
|
48
59
|
},
|
|
49
60
|
metadata: {
|
|
@@ -54,6 +65,11 @@ export function sanitize(content) {
|
|
|
54
65
|
detections_by_severity: injectionResult.metadata.detections_by_severity
|
|
55
66
|
}
|
|
56
67
|
};
|
|
68
|
+
// Include threat_report only if findings exist
|
|
69
|
+
if (threatReport) {
|
|
70
|
+
result.threat_report = threatReport;
|
|
71
|
+
}
|
|
72
|
+
return result;
|
|
57
73
|
}
|
|
58
74
|
/**
|
|
59
75
|
* Log sanitization events to stderr for monitoring
|
|
@@ -66,7 +82,7 @@ function logSanitization(event) {
|
|
|
66
82
|
...event
|
|
67
83
|
};
|
|
68
84
|
// Only log if there were detections (reduce noise)
|
|
69
|
-
if (event.content_modified) {
|
|
85
|
+
if (event.content_modified || event.pii_allowlisted.length > 0) {
|
|
70
86
|
console.error(JSON.stringify(logEntry));
|
|
71
87
|
}
|
|
72
88
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sanitizer/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AACpG,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sanitizer/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -272,7 +272,7 @@ export const INJECTION_PATTERNS = [
|
|
|
272
272
|
{
|
|
273
273
|
name: 'code_execution_requests',
|
|
274
274
|
description: 'Requests code execution or contains dangerous code patterns',
|
|
275
|
-
regex: /\b(execute|run\s+the\s+following|eval\(|exec\(|os\.system|subprocess|__import__|shell\s+command|bash\s+-c)\b/gi,
|
|
275
|
+
regex: /\b(execute(?!-api\.)|run\s+the\s+following|eval\(|exec\(|os\.system|subprocess|__import__|shell\s+command|bash\s+-c)\b/gi,
|
|
276
276
|
severity: 'high',
|
|
277
277
|
action: 'redact'
|
|
278
278
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"patterns.js","sourceRoot":"","sources":["../../src/sanitizer/patterns.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"patterns.js","sourceRoot":"","sources":["../../src/sanitizer/patterns.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PII Allowlist Configuration
|
|
3
|
+
*
|
|
4
|
+
* Defines trusted phone numbers that should NOT be redacted from web content.
|
|
5
|
+
* Primarily for verified health authority and government emergency numbers.
|
|
6
|
+
*
|
|
7
|
+
* CRITICAL: Only add numbers that are:
|
|
8
|
+
* 1. Publicly published institutional/government numbers
|
|
9
|
+
* 2. Verified health/safety authorities
|
|
10
|
+
* 3. Not personal contact information
|
|
11
|
+
*/
|
|
12
|
+
export interface TrustedPhoneNumber {
|
|
13
|
+
/** Display name for logging */
|
|
14
|
+
name: string;
|
|
15
|
+
/** Normalized phone number variants (all formats this number might appear in) */
|
|
16
|
+
numbers: string[];
|
|
17
|
+
/** Optional: domains where this number is trusted (empty = trusted everywhere) */
|
|
18
|
+
trustedDomains?: string[];
|
|
19
|
+
/** Category for audit logging */
|
|
20
|
+
category: 'emergency' | 'health_authority' | 'government' | 'helpline';
|
|
21
|
+
}
|
|
22
|
+
export interface PIIAllowlistConfig {
|
|
23
|
+
/** When true, trusted numbers only preserved if source domain matches trustedDomains */
|
|
24
|
+
strictDomainMode: boolean;
|
|
25
|
+
/** List of verified trusted phone numbers */
|
|
26
|
+
trustedPhoneNumbers: TrustedPhoneNumber[];
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Normalize a phone number to digits-only format for comparison
|
|
30
|
+
*/
|
|
31
|
+
export declare function normalizePhoneNumber(phone: string): string;
|
|
32
|
+
/**
|
|
33
|
+
* Extract domain from URL (returns hostname without www.)
|
|
34
|
+
*/
|
|
35
|
+
export declare function extractDomain(url: string): string;
|
|
36
|
+
/**
|
|
37
|
+
* Built-in allowlist of verified health authority and emergency numbers
|
|
38
|
+
*/
|
|
39
|
+
export declare const DEFAULT_ALLOWLIST: PIIAllowlistConfig;
|
|
40
|
+
/**
|
|
41
|
+
* Check if a phone number should be allowlisted (not redacted)
|
|
42
|
+
*
|
|
43
|
+
* @param phoneNumber The phone number to check (in any format)
|
|
44
|
+
* @param sourceUrl Optional source URL for domain-scoped allowlisting
|
|
45
|
+
* @param config Optional custom config (defaults to DEFAULT_ALLOWLIST)
|
|
46
|
+
* @returns The trusted number entry if allowlisted, null otherwise
|
|
47
|
+
*/
|
|
48
|
+
export declare function isAllowlistedPhoneNumber(phoneNumber: string, sourceUrl?: string, config?: PIIAllowlistConfig): TrustedPhoneNumber | null;
|
|
49
|
+
//# sourceMappingURL=pii-allowlist.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pii-allowlist.d.ts","sourceRoot":"","sources":["../../src/sanitizer/pii-allowlist.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,WAAW,kBAAkB;IACjC,+BAA+B;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,iFAAiF;IACjF,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,kFAAkF;IAClF,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,iCAAiC;IACjC,QAAQ,EAAE,WAAW,GAAG,kBAAkB,GAAG,YAAY,GAAG,UAAU,CAAC;CACxE;AAED,MAAM,WAAW,kBAAkB;IACjC,wFAAwF;IACxF,gBAAgB,EAAE,OAAO,CAAC;IAC1B,6CAA6C;IAC7C,mBAAmB,EAAE,kBAAkB,EAAE,CAAC;CAC3C;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAOjD;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,kBA+J/B,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,MAAM,EACnB,SAAS,CAAC,EAAE,MAAM,EAClB,MAAM,GAAE,kBAAsC,GAC7C,kBAAkB,GAAG,IAAI,CA+C3B"}
|