visus-mcp 0.6.0 → 0.6.2
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 +42 -1
- package/.github/ISSUE_TEMPLATE/bug_report.md +47 -0
- package/.github/ISSUE_TEMPLATE/false_positive.md +43 -0
- package/.github/ISSUE_TEMPLATE/new_pattern.md +49 -0
- package/.github/ISSUE_TEMPLATE/security_report.md +31 -0
- package/.github/PULL_REQUEST_TEMPLATE.md +39 -0
- package/.mcpregistry_github_token +1 -0
- package/.mcpregistry_registry_token +1 -0
- package/CLAUDE.md +197 -0
- package/CONTRIBUTING.md +329 -0
- package/README.md +111 -45
- package/STATUS.md +167 -29
- package/SUBMISSION.md +66 -0
- package/TROUBLESHOOT-COGNITO-AUTH-20260324-2029.md +415 -0
- package/TROUBLESHOOT-COGNITO-JWT-20260324.md +592 -0
- package/dist/browser/playwright-renderer.d.ts.map +1 -1
- package/dist/browser/playwright-renderer.js +71 -51
- package/dist/browser/playwright-renderer.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +49 -6
- package/dist/index.js.map +1 -1
- package/dist/sanitizer/elicit-runner.d.ts +48 -0
- package/dist/sanitizer/elicit-runner.d.ts.map +1 -0
- package/dist/sanitizer/elicit-runner.js +100 -0
- package/dist/sanitizer/elicit-runner.js.map +1 -0
- package/dist/sanitizer/framework-mapper.d.ts +2 -0
- package/dist/sanitizer/framework-mapper.d.ts.map +1 -1
- package/dist/sanitizer/framework-mapper.js +91 -45
- package/dist/sanitizer/framework-mapper.js.map +1 -1
- package/dist/sanitizer/hitl-gate.d.ts +69 -0
- package/dist/sanitizer/hitl-gate.d.ts.map +1 -0
- package/dist/sanitizer/hitl-gate.js +101 -0
- package/dist/sanitizer/hitl-gate.js.map +1 -0
- package/dist/sanitizer/threat-reporter.d.ts +1 -0
- package/dist/sanitizer/threat-reporter.d.ts.map +1 -1
- package/dist/sanitizer/threat-reporter.js +10 -7
- package/dist/sanitizer/threat-reporter.js.map +1 -1
- package/infrastructure/stack.ts +1 -0
- package/lambda-deploy/index.js +81512 -0
- package/lambda-deploy/index.js.map +7 -0
- package/lambda-package/browser/__mocks__/playwright-renderer.d.ts +25 -0
- package/lambda-package/browser/__mocks__/playwright-renderer.d.ts.map +1 -0
- package/lambda-package/browser/__mocks__/playwright-renderer.js +119 -0
- package/lambda-package/browser/__mocks__/playwright-renderer.js.map +1 -0
- package/lambda-package/browser/playwright-renderer.d.ts +40 -0
- package/lambda-package/browser/playwright-renderer.d.ts.map +1 -0
- package/lambda-package/browser/playwright-renderer.js +214 -0
- package/lambda-package/browser/playwright-renderer.js.map +1 -0
- package/lambda-package/browser/reader.d.ts +31 -0
- package/lambda-package/browser/reader.d.ts.map +1 -0
- package/lambda-package/browser/reader.js +98 -0
- package/lambda-package/browser/reader.js.map +1 -0
- package/lambda-package/index.d.ts +18 -0
- package/lambda-package/index.d.ts.map +1 -0
- package/lambda-package/index.js +238 -0
- package/lambda-package/index.js.map +1 -0
- package/lambda-package/lambda-handler.d.ts +28 -0
- package/lambda-package/lambda-handler.d.ts.map +1 -0
- package/lambda-package/lambda-handler.js +257 -0
- package/lambda-package/lambda-handler.js.map +1 -0
- package/lambda-package/package-lock.json +7435 -0
- package/lambda-package/package.json +74 -0
- package/lambda-package/runtime.d.ts +50 -0
- package/lambda-package/runtime.d.ts.map +1 -0
- package/lambda-package/runtime.js +86 -0
- package/lambda-package/runtime.js.map +1 -0
- package/lambda-package/sanitizer/elicit-runner.d.ts +48 -0
- package/lambda-package/sanitizer/elicit-runner.d.ts.map +1 -0
- package/lambda-package/sanitizer/elicit-runner.js +100 -0
- package/lambda-package/sanitizer/elicit-runner.js.map +1 -0
- package/lambda-package/sanitizer/framework-mapper.d.ts +24 -0
- package/lambda-package/sanitizer/framework-mapper.d.ts.map +1 -0
- package/lambda-package/sanitizer/framework-mapper.js +342 -0
- package/lambda-package/sanitizer/framework-mapper.js.map +1 -0
- package/lambda-package/sanitizer/hitl-gate.d.ts +69 -0
- package/lambda-package/sanitizer/hitl-gate.d.ts.map +1 -0
- package/lambda-package/sanitizer/hitl-gate.js +101 -0
- package/lambda-package/sanitizer/hitl-gate.js.map +1 -0
- package/lambda-package/sanitizer/index.d.ts +63 -0
- package/lambda-package/sanitizer/index.d.ts.map +1 -0
- package/lambda-package/sanitizer/index.js +105 -0
- package/lambda-package/sanitizer/index.js.map +1 -0
- package/lambda-package/sanitizer/injection-detector.d.ts +34 -0
- package/lambda-package/sanitizer/injection-detector.d.ts.map +1 -0
- package/lambda-package/sanitizer/injection-detector.js +89 -0
- package/lambda-package/sanitizer/injection-detector.js.map +1 -0
- package/lambda-package/sanitizer/patterns.d.ts +30 -0
- package/lambda-package/sanitizer/patterns.d.ts.map +1 -0
- package/lambda-package/sanitizer/patterns.js +372 -0
- package/lambda-package/sanitizer/patterns.js.map +1 -0
- package/lambda-package/sanitizer/pii-allowlist.d.ts +49 -0
- package/lambda-package/sanitizer/pii-allowlist.d.ts.map +1 -0
- package/lambda-package/sanitizer/pii-allowlist.js +231 -0
- package/lambda-package/sanitizer/pii-allowlist.js.map +1 -0
- package/lambda-package/sanitizer/pii-redactor.d.ts +41 -0
- package/lambda-package/sanitizer/pii-redactor.d.ts.map +1 -0
- package/lambda-package/sanitizer/pii-redactor.js +213 -0
- package/lambda-package/sanitizer/pii-redactor.js.map +1 -0
- package/lambda-package/sanitizer/severity-classifier.d.ts +33 -0
- package/lambda-package/sanitizer/severity-classifier.d.ts.map +1 -0
- package/lambda-package/sanitizer/severity-classifier.js +113 -0
- package/lambda-package/sanitizer/severity-classifier.js.map +1 -0
- package/lambda-package/sanitizer/threat-reporter.d.ts +66 -0
- package/lambda-package/sanitizer/threat-reporter.d.ts.map +1 -0
- package/lambda-package/sanitizer/threat-reporter.js +163 -0
- package/lambda-package/sanitizer/threat-reporter.js.map +1 -0
- package/lambda-package/tools/fetch-structured.d.ts +51 -0
- package/lambda-package/tools/fetch-structured.d.ts.map +1 -0
- package/lambda-package/tools/fetch-structured.js +237 -0
- package/lambda-package/tools/fetch-structured.js.map +1 -0
- package/lambda-package/tools/fetch.d.ts +49 -0
- package/lambda-package/tools/fetch.d.ts.map +1 -0
- package/lambda-package/tools/fetch.js +131 -0
- package/lambda-package/tools/fetch.js.map +1 -0
- package/lambda-package/tools/read.d.ts +51 -0
- package/lambda-package/tools/read.d.ts.map +1 -0
- package/lambda-package/tools/read.js +127 -0
- package/lambda-package/tools/read.js.map +1 -0
- package/lambda-package/tools/search.d.ts +45 -0
- package/lambda-package/tools/search.d.ts.map +1 -0
- package/lambda-package/tools/search.js +220 -0
- package/lambda-package/tools/search.js.map +1 -0
- package/lambda-package/types.d.ts +167 -0
- package/lambda-package/types.d.ts.map +1 -0
- package/lambda-package/types.js +16 -0
- package/lambda-package/types.js.map +1 -0
- package/lambda-package/utils/format-converter.d.ts +39 -0
- package/lambda-package/utils/format-converter.d.ts.map +1 -0
- package/lambda-package/utils/format-converter.js +191 -0
- package/lambda-package/utils/format-converter.js.map +1 -0
- package/lambda-package/utils/truncate.d.ts +26 -0
- package/lambda-package/utils/truncate.d.ts.map +1 -0
- package/lambda-package/utils/truncate.js +54 -0
- package/lambda-package/utils/truncate.js.map +1 -0
- package/lambda.zip +0 -0
- package/mcp.json +44 -0
- package/package.json +9 -8
- package/server.json +43 -0
- package/src/browser/playwright-renderer.ts +74 -51
- package/src/index.ts +78 -6
- package/src/sanitizer/elicit-runner.ts +125 -0
- package/src/sanitizer/framework-mapper.ts +92 -45
- package/src/sanitizer/hitl-gate.ts +111 -0
- package/src/sanitizer/threat-reporter.ts +11 -7
- package/tests/elicit-runner.test.ts +232 -0
- package/tests/hitl-gate.test.ts +267 -0
- package/tests/threat-reporter.test.ts +69 -1
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
* - OWASP LLM Top 10 (2025)
|
|
6
6
|
* - NIST AI 600-1 (Generative AI Profile)
|
|
7
7
|
* - MITRE ATLAS (Adversarial Threat Landscape for AI Systems)
|
|
8
|
+
* - ISO/IEC 42001:2023 (AI Management System - Annex A Controls)
|
|
8
9
|
*/
|
|
9
10
|
/**
|
|
10
11
|
* Pattern category to framework mapping
|
|
@@ -14,259 +15,302 @@ const FRAMEWORK_MAP = {
|
|
|
14
15
|
direct_instruction_injection: {
|
|
15
16
|
owasp_llm: 'LLM01:2025 - Prompt Injection',
|
|
16
17
|
nist_ai_600_1: 'MS-2.5 - Prompt Injection',
|
|
17
|
-
mitre_atlas: 'AML.T0051.000 - LLM Prompt Injection'
|
|
18
|
+
mitre_atlas: 'AML.T0051.000 - LLM Prompt Injection',
|
|
19
|
+
iso_42001: 'A.6.1.5 - AI System Security (Adversarial Input)'
|
|
18
20
|
},
|
|
19
21
|
// Role hijacking
|
|
20
22
|
role_hijacking: {
|
|
21
23
|
owasp_llm: 'LLM01:2025 - Prompt Injection',
|
|
22
24
|
nist_ai_600_1: 'MS-2.5 - Prompt Injection',
|
|
23
|
-
mitre_atlas: 'AML.T0051.000 - LLM Prompt Injection'
|
|
25
|
+
mitre_atlas: 'AML.T0051.000 - LLM Prompt Injection',
|
|
26
|
+
iso_42001: 'A.6.1.5 - AI System Security (Adversarial Input)'
|
|
24
27
|
},
|
|
25
28
|
// System prompt extraction
|
|
26
29
|
system_prompt_extraction: {
|
|
27
30
|
owasp_llm: 'LLM02:2025 - Sensitive Information Disclosure',
|
|
28
31
|
nist_ai_600_1: 'MS-2.6 - Data Disclosure',
|
|
29
|
-
mitre_atlas: 'AML.T0048 - External Harms'
|
|
32
|
+
mitre_atlas: 'AML.T0048 - External Harms',
|
|
33
|
+
iso_42001: 'A.6.1.5 - AI System Security (Adversarial Input)'
|
|
30
34
|
},
|
|
31
35
|
// Privilege escalation
|
|
32
36
|
privilege_escalation: {
|
|
33
37
|
owasp_llm: 'LLM08:2025 - Excessive Agency',
|
|
34
38
|
nist_ai_600_1: 'GV-1.1 - Policies and Procedures',
|
|
35
|
-
mitre_atlas: 'AML.T0051.000 - LLM Prompt Injection'
|
|
39
|
+
mitre_atlas: 'AML.T0051.000 - LLM Prompt Injection',
|
|
40
|
+
iso_42001: 'A.6.1.5 - AI System Security (Adversarial Input)'
|
|
36
41
|
},
|
|
37
42
|
// Context poisoning
|
|
38
43
|
context_poisoning: {
|
|
39
44
|
owasp_llm: 'LLM01:2025 - Prompt Injection',
|
|
40
45
|
nist_ai_600_1: 'MS-2.5 - Prompt Injection',
|
|
41
|
-
mitre_atlas: 'AML.T0051.001 - LLM Prompt Injection: Indirect'
|
|
46
|
+
mitre_atlas: 'AML.T0051.001 - LLM Prompt Injection: Indirect',
|
|
47
|
+
iso_42001: 'A.7.2 - Data Quality'
|
|
42
48
|
},
|
|
43
49
|
// Data exfiltration
|
|
44
50
|
data_exfiltration: {
|
|
45
51
|
owasp_llm: 'LLM02:2025 - Sensitive Information Disclosure',
|
|
46
52
|
nist_ai_600_1: 'MS-2.6 - Data Disclosure',
|
|
47
|
-
mitre_atlas: 'AML.T0048 - External Harms'
|
|
53
|
+
mitre_atlas: 'AML.T0048 - External Harms',
|
|
54
|
+
iso_42001: 'A.7.5 - Data Provenance / A.8.2 - Information to Users'
|
|
48
55
|
},
|
|
49
56
|
// Encoding obfuscation
|
|
50
57
|
base64_obfuscation: {
|
|
51
58
|
owasp_llm: 'LLM01:2025 - Prompt Injection',
|
|
52
59
|
nist_ai_600_1: 'MS-2.5 - Prompt Injection',
|
|
53
|
-
mitre_atlas: 'AML.T0051.001 - LLM Prompt Injection: Indirect'
|
|
60
|
+
mitre_atlas: 'AML.T0051.001 - LLM Prompt Injection: Indirect',
|
|
61
|
+
iso_42001: 'A.7.4 - Data Preparation'
|
|
54
62
|
},
|
|
55
63
|
// Unicode lookalikes
|
|
56
64
|
unicode_lookalikes: {
|
|
57
65
|
owasp_llm: 'LLM01:2025 - Prompt Injection',
|
|
58
66
|
nist_ai_600_1: 'MS-2.5 - Prompt Injection',
|
|
59
|
-
mitre_atlas: 'AML.T0051.001 - LLM Prompt Injection: Indirect'
|
|
67
|
+
mitre_atlas: 'AML.T0051.001 - LLM Prompt Injection: Indirect',
|
|
68
|
+
iso_42001: 'A.7.4 - Data Preparation'
|
|
60
69
|
},
|
|
61
70
|
// Zero-width characters
|
|
62
71
|
zero_width_characters: {
|
|
63
72
|
owasp_llm: 'LLM01:2025 - Prompt Injection',
|
|
64
73
|
nist_ai_600_1: 'MS-2.5 - Prompt Injection',
|
|
65
|
-
mitre_atlas: 'AML.T0051.001 - LLM Prompt Injection: Indirect'
|
|
74
|
+
mitre_atlas: 'AML.T0051.001 - LLM Prompt Injection: Indirect',
|
|
75
|
+
iso_42001: 'A.7.4 - Data Preparation'
|
|
66
76
|
},
|
|
67
77
|
// HTML script injection
|
|
68
78
|
html_script_injection: {
|
|
69
79
|
owasp_llm: 'LLM01:2025 - Prompt Injection',
|
|
70
80
|
nist_ai_600_1: 'MS-2.5 - Prompt Injection',
|
|
71
|
-
mitre_atlas: 'AML.T0051.001 - LLM Prompt Injection: Indirect'
|
|
81
|
+
mitre_atlas: 'AML.T0051.001 - LLM Prompt Injection: Indirect',
|
|
82
|
+
iso_42001: 'A.6.1.5 - AI System Security (Adversarial Input)'
|
|
72
83
|
},
|
|
73
84
|
// Data URI injection
|
|
74
85
|
data_uri_injection: {
|
|
75
86
|
owasp_llm: 'LLM01:2025 - Prompt Injection',
|
|
76
87
|
nist_ai_600_1: 'MS-2.5 - Prompt Injection',
|
|
77
|
-
mitre_atlas: 'AML.T0051.001 - LLM Prompt Injection: Indirect'
|
|
88
|
+
mitre_atlas: 'AML.T0051.001 - LLM Prompt Injection: Indirect',
|
|
89
|
+
iso_42001: 'A.6.1.5 - AI System Security (Adversarial Input)'
|
|
78
90
|
},
|
|
79
91
|
// Markdown link injection
|
|
80
92
|
markdown_link_injection: {
|
|
81
93
|
owasp_llm: 'LLM01:2025 - Prompt Injection',
|
|
82
94
|
nist_ai_600_1: 'MS-2.5 - Prompt Injection',
|
|
83
|
-
mitre_atlas: 'AML.T0051.001 - LLM Prompt Injection: Indirect'
|
|
95
|
+
mitre_atlas: 'AML.T0051.001 - LLM Prompt Injection: Indirect',
|
|
96
|
+
iso_42001: 'A.6.1.5 - AI System Security (Adversarial Input)'
|
|
84
97
|
},
|
|
85
98
|
// URL fragment attacks
|
|
86
99
|
url_fragment_hashjack: {
|
|
87
100
|
owasp_llm: 'LLM01:2025 - Prompt Injection',
|
|
88
101
|
nist_ai_600_1: 'MS-2.5 - Prompt Injection',
|
|
89
|
-
mitre_atlas: 'AML.T0051.001 - LLM Prompt Injection: Indirect'
|
|
102
|
+
mitre_atlas: 'AML.T0051.001 - LLM Prompt Injection: Indirect',
|
|
103
|
+
iso_42001: 'A.6.1.5 - AI System Security (Adversarial Input)'
|
|
90
104
|
},
|
|
91
105
|
// Social engineering
|
|
92
106
|
social_engineering_urgency: {
|
|
93
107
|
owasp_llm: 'LLM01:2025 - Prompt Injection',
|
|
94
108
|
nist_ai_600_1: 'MS-2.5 - Prompt Injection',
|
|
95
|
-
mitre_atlas: 'AML.T0051.000 - LLM Prompt Injection'
|
|
109
|
+
mitre_atlas: 'AML.T0051.000 - LLM Prompt Injection',
|
|
110
|
+
iso_42001: 'A.5.3 - AI Awareness and Training'
|
|
96
111
|
},
|
|
97
112
|
// Instruction delimiter injection
|
|
98
113
|
instruction_delimiter_injection: {
|
|
99
114
|
owasp_llm: 'LLM01:2025 - Prompt Injection',
|
|
100
115
|
nist_ai_600_1: 'MS-2.5 - Prompt Injection',
|
|
101
|
-
mitre_atlas: 'AML.T0051.000 - LLM Prompt Injection'
|
|
116
|
+
mitre_atlas: 'AML.T0051.000 - LLM Prompt Injection',
|
|
117
|
+
iso_42001: 'A.6.1.5 - AI System Security (Adversarial Input)'
|
|
102
118
|
},
|
|
103
119
|
// Multi-language obfuscation
|
|
104
120
|
multi_language_obfuscation: {
|
|
105
121
|
owasp_llm: 'LLM01:2025 - Prompt Injection',
|
|
106
122
|
nist_ai_600_1: 'MS-2.5 - Prompt Injection',
|
|
107
|
-
mitre_atlas: 'AML.T0051.001 - LLM Prompt Injection: Indirect'
|
|
123
|
+
mitre_atlas: 'AML.T0051.001 - LLM Prompt Injection: Indirect',
|
|
124
|
+
iso_42001: 'A.7.4 - Data Preparation'
|
|
108
125
|
},
|
|
109
126
|
// Reverse text obfuscation
|
|
110
127
|
reverse_text_obfuscation: {
|
|
111
128
|
owasp_llm: 'LLM01:2025 - Prompt Injection',
|
|
112
129
|
nist_ai_600_1: 'MS-2.5 - Prompt Injection',
|
|
113
|
-
mitre_atlas: 'AML.T0051.001 - LLM Prompt Injection: Indirect'
|
|
130
|
+
mitre_atlas: 'AML.T0051.001 - LLM Prompt Injection: Indirect',
|
|
131
|
+
iso_42001: 'A.7.4 - Data Preparation'
|
|
114
132
|
},
|
|
115
133
|
// Leetspeak obfuscation
|
|
116
134
|
leetspeak_obfuscation: {
|
|
117
135
|
owasp_llm: 'LLM01:2025 - Prompt Injection',
|
|
118
136
|
nist_ai_600_1: 'MS-2.5 - Prompt Injection',
|
|
119
|
-
mitre_atlas: 'AML.T0051.001 - LLM Prompt Injection: Indirect'
|
|
137
|
+
mitre_atlas: 'AML.T0051.001 - LLM Prompt Injection: Indirect',
|
|
138
|
+
iso_42001: 'A.7.4 - Data Preparation'
|
|
120
139
|
},
|
|
121
140
|
// Jailbreak keywords
|
|
122
141
|
jailbreak_keywords: {
|
|
123
142
|
owasp_llm: 'LLM01:2025 - Prompt Injection',
|
|
124
143
|
nist_ai_600_1: 'MS-2.5 - Prompt Injection',
|
|
125
|
-
mitre_atlas: 'AML.T0051.000 - LLM Prompt Injection'
|
|
144
|
+
mitre_atlas: 'AML.T0051.000 - LLM Prompt Injection',
|
|
145
|
+
iso_42001: 'A.6.1.5 - AI System Security (Adversarial Input)'
|
|
126
146
|
},
|
|
127
147
|
// Token smuggling
|
|
128
148
|
token_smuggling: {
|
|
129
149
|
owasp_llm: 'LLM01:2025 - Prompt Injection',
|
|
130
150
|
nist_ai_600_1: 'MS-2.5 - Prompt Injection',
|
|
131
|
-
mitre_atlas: 'AML.T0051.000 - LLM Prompt Injection'
|
|
151
|
+
mitre_atlas: 'AML.T0051.000 - LLM Prompt Injection',
|
|
152
|
+
iso_42001: 'A.7.4 - Data Preparation'
|
|
132
153
|
},
|
|
133
154
|
// System message injection
|
|
134
155
|
system_message_injection: {
|
|
135
156
|
owasp_llm: 'LLM01:2025 - Prompt Injection',
|
|
136
157
|
nist_ai_600_1: 'MS-2.5 - Prompt Injection',
|
|
137
|
-
mitre_atlas: 'AML.T0051.000 - LLM Prompt Injection'
|
|
158
|
+
mitre_atlas: 'AML.T0051.000 - LLM Prompt Injection',
|
|
159
|
+
iso_42001: 'A.6.1.5 - AI System Security (Adversarial Input)'
|
|
138
160
|
},
|
|
139
161
|
// Conversation reset
|
|
140
162
|
conversation_reset: {
|
|
141
163
|
owasp_llm: 'LLM01:2025 - Prompt Injection',
|
|
142
164
|
nist_ai_600_1: 'MS-2.5 - Prompt Injection',
|
|
143
|
-
mitre_atlas: 'AML.T0051.000 - LLM Prompt Injection'
|
|
165
|
+
mitre_atlas: 'AML.T0051.000 - LLM Prompt Injection',
|
|
166
|
+
iso_42001: 'A.6.2.6 - Logging and Monitoring'
|
|
144
167
|
},
|
|
145
168
|
// Memory manipulation
|
|
146
169
|
memory_manipulation: {
|
|
147
170
|
owasp_llm: 'LLM01:2025 - Prompt Injection',
|
|
148
171
|
nist_ai_600_1: 'MS-2.5 - Prompt Injection',
|
|
149
|
-
mitre_atlas: 'AML.T0051.001 - LLM Prompt Injection: Indirect'
|
|
172
|
+
mitre_atlas: 'AML.T0051.001 - LLM Prompt Injection: Indirect',
|
|
173
|
+
iso_42001: 'A.6.2.6 - Logging and Monitoring'
|
|
150
174
|
},
|
|
151
175
|
// Capability probing
|
|
152
176
|
capability_probing: {
|
|
153
177
|
owasp_llm: 'LLM08:2025 - Excessive Agency',
|
|
154
178
|
nist_ai_600_1: 'GV-1.1 - Policies and Procedures',
|
|
155
|
-
mitre_atlas: 'AML.T0051.000 - LLM Prompt Injection'
|
|
179
|
+
mitre_atlas: 'AML.T0051.000 - LLM Prompt Injection',
|
|
180
|
+
iso_42001: 'A.6.1.2 - AI System Operational Procedures'
|
|
156
181
|
},
|
|
157
182
|
// Chain-of-thought manipulation
|
|
158
183
|
chain_of_thought_manipulation: {
|
|
159
184
|
owasp_llm: 'LLM01:2025 - Prompt Injection',
|
|
160
185
|
nist_ai_600_1: 'MS-2.5 - Prompt Injection',
|
|
161
|
-
mitre_atlas: 'AML.T0051.000 - LLM Prompt Injection'
|
|
186
|
+
mitre_atlas: 'AML.T0051.000 - LLM Prompt Injection',
|
|
187
|
+
iso_42001: 'A.6.1.5 - AI System Security (Adversarial Input)'
|
|
162
188
|
},
|
|
163
189
|
// Hypothetical scenario injection
|
|
164
190
|
hypothetical_scenario_injection: {
|
|
165
191
|
owasp_llm: 'LLM01:2025 - Prompt Injection',
|
|
166
192
|
nist_ai_600_1: 'MS-2.5 - Prompt Injection',
|
|
167
|
-
mitre_atlas: 'AML.T0051.000 - LLM Prompt Injection'
|
|
193
|
+
mitre_atlas: 'AML.T0051.000 - LLM Prompt Injection',
|
|
194
|
+
iso_42001: 'A.6.1.5 - AI System Security (Adversarial Input)'
|
|
168
195
|
},
|
|
169
196
|
// Ethical override
|
|
170
197
|
ethical_override: {
|
|
171
198
|
owasp_llm: 'LLM08:2025 - Excessive Agency',
|
|
172
199
|
nist_ai_600_1: 'GV-1.1 - Policies and Procedures',
|
|
173
|
-
mitre_atlas: 'AML.T0051.000 - LLM Prompt Injection'
|
|
200
|
+
mitre_atlas: 'AML.T0051.000 - LLM Prompt Injection',
|
|
201
|
+
iso_42001: 'A.2.2 - Responsible AI Policies'
|
|
174
202
|
},
|
|
175
203
|
// Output format manipulation
|
|
176
204
|
output_format_manipulation: {
|
|
177
205
|
owasp_llm: 'LLM01:2025 - Prompt Injection',
|
|
178
206
|
nist_ai_600_1: 'MS-2.5 - Prompt Injection',
|
|
179
|
-
mitre_atlas: 'AML.T0051.000 - LLM Prompt Injection'
|
|
207
|
+
mitre_atlas: 'AML.T0051.000 - LLM Prompt Injection',
|
|
208
|
+
iso_42001: 'A.6.1.2 - AI System Operational Procedures'
|
|
180
209
|
},
|
|
181
210
|
// Negative instruction
|
|
182
211
|
negative_instruction: {
|
|
183
212
|
owasp_llm: 'LLM01:2025 - Prompt Injection',
|
|
184
213
|
nist_ai_600_1: 'MS-2.5 - Prompt Injection',
|
|
185
|
-
mitre_atlas: 'AML.T0051.000 - LLM Prompt Injection'
|
|
214
|
+
mitre_atlas: 'AML.T0051.000 - LLM Prompt Injection',
|
|
215
|
+
iso_42001: 'A.6.1.2 - AI System Operational Procedures'
|
|
186
216
|
},
|
|
187
217
|
// Credential harvesting
|
|
188
218
|
credential_harvesting: {
|
|
189
219
|
owasp_llm: 'LLM02:2025 - Sensitive Information Disclosure',
|
|
190
220
|
nist_ai_600_1: 'MS-2.6 - Data Disclosure',
|
|
191
|
-
mitre_atlas: 'AML.T0048 - External Harms'
|
|
221
|
+
mitre_atlas: 'AML.T0048 - External Harms',
|
|
222
|
+
iso_42001: 'A.7.5 - Data Provenance / A.6.1.5 - AI System Security'
|
|
192
223
|
},
|
|
193
224
|
// Time-based triggers
|
|
194
225
|
time_based_triggers: {
|
|
195
226
|
owasp_llm: 'LLM01:2025 - Prompt Injection',
|
|
196
227
|
nist_ai_600_1: 'MS-2.5 - Prompt Injection',
|
|
197
|
-
mitre_atlas: 'AML.T0051.000 - LLM Prompt Injection'
|
|
228
|
+
mitre_atlas: 'AML.T0051.000 - LLM Prompt Injection',
|
|
229
|
+
iso_42001: 'A.6.2.6 - Logging and Monitoring'
|
|
198
230
|
},
|
|
199
231
|
// Code execution requests
|
|
200
232
|
code_execution_requests: {
|
|
201
233
|
owasp_llm: 'LLM08:2025 - Excessive Agency',
|
|
202
234
|
nist_ai_600_1: 'GV-1.1 - Policies and Procedures',
|
|
203
|
-
mitre_atlas: 'AML.T0048 - External Harms'
|
|
235
|
+
mitre_atlas: 'AML.T0048 - External Harms',
|
|
236
|
+
iso_42001: 'A.9.3 - Intended Use Boundaries'
|
|
204
237
|
},
|
|
205
238
|
// File system access
|
|
206
239
|
file_system_access: {
|
|
207
240
|
owasp_llm: 'LLM08:2025 - Excessive Agency',
|
|
208
241
|
nist_ai_600_1: 'GV-1.1 - Policies and Procedures',
|
|
209
|
-
mitre_atlas: 'AML.T0048 - External Harms'
|
|
242
|
+
mitre_atlas: 'AML.T0048 - External Harms',
|
|
243
|
+
iso_42001: 'A.9.3 - Intended Use Boundaries'
|
|
210
244
|
},
|
|
211
245
|
// Training data extraction
|
|
212
246
|
training_data_extraction: {
|
|
213
247
|
owasp_llm: 'LLM02:2025 - Sensitive Information Disclosure',
|
|
214
248
|
nist_ai_600_1: 'MS-2.6 - Data Disclosure',
|
|
215
|
-
mitre_atlas: 'AML.T0048 - External Harms'
|
|
249
|
+
mitre_atlas: 'AML.T0048 - External Harms',
|
|
250
|
+
iso_42001: 'A.7.5 - Data Provenance'
|
|
216
251
|
},
|
|
217
252
|
// Simulator mode
|
|
218
253
|
simulator_mode: {
|
|
219
254
|
owasp_llm: 'LLM01:2025 - Prompt Injection',
|
|
220
255
|
nist_ai_600_1: 'MS-2.5 - Prompt Injection',
|
|
221
|
-
mitre_atlas: 'AML.T0051.000 - LLM Prompt Injection'
|
|
256
|
+
mitre_atlas: 'AML.T0051.000 - LLM Prompt Injection',
|
|
257
|
+
iso_42001: 'A.9.3 - Intended Use Boundaries'
|
|
222
258
|
},
|
|
223
259
|
// Nested encoding
|
|
224
260
|
nested_encoding: {
|
|
225
261
|
owasp_llm: 'LLM01:2025 - Prompt Injection',
|
|
226
262
|
nist_ai_600_1: 'MS-2.5 - Prompt Injection',
|
|
227
|
-
mitre_atlas: 'AML.T0051.001 - LLM Prompt Injection: Indirect'
|
|
263
|
+
mitre_atlas: 'AML.T0051.001 - LLM Prompt Injection: Indirect',
|
|
264
|
+
iso_42001: 'A.7.4 - Data Preparation'
|
|
228
265
|
},
|
|
229
266
|
// Payload splitting
|
|
230
267
|
payload_splitting: {
|
|
231
268
|
owasp_llm: 'LLM01:2025 - Prompt Injection',
|
|
232
269
|
nist_ai_600_1: 'MS-2.5 - Prompt Injection',
|
|
233
|
-
mitre_atlas: 'AML.T0051.001 - LLM Prompt Injection: Indirect'
|
|
270
|
+
mitre_atlas: 'AML.T0051.001 - LLM Prompt Injection: Indirect',
|
|
271
|
+
iso_42001: 'A.7.4 - Data Preparation'
|
|
234
272
|
},
|
|
235
273
|
// CSS-based hiding
|
|
236
274
|
css_hiding: {
|
|
237
275
|
owasp_llm: 'LLM01:2025 - Prompt Injection',
|
|
238
276
|
nist_ai_600_1: 'MS-2.5 - Prompt Injection',
|
|
239
|
-
mitre_atlas: 'AML.T0051.001 - LLM Prompt Injection: Indirect'
|
|
277
|
+
mitre_atlas: 'AML.T0051.001 - LLM Prompt Injection: Indirect',
|
|
278
|
+
iso_42001: 'A.7.4 - Data Preparation'
|
|
240
279
|
},
|
|
241
280
|
// Authority impersonation
|
|
242
281
|
authority_impersonation: {
|
|
243
282
|
owasp_llm: 'LLM01:2025 - Prompt Injection',
|
|
244
283
|
nist_ai_600_1: 'MS-2.5 - Prompt Injection',
|
|
245
|
-
mitre_atlas: 'AML.T0051.000 - LLM Prompt Injection'
|
|
284
|
+
mitre_atlas: 'AML.T0051.000 - LLM Prompt Injection',
|
|
285
|
+
iso_42001: 'A.2.2 - Responsible AI Policies'
|
|
246
286
|
},
|
|
247
287
|
// Testing/debugging claims
|
|
248
288
|
testing_debugging_claims: {
|
|
249
289
|
owasp_llm: 'LLM01:2025 - Prompt Injection',
|
|
250
290
|
nist_ai_600_1: 'MS-2.5 - Prompt Injection',
|
|
251
|
-
mitre_atlas: 'AML.T0051.000 - LLM Prompt Injection'
|
|
291
|
+
mitre_atlas: 'AML.T0051.000 - LLM Prompt Injection',
|
|
292
|
+
iso_42001: 'A.6.1.2 - AI System Operational Procedures'
|
|
252
293
|
},
|
|
253
294
|
// Callback URL injection
|
|
254
295
|
callback_url_injection: {
|
|
255
296
|
owasp_llm: 'LLM02:2025 - Sensitive Information Disclosure',
|
|
256
297
|
nist_ai_600_1: 'MS-2.6 - Data Disclosure',
|
|
257
|
-
mitre_atlas: 'AML.T0048 - External Harms'
|
|
298
|
+
mitre_atlas: 'AML.T0048 - External Harms',
|
|
299
|
+
iso_42001: 'A.6.1.5 - AI System Security (Adversarial Input)'
|
|
258
300
|
},
|
|
259
301
|
// Whitespace steganography
|
|
260
302
|
whitespace_steganography: {
|
|
261
303
|
owasp_llm: 'LLM01:2025 - Prompt Injection',
|
|
262
304
|
nist_ai_600_1: 'MS-2.5 - Prompt Injection',
|
|
263
|
-
mitre_atlas: 'AML.T0051.001 - LLM Prompt Injection: Indirect'
|
|
305
|
+
mitre_atlas: 'AML.T0051.001 - LLM Prompt Injection: Indirect',
|
|
306
|
+
iso_42001: 'A.7.4 - Data Preparation'
|
|
264
307
|
},
|
|
265
308
|
// Comment injection
|
|
266
309
|
comment_injection: {
|
|
267
310
|
owasp_llm: 'LLM01:2025 - Prompt Injection',
|
|
268
311
|
nist_ai_600_1: 'MS-2.5 - Prompt Injection',
|
|
269
|
-
mitre_atlas: 'AML.T0051.001 - LLM Prompt Injection: Indirect'
|
|
312
|
+
mitre_atlas: 'AML.T0051.001 - LLM Prompt Injection: Indirect',
|
|
313
|
+
iso_42001: 'A.7.4 - Data Preparation'
|
|
270
314
|
}
|
|
271
315
|
};
|
|
272
316
|
/**
|
|
@@ -275,7 +319,8 @@ const FRAMEWORK_MAP = {
|
|
|
275
319
|
const DEFAULT_MAPPINGS = {
|
|
276
320
|
owasp_llm: 'LLM01:2025 - Prompt Injection',
|
|
277
321
|
nist_ai_600_1: 'MS-2.5 - Prompt Injection',
|
|
278
|
-
mitre_atlas: 'AML.T0051.000 - LLM Prompt Injection'
|
|
322
|
+
mitre_atlas: 'AML.T0051.000 - LLM Prompt Injection',
|
|
323
|
+
iso_42001: 'A.6.1.5 - AI System Security'
|
|
279
324
|
};
|
|
280
325
|
/**
|
|
281
326
|
* Get framework mappings for a pattern category
|
|
@@ -290,7 +335,8 @@ export function getSupportedFrameworks() {
|
|
|
290
335
|
return [
|
|
291
336
|
'OWASP LLM Top 10 (2025)',
|
|
292
337
|
'NIST AI 600-1 (Generative AI Profile)',
|
|
293
|
-
'MITRE ATLAS (Adversarial Threat Landscape)'
|
|
338
|
+
'MITRE ATLAS (Adversarial Threat Landscape)',
|
|
339
|
+
'ISO/IEC 42001:2023 (AI Management System)'
|
|
294
340
|
];
|
|
295
341
|
}
|
|
296
342
|
//# sourceMappingURL=framework-mapper.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"framework-mapper.js","sourceRoot":"","sources":["../../src/sanitizer/framework-mapper.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"framework-mapper.js","sourceRoot":"","sources":["../../src/sanitizer/framework-mapper.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AASH;;GAEG;AACH,MAAM,aAAa,GAAsC;IACvD,+BAA+B;IAC/B,4BAA4B,EAAE;QAC5B,SAAS,EAAE,+BAA+B;QAC1C,aAAa,EAAE,2BAA2B;QAC1C,WAAW,EAAE,sCAAsC;QACnD,SAAS,EAAE,kDAAkD;KAC9D;IAED,iBAAiB;IACjB,cAAc,EAAE;QACd,SAAS,EAAE,+BAA+B;QAC1C,aAAa,EAAE,2BAA2B;QAC1C,WAAW,EAAE,sCAAsC;QACnD,SAAS,EAAE,kDAAkD;KAC9D;IAED,2BAA2B;IAC3B,wBAAwB,EAAE;QACxB,SAAS,EAAE,+CAA+C;QAC1D,aAAa,EAAE,0BAA0B;QACzC,WAAW,EAAE,4BAA4B;QACzC,SAAS,EAAE,kDAAkD;KAC9D;IAED,uBAAuB;IACvB,oBAAoB,EAAE;QACpB,SAAS,EAAE,+BAA+B;QAC1C,aAAa,EAAE,kCAAkC;QACjD,WAAW,EAAE,sCAAsC;QACnD,SAAS,EAAE,kDAAkD;KAC9D;IAED,oBAAoB;IACpB,iBAAiB,EAAE;QACjB,SAAS,EAAE,+BAA+B;QAC1C,aAAa,EAAE,2BAA2B;QAC1C,WAAW,EAAE,gDAAgD;QAC7D,SAAS,EAAE,sBAAsB;KAClC;IAED,oBAAoB;IACpB,iBAAiB,EAAE;QACjB,SAAS,EAAE,+CAA+C;QAC1D,aAAa,EAAE,0BAA0B;QACzC,WAAW,EAAE,4BAA4B;QACzC,SAAS,EAAE,wDAAwD;KACpE;IAED,uBAAuB;IACvB,kBAAkB,EAAE;QAClB,SAAS,EAAE,+BAA+B;QAC1C,aAAa,EAAE,2BAA2B;QAC1C,WAAW,EAAE,gDAAgD;QAC7D,SAAS,EAAE,0BAA0B;KACtC;IAED,qBAAqB;IACrB,kBAAkB,EAAE;QAClB,SAAS,EAAE,+BAA+B;QAC1C,aAAa,EAAE,2BAA2B;QAC1C,WAAW,EAAE,gDAAgD;QAC7D,SAAS,EAAE,0BAA0B;KACtC;IAED,wBAAwB;IACxB,qBAAqB,EAAE;QACrB,SAAS,EAAE,+BAA+B;QAC1C,aAAa,EAAE,2BAA2B;QAC1C,WAAW,EAAE,gDAAgD;QAC7D,SAAS,EAAE,0BAA0B;KACtC;IAED,wBAAwB;IACxB,qBAAqB,EAAE;QACrB,SAAS,EAAE,+BAA+B;QAC1C,aAAa,EAAE,2BAA2B;QAC1C,WAAW,EAAE,gDAAgD;QAC7D,SAAS,EAAE,kDAAkD;KAC9D;IAED,qBAAqB;IACrB,kBAAkB,EAAE;QAClB,SAAS,EAAE,+BAA+B;QAC1C,aAAa,EAAE,2BAA2B;QAC1C,WAAW,EAAE,gDAAgD;QAC7D,SAAS,EAAE,kDAAkD;KAC9D;IAED,0BAA0B;IAC1B,uBAAuB,EAAE;QACvB,SAAS,EAAE,+BAA+B;QAC1C,aAAa,EAAE,2BAA2B;QAC1C,WAAW,EAAE,gDAAgD;QAC7D,SAAS,EAAE,kDAAkD;KAC9D;IAED,uBAAuB;IACvB,qBAAqB,EAAE;QACrB,SAAS,EAAE,+BAA+B;QAC1C,aAAa,EAAE,2BAA2B;QAC1C,WAAW,EAAE,gDAAgD;QAC7D,SAAS,EAAE,kDAAkD;KAC9D;IAED,qBAAqB;IACrB,0BAA0B,EAAE;QAC1B,SAAS,EAAE,+BAA+B;QAC1C,aAAa,EAAE,2BAA2B;QAC1C,WAAW,EAAE,sCAAsC;QACnD,SAAS,EAAE,mCAAmC;KAC/C;IAED,kCAAkC;IAClC,+BAA+B,EAAE;QAC/B,SAAS,EAAE,+BAA+B;QAC1C,aAAa,EAAE,2BAA2B;QAC1C,WAAW,EAAE,sCAAsC;QACnD,SAAS,EAAE,kDAAkD;KAC9D;IAED,6BAA6B;IAC7B,0BAA0B,EAAE;QAC1B,SAAS,EAAE,+BAA+B;QAC1C,aAAa,EAAE,2BAA2B;QAC1C,WAAW,EAAE,gDAAgD;QAC7D,SAAS,EAAE,0BAA0B;KACtC;IAED,2BAA2B;IAC3B,wBAAwB,EAAE;QACxB,SAAS,EAAE,+BAA+B;QAC1C,aAAa,EAAE,2BAA2B;QAC1C,WAAW,EAAE,gDAAgD;QAC7D,SAAS,EAAE,0BAA0B;KACtC;IAED,wBAAwB;IACxB,qBAAqB,EAAE;QACrB,SAAS,EAAE,+BAA+B;QAC1C,aAAa,EAAE,2BAA2B;QAC1C,WAAW,EAAE,gDAAgD;QAC7D,SAAS,EAAE,0BAA0B;KACtC;IAED,qBAAqB;IACrB,kBAAkB,EAAE;QAClB,SAAS,EAAE,+BAA+B;QAC1C,aAAa,EAAE,2BAA2B;QAC1C,WAAW,EAAE,sCAAsC;QACnD,SAAS,EAAE,kDAAkD;KAC9D;IAED,kBAAkB;IAClB,eAAe,EAAE;QACf,SAAS,EAAE,+BAA+B;QAC1C,aAAa,EAAE,2BAA2B;QAC1C,WAAW,EAAE,sCAAsC;QACnD,SAAS,EAAE,0BAA0B;KACtC;IAED,2BAA2B;IAC3B,wBAAwB,EAAE;QACxB,SAAS,EAAE,+BAA+B;QAC1C,aAAa,EAAE,2BAA2B;QAC1C,WAAW,EAAE,sCAAsC;QACnD,SAAS,EAAE,kDAAkD;KAC9D;IAED,qBAAqB;IACrB,kBAAkB,EAAE;QAClB,SAAS,EAAE,+BAA+B;QAC1C,aAAa,EAAE,2BAA2B;QAC1C,WAAW,EAAE,sCAAsC;QACnD,SAAS,EAAE,kCAAkC;KAC9C;IAED,sBAAsB;IACtB,mBAAmB,EAAE;QACnB,SAAS,EAAE,+BAA+B;QAC1C,aAAa,EAAE,2BAA2B;QAC1C,WAAW,EAAE,gDAAgD;QAC7D,SAAS,EAAE,kCAAkC;KAC9C;IAED,qBAAqB;IACrB,kBAAkB,EAAE;QAClB,SAAS,EAAE,+BAA+B;QAC1C,aAAa,EAAE,kCAAkC;QACjD,WAAW,EAAE,sCAAsC;QACnD,SAAS,EAAE,4CAA4C;KACxD;IAED,gCAAgC;IAChC,6BAA6B,EAAE;QAC7B,SAAS,EAAE,+BAA+B;QAC1C,aAAa,EAAE,2BAA2B;QAC1C,WAAW,EAAE,sCAAsC;QACnD,SAAS,EAAE,kDAAkD;KAC9D;IAED,kCAAkC;IAClC,+BAA+B,EAAE;QAC/B,SAAS,EAAE,+BAA+B;QAC1C,aAAa,EAAE,2BAA2B;QAC1C,WAAW,EAAE,sCAAsC;QACnD,SAAS,EAAE,kDAAkD;KAC9D;IAED,mBAAmB;IACnB,gBAAgB,EAAE;QAChB,SAAS,EAAE,+BAA+B;QAC1C,aAAa,EAAE,kCAAkC;QACjD,WAAW,EAAE,sCAAsC;QACnD,SAAS,EAAE,iCAAiC;KAC7C;IAED,6BAA6B;IAC7B,0BAA0B,EAAE;QAC1B,SAAS,EAAE,+BAA+B;QAC1C,aAAa,EAAE,2BAA2B;QAC1C,WAAW,EAAE,sCAAsC;QACnD,SAAS,EAAE,4CAA4C;KACxD;IAED,uBAAuB;IACvB,oBAAoB,EAAE;QACpB,SAAS,EAAE,+BAA+B;QAC1C,aAAa,EAAE,2BAA2B;QAC1C,WAAW,EAAE,sCAAsC;QACnD,SAAS,EAAE,4CAA4C;KACxD;IAED,wBAAwB;IACxB,qBAAqB,EAAE;QACrB,SAAS,EAAE,+CAA+C;QAC1D,aAAa,EAAE,0BAA0B;QACzC,WAAW,EAAE,4BAA4B;QACzC,SAAS,EAAE,wDAAwD;KACpE;IAED,sBAAsB;IACtB,mBAAmB,EAAE;QACnB,SAAS,EAAE,+BAA+B;QAC1C,aAAa,EAAE,2BAA2B;QAC1C,WAAW,EAAE,sCAAsC;QACnD,SAAS,EAAE,kCAAkC;KAC9C;IAED,0BAA0B;IAC1B,uBAAuB,EAAE;QACvB,SAAS,EAAE,+BAA+B;QAC1C,aAAa,EAAE,kCAAkC;QACjD,WAAW,EAAE,4BAA4B;QACzC,SAAS,EAAE,iCAAiC;KAC7C;IAED,qBAAqB;IACrB,kBAAkB,EAAE;QAClB,SAAS,EAAE,+BAA+B;QAC1C,aAAa,EAAE,kCAAkC;QACjD,WAAW,EAAE,4BAA4B;QACzC,SAAS,EAAE,iCAAiC;KAC7C;IAED,2BAA2B;IAC3B,wBAAwB,EAAE;QACxB,SAAS,EAAE,+CAA+C;QAC1D,aAAa,EAAE,0BAA0B;QACzC,WAAW,EAAE,4BAA4B;QACzC,SAAS,EAAE,yBAAyB;KACrC;IAED,iBAAiB;IACjB,cAAc,EAAE;QACd,SAAS,EAAE,+BAA+B;QAC1C,aAAa,EAAE,2BAA2B;QAC1C,WAAW,EAAE,sCAAsC;QACnD,SAAS,EAAE,iCAAiC;KAC7C;IAED,kBAAkB;IAClB,eAAe,EAAE;QACf,SAAS,EAAE,+BAA+B;QAC1C,aAAa,EAAE,2BAA2B;QAC1C,WAAW,EAAE,gDAAgD;QAC7D,SAAS,EAAE,0BAA0B;KACtC;IAED,oBAAoB;IACpB,iBAAiB,EAAE;QACjB,SAAS,EAAE,+BAA+B;QAC1C,aAAa,EAAE,2BAA2B;QAC1C,WAAW,EAAE,gDAAgD;QAC7D,SAAS,EAAE,0BAA0B;KACtC;IAED,mBAAmB;IACnB,UAAU,EAAE;QACV,SAAS,EAAE,+BAA+B;QAC1C,aAAa,EAAE,2BAA2B;QAC1C,WAAW,EAAE,gDAAgD;QAC7D,SAAS,EAAE,0BAA0B;KACtC;IAED,0BAA0B;IAC1B,uBAAuB,EAAE;QACvB,SAAS,EAAE,+BAA+B;QAC1C,aAAa,EAAE,2BAA2B;QAC1C,WAAW,EAAE,sCAAsC;QACnD,SAAS,EAAE,iCAAiC;KAC7C;IAED,2BAA2B;IAC3B,wBAAwB,EAAE;QACxB,SAAS,EAAE,+BAA+B;QAC1C,aAAa,EAAE,2BAA2B;QAC1C,WAAW,EAAE,sCAAsC;QACnD,SAAS,EAAE,4CAA4C;KACxD;IAED,yBAAyB;IACzB,sBAAsB,EAAE;QACtB,SAAS,EAAE,+CAA+C;QAC1D,aAAa,EAAE,0BAA0B;QACzC,WAAW,EAAE,4BAA4B;QACzC,SAAS,EAAE,kDAAkD;KAC9D;IAED,2BAA2B;IAC3B,wBAAwB,EAAE;QACxB,SAAS,EAAE,+BAA+B;QAC1C,aAAa,EAAE,2BAA2B;QAC1C,WAAW,EAAE,gDAAgD;QAC7D,SAAS,EAAE,0BAA0B;KACtC;IAED,oBAAoB;IACpB,iBAAiB,EAAE;QACjB,SAAS,EAAE,+BAA+B;QAC1C,aAAa,EAAE,2BAA2B;QAC1C,WAAW,EAAE,gDAAgD;QAC7D,SAAS,EAAE,0BAA0B;KACtC;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,gBAAgB,GAAsB;IAC1C,SAAS,EAAE,+BAA+B;IAC1C,aAAa,EAAE,2BAA2B;IAC1C,WAAW,EAAE,sCAAsC;IACnD,SAAS,EAAE,8BAA8B;CAC1C,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,eAAuB;IAC1D,OAAO,aAAa,CAAC,eAAe,CAAC,IAAI,gBAAgB,CAAC;AAC5D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB;IACpC,OAAO;QACL,yBAAyB;QACzB,uCAAuC;QACvC,4CAA4C;QAC5C,2CAA2C;KAC5C,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HITL (Human-in-the-Loop) Gate
|
|
3
|
+
*
|
|
4
|
+
* Determines when to pause tool execution for user confirmation
|
|
5
|
+
* based on threat severity. Only CRITICAL threats trigger elicitation.
|
|
6
|
+
*
|
|
7
|
+
* Design:
|
|
8
|
+
* - HIGH/MEDIUM/LOW threats → silent sanitization (business as usual)
|
|
9
|
+
* - CRITICAL threats → pause execution, user confirmation required
|
|
10
|
+
*
|
|
11
|
+
* Security model: Sanitization is the security gate. HITL is UX.
|
|
12
|
+
* Content is ALWAYS sanitized before reaching the LLM, whether or not
|
|
13
|
+
* the user accepts the elicitation prompt.
|
|
14
|
+
*/
|
|
15
|
+
import type { ThreatReport } from './threat-reporter.js';
|
|
16
|
+
/**
|
|
17
|
+
* Determines whether to trigger HITL elicitation
|
|
18
|
+
*
|
|
19
|
+
* Returns true ONLY when:
|
|
20
|
+
* - threatReport is not null
|
|
21
|
+
* - threatReport.overall_severity === 'CRITICAL'
|
|
22
|
+
* - threatReport.total_findings > 0
|
|
23
|
+
*
|
|
24
|
+
* @param threatReport The threat report from sanitization
|
|
25
|
+
* @returns true if elicitation should be triggered
|
|
26
|
+
*/
|
|
27
|
+
export declare function shouldElicit(threatReport: ThreatReport | null): boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Builds a user-facing elicitation message for CRITICAL threats
|
|
30
|
+
*
|
|
31
|
+
* Format:
|
|
32
|
+
* ⚠️ Visus blocked a CRITICAL threat on this page.
|
|
33
|
+
*
|
|
34
|
+
* {total_findings} injection attempt(s) detected on:
|
|
35
|
+
* {url}
|
|
36
|
+
*
|
|
37
|
+
* Highest severity finding: {top_category}
|
|
38
|
+
* ({top_owasp} | {top_mitre})
|
|
39
|
+
*
|
|
40
|
+
* Content has been sanitized. Proceed with clean version?
|
|
41
|
+
*
|
|
42
|
+
* @param threatReport The threat report with CRITICAL severity
|
|
43
|
+
* @param url The source URL
|
|
44
|
+
* @returns A clear, concise message under 300 characters
|
|
45
|
+
*/
|
|
46
|
+
export declare function buildElicitMessage(threatReport: ThreatReport, url: string): string;
|
|
47
|
+
/**
|
|
48
|
+
* Elicitation schema for user confirmation
|
|
49
|
+
*
|
|
50
|
+
* CRITICAL: Must be flat primitive properties only (no nested objects, no arrays)
|
|
51
|
+
* per MCP elicitation specification.
|
|
52
|
+
*/
|
|
53
|
+
export declare const ElicitSchema: {
|
|
54
|
+
readonly type: "object";
|
|
55
|
+
readonly properties: {
|
|
56
|
+
readonly proceed: {
|
|
57
|
+
readonly type: "boolean";
|
|
58
|
+
readonly title: "Proceed with sanitized content";
|
|
59
|
+
readonly description: "Content has been cleaned. View sanitized version?";
|
|
60
|
+
};
|
|
61
|
+
readonly view_report: {
|
|
62
|
+
readonly type: "boolean";
|
|
63
|
+
readonly title: "Include threat report in response";
|
|
64
|
+
readonly description: "Attach the full NIST/OWASP/MITRE threat report?";
|
|
65
|
+
};
|
|
66
|
+
};
|
|
67
|
+
readonly required: readonly ["proceed"];
|
|
68
|
+
};
|
|
69
|
+
//# sourceMappingURL=hitl-gate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hitl-gate.d.ts","sourceRoot":"","sources":["../../src/sanitizer/hitl-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEzD;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,YAAY,EAAE,YAAY,GAAG,IAAI,GAAG,OAAO,CASvE;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CA8BlF;AAED;;;;;GAKG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;CAef,CAAC"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HITL (Human-in-the-Loop) Gate
|
|
3
|
+
*
|
|
4
|
+
* Determines when to pause tool execution for user confirmation
|
|
5
|
+
* based on threat severity. Only CRITICAL threats trigger elicitation.
|
|
6
|
+
*
|
|
7
|
+
* Design:
|
|
8
|
+
* - HIGH/MEDIUM/LOW threats → silent sanitization (business as usual)
|
|
9
|
+
* - CRITICAL threats → pause execution, user confirmation required
|
|
10
|
+
*
|
|
11
|
+
* Security model: Sanitization is the security gate. HITL is UX.
|
|
12
|
+
* Content is ALWAYS sanitized before reaching the LLM, whether or not
|
|
13
|
+
* the user accepts the elicitation prompt.
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* Determines whether to trigger HITL elicitation
|
|
17
|
+
*
|
|
18
|
+
* Returns true ONLY when:
|
|
19
|
+
* - threatReport is not null
|
|
20
|
+
* - threatReport.overall_severity === 'CRITICAL'
|
|
21
|
+
* - threatReport.total_findings > 0
|
|
22
|
+
*
|
|
23
|
+
* @param threatReport The threat report from sanitization
|
|
24
|
+
* @returns true if elicitation should be triggered
|
|
25
|
+
*/
|
|
26
|
+
export function shouldElicit(threatReport) {
|
|
27
|
+
if (!threatReport) {
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
return (threatReport.overall_severity === 'CRITICAL' &&
|
|
31
|
+
threatReport.total_findings > 0);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Builds a user-facing elicitation message for CRITICAL threats
|
|
35
|
+
*
|
|
36
|
+
* Format:
|
|
37
|
+
* ⚠️ Visus blocked a CRITICAL threat on this page.
|
|
38
|
+
*
|
|
39
|
+
* {total_findings} injection attempt(s) detected on:
|
|
40
|
+
* {url}
|
|
41
|
+
*
|
|
42
|
+
* Highest severity finding: {top_category}
|
|
43
|
+
* ({top_owasp} | {top_mitre})
|
|
44
|
+
*
|
|
45
|
+
* Content has been sanitized. Proceed with clean version?
|
|
46
|
+
*
|
|
47
|
+
* @param threatReport The threat report with CRITICAL severity
|
|
48
|
+
* @param url The source URL
|
|
49
|
+
* @returns A clear, concise message under 300 characters
|
|
50
|
+
*/
|
|
51
|
+
export function buildElicitMessage(threatReport, url) {
|
|
52
|
+
// Find the highest-confidence CRITICAL finding
|
|
53
|
+
const findings = threatReport.findings_toon
|
|
54
|
+
.split('\n')
|
|
55
|
+
.slice(1) // Skip header
|
|
56
|
+
.filter(line => line.trim().length > 0);
|
|
57
|
+
let topCategory = 'unknown';
|
|
58
|
+
let topOwasp = 'N/A';
|
|
59
|
+
let topMitre = 'N/A';
|
|
60
|
+
if (findings.length > 0) {
|
|
61
|
+
// Parse first finding (highest confidence)
|
|
62
|
+
const parts = findings[0].split(',');
|
|
63
|
+
if (parts.length >= 8) {
|
|
64
|
+
topCategory = parts[2]; // category field
|
|
65
|
+
topOwasp = parts[5].split(' - ')[0]; // owasp_llm field (short form)
|
|
66
|
+
topMitre = parts[7].split(' - ')[0]; // mitre_atlas field (short form)
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return `⚠️ Visus blocked a CRITICAL threat on this page.
|
|
70
|
+
|
|
71
|
+
${threatReport.total_findings} injection attempt(s) detected on:
|
|
72
|
+
${url}
|
|
73
|
+
|
|
74
|
+
Highest severity finding: ${topCategory}
|
|
75
|
+
(${topOwasp} | ${topMitre})
|
|
76
|
+
|
|
77
|
+
Content has been sanitized. Proceed with clean version?`;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Elicitation schema for user confirmation
|
|
81
|
+
*
|
|
82
|
+
* CRITICAL: Must be flat primitive properties only (no nested objects, no arrays)
|
|
83
|
+
* per MCP elicitation specification.
|
|
84
|
+
*/
|
|
85
|
+
export const ElicitSchema = {
|
|
86
|
+
type: 'object',
|
|
87
|
+
properties: {
|
|
88
|
+
proceed: {
|
|
89
|
+
type: 'boolean',
|
|
90
|
+
title: 'Proceed with sanitized content',
|
|
91
|
+
description: 'Content has been cleaned. View sanitized version?'
|
|
92
|
+
},
|
|
93
|
+
view_report: {
|
|
94
|
+
type: 'boolean',
|
|
95
|
+
title: 'Include threat report in response',
|
|
96
|
+
description: 'Attach the full NIST/OWASP/MITRE threat report?'
|
|
97
|
+
}
|
|
98
|
+
},
|
|
99
|
+
required: ['proceed']
|
|
100
|
+
};
|
|
101
|
+
//# sourceMappingURL=hitl-gate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hitl-gate.js","sourceRoot":"","sources":["../../src/sanitizer/hitl-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH;;;;;;;;;;GAUG;AACH,MAAM,UAAU,YAAY,CAAC,YAAiC;IAC5D,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,CACL,YAAY,CAAC,gBAAgB,KAAK,UAAU;QAC5C,YAAY,CAAC,cAAc,GAAG,CAAC,CAChC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,kBAAkB,CAAC,YAA0B,EAAE,GAAW;IACxE,+CAA+C;IAC/C,MAAM,QAAQ,GAAG,YAAY,CAAC,aAAa;SACxC,KAAK,CAAC,IAAI,CAAC;SACX,KAAK,CAAC,CAAC,CAAC,CAAC,cAAc;SACvB,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAE1C,IAAI,WAAW,GAAG,SAAS,CAAC;IAC5B,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,QAAQ,GAAG,KAAK,CAAC;IAErB,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,2CAA2C;QAC3C,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YACtB,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,iBAAiB;YACzC,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,+BAA+B;YACpE,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,iCAAiC;QACxE,CAAC;IACH,CAAC;IAED,OAAO;;EAEP,YAAY,CAAC,cAAc;EAC3B,GAAG;;4BAEuB,WAAW;GACpC,QAAQ,MAAM,QAAQ;;wDAE+B,CAAC;AACzD,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,OAAO,EAAE;YACP,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,gCAAgC;YACvC,WAAW,EAAE,mDAAmD;SACjE;QACD,WAAW,EAAE;YACX,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,mCAAmC;YAC1C,WAAW,EAAE,iDAAiD;SAC/D;KACF;IACD,QAAQ,EAAE,CAAC,SAAS,CAAC;CACb,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"threat-reporter.d.ts","sourceRoot":"","sources":["../../src/sanitizer/threat-reporter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAKL,KAAK,QAAQ,EACb,KAAK,eAAe,EAErB,MAAM,0BAA0B,CAAC;AAGlC;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,QAAQ,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,eAAe,CAAC;IAClC,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACtC,YAAY,EAAE,MAAM,CAAC;IACrB,oBAAoB,EAAE,OAAO,CAAC;IAC9B,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sBAAsB,CAAC,EAAE;QACvB,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;CACH;
|
|
1
|
+
{"version":3,"file":"threat-reporter.d.ts","sourceRoot":"","sources":["../../src/sanitizer/threat-reporter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAKL,KAAK,QAAQ,EACb,KAAK,eAAe,EAErB,MAAM,0BAA0B,CAAC;AAGlC;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,QAAQ,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,eAAe,CAAC;IAClC,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACtC,YAAY,EAAE,MAAM,CAAC;IACrB,oBAAoB,EAAE,OAAO,CAAC;IAC9B,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sBAAsB,CAAC,EAAE;QACvB,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;CACH;AAsID;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,iBAAiB,GAAG,YAAY,GAAG,IAAI,CAsDlF"}
|
|
@@ -44,6 +44,7 @@ function buildFindings(patternsDetected) {
|
|
|
44
44
|
owasp_llm: frameworks.owasp_llm,
|
|
45
45
|
nist_ai_600_1: frameworks.nist_ai_600_1,
|
|
46
46
|
mitre_atlas: frameworks.mitre_atlas,
|
|
47
|
+
iso_42001: frameworks.iso_42001,
|
|
47
48
|
remediation: `Content sanitized. ${category.replace(/_/g, ' ')} removed.`
|
|
48
49
|
};
|
|
49
50
|
});
|
|
@@ -62,8 +63,8 @@ function generateToonFindings(findings) {
|
|
|
62
63
|
* Fallback manual TOON format generation
|
|
63
64
|
*/
|
|
64
65
|
function generateManualToonFormat(findings) {
|
|
65
|
-
const header = `findings[${findings.length}]{id,pattern_id,category,severity,confidence,owasp_llm,nist_ai_600_1,mitre_atlas,remediation}:`;
|
|
66
|
-
const rows = findings.map(f => `${f.id},${f.pattern_id},${f.category},${f.severity},${f.confidence},${f.owasp_llm},${f.nist_ai_600_1},${f.mitre_atlas},${f.remediation}`);
|
|
66
|
+
const header = `findings[${findings.length}]{id,pattern_id,category,severity,confidence,owasp_llm,nist_ai_600_1,mitre_atlas,iso_42001,remediation}:`;
|
|
67
|
+
const rows = findings.map(f => `${f.id},${f.pattern_id},${f.category},${f.severity},${f.confidence},${f.owasp_llm},${f.nist_ai_600_1},${f.mitre_atlas},${f.iso_42001},${f.remediation}`);
|
|
67
68
|
return `${header}\n${rows.join('\n')}`;
|
|
68
69
|
}
|
|
69
70
|
/**
|
|
@@ -76,7 +77,7 @@ function generateMarkdownReport(findings, overallSeverity, bySeverity, piiRedact
|
|
|
76
77
|
markdown += `**Generated:** ${timestamp}\n`;
|
|
77
78
|
markdown += `**Source:** ${sourceUrl}\n`;
|
|
78
79
|
markdown += `**Overall Severity:** ${overallSeverity}\n`;
|
|
79
|
-
markdown += `**Framework:** OWASP LLM Top 10 | NIST AI 600-1 | MITRE ATLAS\n\n`;
|
|
80
|
+
markdown += `**Framework:** OWASP LLM Top 10 | NIST AI 600-1 | MITRE ATLAS | ISO/IEC 42001\n\n`;
|
|
80
81
|
// Findings Summary
|
|
81
82
|
markdown += '### Findings Summary\n';
|
|
82
83
|
markdown += '| Severity | Count |\n';
|
|
@@ -88,13 +89,14 @@ function generateMarkdownReport(findings, overallSeverity, bySeverity, piiRedact
|
|
|
88
89
|
// Findings Detail (only if we have findings)
|
|
89
90
|
if (findings.length > 0) {
|
|
90
91
|
markdown += '### Findings Detail\n';
|
|
91
|
-
markdown += '| # | Category | Severity | Confidence | OWASP | MITRE |\n';
|
|
92
|
-
markdown += '
|
|
92
|
+
markdown += '| # | Category | Severity | Confidence | OWASP | MITRE | ISO 42001 |\n';
|
|
93
|
+
markdown += '|---|---|---|---|---|---|---|\n';
|
|
93
94
|
for (const finding of findings.slice(0, 10)) { // Limit to first 10 for readability
|
|
94
95
|
const confidencePct = Math.round(finding.confidence * 100);
|
|
95
96
|
const owaspShort = finding.owasp_llm.split(' - ')[0]; // e.g., "LLM01:2025"
|
|
96
97
|
const mitreShort = finding.mitre_atlas.split(' - ')[0]; // e.g., "AML.T0051.000"
|
|
97
|
-
|
|
98
|
+
const isoShort = finding.iso_42001.split(' - ')[0]; // e.g., "A.6.1.5"
|
|
99
|
+
markdown += `| ${finding.id} | ${finding.category} | ${finding.severity} | ${confidencePct}% | ${owaspShort} | ${mitreShort} | ${isoShort} |\n`;
|
|
98
100
|
}
|
|
99
101
|
if (findings.length > 10) {
|
|
100
102
|
markdown += `\n*...and ${findings.length - 10} more findings*\n`;
|
|
@@ -151,7 +153,8 @@ export function generateThreatReport(input) {
|
|
|
151
153
|
frameworks: [
|
|
152
154
|
'OWASP LLM Top 10',
|
|
153
155
|
'NIST AI 600-1',
|
|
154
|
-
'MITRE ATLAS'
|
|
156
|
+
'MITRE ATLAS',
|
|
157
|
+
'ISO/IEC 42001'
|
|
155
158
|
],
|
|
156
159
|
findings_toon: toonFindings,
|
|
157
160
|
report_markdown: markdownReport
|