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.
Files changed (147) hide show
  1. package/.claude/settings.local.json +42 -1
  2. package/.github/ISSUE_TEMPLATE/bug_report.md +47 -0
  3. package/.github/ISSUE_TEMPLATE/false_positive.md +43 -0
  4. package/.github/ISSUE_TEMPLATE/new_pattern.md +49 -0
  5. package/.github/ISSUE_TEMPLATE/security_report.md +31 -0
  6. package/.github/PULL_REQUEST_TEMPLATE.md +39 -0
  7. package/.mcpregistry_github_token +1 -0
  8. package/.mcpregistry_registry_token +1 -0
  9. package/CLAUDE.md +197 -0
  10. package/CONTRIBUTING.md +329 -0
  11. package/README.md +111 -45
  12. package/STATUS.md +167 -29
  13. package/SUBMISSION.md +66 -0
  14. package/TROUBLESHOOT-COGNITO-AUTH-20260324-2029.md +415 -0
  15. package/TROUBLESHOOT-COGNITO-JWT-20260324.md +592 -0
  16. package/dist/browser/playwright-renderer.d.ts.map +1 -1
  17. package/dist/browser/playwright-renderer.js +71 -51
  18. package/dist/browser/playwright-renderer.js.map +1 -1
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +49 -6
  21. package/dist/index.js.map +1 -1
  22. package/dist/sanitizer/elicit-runner.d.ts +48 -0
  23. package/dist/sanitizer/elicit-runner.d.ts.map +1 -0
  24. package/dist/sanitizer/elicit-runner.js +100 -0
  25. package/dist/sanitizer/elicit-runner.js.map +1 -0
  26. package/dist/sanitizer/framework-mapper.d.ts +2 -0
  27. package/dist/sanitizer/framework-mapper.d.ts.map +1 -1
  28. package/dist/sanitizer/framework-mapper.js +91 -45
  29. package/dist/sanitizer/framework-mapper.js.map +1 -1
  30. package/dist/sanitizer/hitl-gate.d.ts +69 -0
  31. package/dist/sanitizer/hitl-gate.d.ts.map +1 -0
  32. package/dist/sanitizer/hitl-gate.js +101 -0
  33. package/dist/sanitizer/hitl-gate.js.map +1 -0
  34. package/dist/sanitizer/threat-reporter.d.ts +1 -0
  35. package/dist/sanitizer/threat-reporter.d.ts.map +1 -1
  36. package/dist/sanitizer/threat-reporter.js +10 -7
  37. package/dist/sanitizer/threat-reporter.js.map +1 -1
  38. package/infrastructure/stack.ts +1 -0
  39. package/lambda-deploy/index.js +81512 -0
  40. package/lambda-deploy/index.js.map +7 -0
  41. package/lambda-package/browser/__mocks__/playwright-renderer.d.ts +25 -0
  42. package/lambda-package/browser/__mocks__/playwright-renderer.d.ts.map +1 -0
  43. package/lambda-package/browser/__mocks__/playwright-renderer.js +119 -0
  44. package/lambda-package/browser/__mocks__/playwright-renderer.js.map +1 -0
  45. package/lambda-package/browser/playwright-renderer.d.ts +40 -0
  46. package/lambda-package/browser/playwright-renderer.d.ts.map +1 -0
  47. package/lambda-package/browser/playwright-renderer.js +214 -0
  48. package/lambda-package/browser/playwright-renderer.js.map +1 -0
  49. package/lambda-package/browser/reader.d.ts +31 -0
  50. package/lambda-package/browser/reader.d.ts.map +1 -0
  51. package/lambda-package/browser/reader.js +98 -0
  52. package/lambda-package/browser/reader.js.map +1 -0
  53. package/lambda-package/index.d.ts +18 -0
  54. package/lambda-package/index.d.ts.map +1 -0
  55. package/lambda-package/index.js +238 -0
  56. package/lambda-package/index.js.map +1 -0
  57. package/lambda-package/lambda-handler.d.ts +28 -0
  58. package/lambda-package/lambda-handler.d.ts.map +1 -0
  59. package/lambda-package/lambda-handler.js +257 -0
  60. package/lambda-package/lambda-handler.js.map +1 -0
  61. package/lambda-package/package-lock.json +7435 -0
  62. package/lambda-package/package.json +74 -0
  63. package/lambda-package/runtime.d.ts +50 -0
  64. package/lambda-package/runtime.d.ts.map +1 -0
  65. package/lambda-package/runtime.js +86 -0
  66. package/lambda-package/runtime.js.map +1 -0
  67. package/lambda-package/sanitizer/elicit-runner.d.ts +48 -0
  68. package/lambda-package/sanitizer/elicit-runner.d.ts.map +1 -0
  69. package/lambda-package/sanitizer/elicit-runner.js +100 -0
  70. package/lambda-package/sanitizer/elicit-runner.js.map +1 -0
  71. package/lambda-package/sanitizer/framework-mapper.d.ts +24 -0
  72. package/lambda-package/sanitizer/framework-mapper.d.ts.map +1 -0
  73. package/lambda-package/sanitizer/framework-mapper.js +342 -0
  74. package/lambda-package/sanitizer/framework-mapper.js.map +1 -0
  75. package/lambda-package/sanitizer/hitl-gate.d.ts +69 -0
  76. package/lambda-package/sanitizer/hitl-gate.d.ts.map +1 -0
  77. package/lambda-package/sanitizer/hitl-gate.js +101 -0
  78. package/lambda-package/sanitizer/hitl-gate.js.map +1 -0
  79. package/lambda-package/sanitizer/index.d.ts +63 -0
  80. package/lambda-package/sanitizer/index.d.ts.map +1 -0
  81. package/lambda-package/sanitizer/index.js +105 -0
  82. package/lambda-package/sanitizer/index.js.map +1 -0
  83. package/lambda-package/sanitizer/injection-detector.d.ts +34 -0
  84. package/lambda-package/sanitizer/injection-detector.d.ts.map +1 -0
  85. package/lambda-package/sanitizer/injection-detector.js +89 -0
  86. package/lambda-package/sanitizer/injection-detector.js.map +1 -0
  87. package/lambda-package/sanitizer/patterns.d.ts +30 -0
  88. package/lambda-package/sanitizer/patterns.d.ts.map +1 -0
  89. package/lambda-package/sanitizer/patterns.js +372 -0
  90. package/lambda-package/sanitizer/patterns.js.map +1 -0
  91. package/lambda-package/sanitizer/pii-allowlist.d.ts +49 -0
  92. package/lambda-package/sanitizer/pii-allowlist.d.ts.map +1 -0
  93. package/lambda-package/sanitizer/pii-allowlist.js +231 -0
  94. package/lambda-package/sanitizer/pii-allowlist.js.map +1 -0
  95. package/lambda-package/sanitizer/pii-redactor.d.ts +41 -0
  96. package/lambda-package/sanitizer/pii-redactor.d.ts.map +1 -0
  97. package/lambda-package/sanitizer/pii-redactor.js +213 -0
  98. package/lambda-package/sanitizer/pii-redactor.js.map +1 -0
  99. package/lambda-package/sanitizer/severity-classifier.d.ts +33 -0
  100. package/lambda-package/sanitizer/severity-classifier.d.ts.map +1 -0
  101. package/lambda-package/sanitizer/severity-classifier.js +113 -0
  102. package/lambda-package/sanitizer/severity-classifier.js.map +1 -0
  103. package/lambda-package/sanitizer/threat-reporter.d.ts +66 -0
  104. package/lambda-package/sanitizer/threat-reporter.d.ts.map +1 -0
  105. package/lambda-package/sanitizer/threat-reporter.js +163 -0
  106. package/lambda-package/sanitizer/threat-reporter.js.map +1 -0
  107. package/lambda-package/tools/fetch-structured.d.ts +51 -0
  108. package/lambda-package/tools/fetch-structured.d.ts.map +1 -0
  109. package/lambda-package/tools/fetch-structured.js +237 -0
  110. package/lambda-package/tools/fetch-structured.js.map +1 -0
  111. package/lambda-package/tools/fetch.d.ts +49 -0
  112. package/lambda-package/tools/fetch.d.ts.map +1 -0
  113. package/lambda-package/tools/fetch.js +131 -0
  114. package/lambda-package/tools/fetch.js.map +1 -0
  115. package/lambda-package/tools/read.d.ts +51 -0
  116. package/lambda-package/tools/read.d.ts.map +1 -0
  117. package/lambda-package/tools/read.js +127 -0
  118. package/lambda-package/tools/read.js.map +1 -0
  119. package/lambda-package/tools/search.d.ts +45 -0
  120. package/lambda-package/tools/search.d.ts.map +1 -0
  121. package/lambda-package/tools/search.js +220 -0
  122. package/lambda-package/tools/search.js.map +1 -0
  123. package/lambda-package/types.d.ts +167 -0
  124. package/lambda-package/types.d.ts.map +1 -0
  125. package/lambda-package/types.js +16 -0
  126. package/lambda-package/types.js.map +1 -0
  127. package/lambda-package/utils/format-converter.d.ts +39 -0
  128. package/lambda-package/utils/format-converter.d.ts.map +1 -0
  129. package/lambda-package/utils/format-converter.js +191 -0
  130. package/lambda-package/utils/format-converter.js.map +1 -0
  131. package/lambda-package/utils/truncate.d.ts +26 -0
  132. package/lambda-package/utils/truncate.d.ts.map +1 -0
  133. package/lambda-package/utils/truncate.js +54 -0
  134. package/lambda-package/utils/truncate.js.map +1 -0
  135. package/lambda.zip +0 -0
  136. package/mcp.json +44 -0
  137. package/package.json +9 -8
  138. package/server.json +43 -0
  139. package/src/browser/playwright-renderer.ts +74 -51
  140. package/src/index.ts +78 -6
  141. package/src/sanitizer/elicit-runner.ts +125 -0
  142. package/src/sanitizer/framework-mapper.ts +92 -45
  143. package/src/sanitizer/hitl-gate.ts +111 -0
  144. package/src/sanitizer/threat-reporter.ts +11 -7
  145. package/tests/elicit-runner.test.ts +232 -0
  146. package/tests/hitl-gate.test.ts +267 -0
  147. 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":"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"}
1
+ {"version":3,"file":"framework-mapper.js","sourceRoot":"","sources":["../../src/sanitizer/framework-mapper.ts"],"names":[],"mappings":"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"}
@@ -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"}
@@ -24,6 +24,7 @@ export interface ThreatFinding {
24
24
  owasp_llm: string;
25
25
  nist_ai_600_1: string;
26
26
  mitre_atlas: string;
27
+ iso_42001: string;
27
28
  remediation: string;
28
29
  }
29
30
  /**
@@ -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;AAoID;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,iBAAiB,GAAG,YAAY,GAAG,IAAI,CAqDlF"}
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 += '|---|---|---|---|---|---|\n';
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
- markdown += `| ${finding.id} | ${finding.category} | ${finding.severity} | ${confidencePct}% | ${owaspShort} | ${mitreShort} |\n`;
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