@bryan-thompson/inspector-assessment-client 1.26.6 → 1.27.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/dist/assets/{OAuthCallback-CCWVtjr7.js → OAuthCallback-CJWH8Ytw.js} +1 -1
- package/dist/assets/{OAuthDebugCallback-DqbXfUi4.js → OAuthDebugCallback-DL5adXJw.js} +1 -1
- package/dist/assets/{index-CsDJSSWq.js → index-Cu9XzUwB.js} +4 -4
- package/dist/index.html +1 -1
- package/lib/lib/assessment/configTypes.d.ts +2 -0
- package/lib/lib/assessment/configTypes.d.ts.map +1 -1
- package/lib/lib/securityPatterns.d.ts +4 -2
- package/lib/lib/securityPatterns.d.ts.map +1 -1
- package/lib/lib/securityPatterns.js +146 -2
- package/lib/services/assessment/modules/AUPComplianceAssessor.js +9 -9
- package/lib/services/assessment/modules/AuthenticationAssessor.js +4 -4
- package/lib/services/assessment/modules/BaseAssessor.d.ts +0 -14
- package/lib/services/assessment/modules/BaseAssessor.d.ts.map +1 -1
- package/lib/services/assessment/modules/BaseAssessor.js +1 -33
- package/lib/services/assessment/modules/CrossCapabilitySecurityAssessor.js +1 -1
- package/lib/services/assessment/modules/DeveloperExperienceAssessor.js +1 -1
- package/lib/services/assessment/modules/DocumentationAssessor.js +2 -2
- package/lib/services/assessment/modules/ErrorHandlingAssessor.d.ts +25 -0
- package/lib/services/assessment/modules/ErrorHandlingAssessor.d.ts.map +1 -1
- package/lib/services/assessment/modules/ErrorHandlingAssessor.js +127 -13
- package/lib/services/assessment/modules/ExternalAPIScannerAssessor.d.ts.map +1 -1
- package/lib/services/assessment/modules/ExternalAPIScannerAssessor.js +3 -3
- package/lib/services/assessment/modules/FunctionalityAssessor.js +9 -9
- package/lib/services/assessment/modules/MCPSpecComplianceAssessor.d.ts.map +1 -1
- package/lib/services/assessment/modules/MCPSpecComplianceAssessor.js +12 -12
- package/lib/services/assessment/modules/ManifestValidationAssessor.d.ts.map +1 -1
- package/lib/services/assessment/modules/ManifestValidationAssessor.js +9 -5
- package/lib/services/assessment/modules/PortabilityAssessor.d.ts.map +1 -1
- package/lib/services/assessment/modules/PortabilityAssessor.js +3 -3
- package/lib/services/assessment/modules/ProhibitedLibrariesAssessor.js +4 -4
- package/lib/services/assessment/modules/PromptAssessor.js +2 -2
- package/lib/services/assessment/modules/ProtocolComplianceAssessor.d.ts.map +1 -1
- package/lib/services/assessment/modules/ProtocolComplianceAssessor.js +7 -7
- package/lib/services/assessment/modules/ProtocolConformanceAssessor.js +1 -1
- package/lib/services/assessment/modules/ResourceAssessor.js +1 -1
- package/lib/services/assessment/modules/SecurityAssessor.d.ts +25 -2
- package/lib/services/assessment/modules/SecurityAssessor.d.ts.map +1 -1
- package/lib/services/assessment/modules/SecurityAssessor.js +149 -17
- package/lib/services/assessment/modules/TemporalAssessor.d.ts.map +1 -1
- package/lib/services/assessment/modules/TemporalAssessor.js +10 -10
- package/lib/services/assessment/modules/ToolAnnotationAssessor.js +9 -9
- package/lib/services/assessment/modules/UsabilityAssessor.js +1 -1
- package/lib/services/assessment/modules/annotations/DescriptionPoisoningDetector.d.ts.map +1 -1
- package/lib/services/assessment/modules/annotations/DescriptionPoisoningDetector.js +37 -0
- package/lib/services/assessment/modules/index.d.ts +3 -0
- package/lib/services/assessment/modules/index.d.ts.map +1 -1
- package/lib/services/assessment/modules/securityTests/ChainExecutionTester.d.ts +104 -0
- package/lib/services/assessment/modules/securityTests/ChainExecutionTester.d.ts.map +1 -0
- package/lib/services/assessment/modules/securityTests/ChainExecutionTester.js +257 -0
- package/lib/services/assessment/modules/securityTests/CrossToolStateTester.d.ts +91 -0
- package/lib/services/assessment/modules/securityTests/CrossToolStateTester.d.ts.map +1 -0
- package/lib/services/assessment/modules/securityTests/CrossToolStateTester.js +225 -0
- package/lib/services/assessment/modules/securityTests/SecurityPatternLibrary.d.ts +120 -0
- package/lib/services/assessment/modules/securityTests/SecurityPatternLibrary.d.ts.map +1 -1
- package/lib/services/assessment/modules/securityTests/SecurityPatternLibrary.js +338 -0
- package/lib/services/assessment/modules/securityTests/SecurityResponseAnalyzer.d.ts +59 -0
- package/lib/services/assessment/modules/securityTests/SecurityResponseAnalyzer.d.ts.map +1 -1
- package/lib/services/assessment/modules/securityTests/SecurityResponseAnalyzer.js +168 -0
- package/lib/services/assessment/modules/securityTests/index.d.ts +3 -1
- package/lib/services/assessment/modules/securityTests/index.d.ts.map +1 -1
- package/lib/services/assessment/modules/securityTests/index.js +2 -0
- package/package.json +1 -1
|
@@ -144,6 +144,126 @@ export declare const AUTH_FAIL_CLOSED_PATTERNS: readonly [{
|
|
|
144
144
|
readonly pattern: RegExp;
|
|
145
145
|
readonly evidence: "denial reason provided";
|
|
146
146
|
}];
|
|
147
|
+
/**
|
|
148
|
+
* Patterns indicating vulnerable shared state authorization
|
|
149
|
+
* Detects cross-tool privilege escalation via shared mutable state
|
|
150
|
+
* Used by: analyzeStateBasedAuthBypass()
|
|
151
|
+
*/
|
|
152
|
+
export declare const STATE_AUTH_VULNERABLE_PATTERNS: readonly [{
|
|
153
|
+
readonly pattern: RegExp;
|
|
154
|
+
readonly evidence: "admin_mode enabled in response";
|
|
155
|
+
}, {
|
|
156
|
+
readonly pattern: RegExp;
|
|
157
|
+
readonly evidence: "Tool hints at cross-tool state dependency";
|
|
158
|
+
}, {
|
|
159
|
+
readonly pattern: RegExp;
|
|
160
|
+
readonly evidence: "Explicit cross-tool state dependency";
|
|
161
|
+
}, {
|
|
162
|
+
readonly pattern: RegExp;
|
|
163
|
+
readonly evidence: "Cross-tool privilege escalation detected";
|
|
164
|
+
}, {
|
|
165
|
+
readonly pattern: RegExp;
|
|
166
|
+
readonly evidence: "Elevated privileges granted";
|
|
167
|
+
}, {
|
|
168
|
+
readonly pattern: RegExp;
|
|
169
|
+
readonly evidence: "Admin mode activated (state modifier)";
|
|
170
|
+
}, {
|
|
171
|
+
readonly pattern: RegExp;
|
|
172
|
+
readonly evidence: "Response hints at config_modifier for admin_mode";
|
|
173
|
+
}, {
|
|
174
|
+
readonly pattern: RegExp;
|
|
175
|
+
readonly evidence: "Tool depends on config_modifier for authorization";
|
|
176
|
+
}];
|
|
177
|
+
/**
|
|
178
|
+
* Patterns indicating safe independent authorization
|
|
179
|
+
* Detects tools that use per-request authentication (secure)
|
|
180
|
+
* Used by: analyzeStateBasedAuthBypass()
|
|
181
|
+
*/
|
|
182
|
+
export declare const STATE_AUTH_SAFE_PATTERNS: readonly [{
|
|
183
|
+
readonly pattern: RegExp;
|
|
184
|
+
readonly evidence: "Tool explicitly states it doesn't use shared state";
|
|
185
|
+
}, {
|
|
186
|
+
readonly pattern: RegExp;
|
|
187
|
+
readonly evidence: "Tool requires independent per-request auth";
|
|
188
|
+
}, {
|
|
189
|
+
readonly pattern: RegExp;
|
|
190
|
+
readonly evidence: "Independent authorization required";
|
|
191
|
+
}, {
|
|
192
|
+
readonly pattern: RegExp;
|
|
193
|
+
readonly evidence: "Tool confirms it does not use shared state";
|
|
194
|
+
}, {
|
|
195
|
+
readonly pattern: RegExp;
|
|
196
|
+
readonly evidence: "Request stored for admin review (no auto-execution)";
|
|
197
|
+
}, {
|
|
198
|
+
readonly pattern: RegExp;
|
|
199
|
+
readonly evidence: "Per-request authentication enforced";
|
|
200
|
+
}];
|
|
201
|
+
/**
|
|
202
|
+
* Response pattern structure for chain exploitation analysis
|
|
203
|
+
*/
|
|
204
|
+
export interface ChainResponsePattern {
|
|
205
|
+
pattern: RegExp;
|
|
206
|
+
weight: number;
|
|
207
|
+
category: string;
|
|
208
|
+
description: string;
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Patterns indicating vulnerable chain execution behavior
|
|
212
|
+
* - Arbitrary tool invocation without allowlist
|
|
213
|
+
* - Output injection via template substitution
|
|
214
|
+
* - Recursive/circular chain execution
|
|
215
|
+
* - Missing depth limits
|
|
216
|
+
* - State poisoning between steps
|
|
217
|
+
*
|
|
218
|
+
* Used by: analyzeChainExploitation()
|
|
219
|
+
*/
|
|
220
|
+
export declare const CHAIN_EXPLOIT_VULNERABLE_PATTERNS: ChainResponsePattern[];
|
|
221
|
+
/**
|
|
222
|
+
* Patterns indicating safe/hardened chain handling
|
|
223
|
+
* - Tool allowlist validation
|
|
224
|
+
* - No execution (validation only)
|
|
225
|
+
* - Depth limits enforced
|
|
226
|
+
* - Output injection blocked
|
|
227
|
+
*
|
|
228
|
+
* Used by: analyzeChainExploitation()
|
|
229
|
+
*/
|
|
230
|
+
/**
|
|
231
|
+
* Threshold for confirming vulnerable chain execution behavior.
|
|
232
|
+
* Value of 1.5 requires ~2 weighted pattern matches to confirm vulnerability.
|
|
233
|
+
*
|
|
234
|
+
* Derived from A/B testing against vulnerable-mcp/hardened-mcp testbed:
|
|
235
|
+
* - vulnerable-mcp: typical scores 2.0-4.0 for vulnerable chains
|
|
236
|
+
* - hardened-mcp: typical scores 0.0-0.8 for safe chains
|
|
237
|
+
*
|
|
238
|
+
* Setting at 1.5 provides margin against false positives while
|
|
239
|
+
* maintaining detection of genuine vulnerabilities.
|
|
240
|
+
*/
|
|
241
|
+
export declare const CHAIN_VULNERABLE_THRESHOLD = 1.5;
|
|
242
|
+
/**
|
|
243
|
+
* Threshold for confirming safe/hardened chain behavior.
|
|
244
|
+
* Value of 1.0 requires 1+ weighted safe pattern matches.
|
|
245
|
+
*
|
|
246
|
+
* Derived from A/B testing:
|
|
247
|
+
* - hardened-mcp: typical scores 1.5-3.0 for safe chains
|
|
248
|
+
* - vulnerable-mcp: typical scores 0.0-0.5 for safe patterns
|
|
249
|
+
*/
|
|
250
|
+
export declare const CHAIN_SAFE_THRESHOLD = 1;
|
|
251
|
+
/**
|
|
252
|
+
* Maps vulnerability categories to detection patterns.
|
|
253
|
+
* Used by analyzeChainExploitation() for category classification.
|
|
254
|
+
*
|
|
255
|
+
* Extracted from inline patterns to maintain single source of truth.
|
|
256
|
+
*/
|
|
257
|
+
export declare const CHAIN_CATEGORY_PATTERNS: Record<string, {
|
|
258
|
+
pattern: RegExp;
|
|
259
|
+
category: string;
|
|
260
|
+
}[]>;
|
|
261
|
+
/**
|
|
262
|
+
* Detect vulnerability categories from response text.
|
|
263
|
+
* Returns array of detected category names.
|
|
264
|
+
*/
|
|
265
|
+
export declare function detectVulnerabilityCategories(responseText: string): string[];
|
|
266
|
+
export declare const CHAIN_EXPLOIT_SAFE_PATTERNS: ChainResponsePattern[];
|
|
147
267
|
/**
|
|
148
268
|
* Patterns indicating search result responses
|
|
149
269
|
* Used by: isSearchResultResponse()
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SecurityPatternLibrary.d.ts","sourceRoot":"","sources":["../../../../../src/services/assessment/modules/securityTests/SecurityPatternLibrary.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH;;;GAGG;AACH,eAAO,MAAM,mBAAmB;IAC9B,kEAAkE;;IAIlE,8DAA8D;;IAG9D,kCAAkC;;IAGlC,gCAAgC;;CAExB,CAAC;AAMX;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,2JAmB5B,CAAC;AAMX;;;GAGG;AACH,eAAO,MAAM,oBAAoB,2LAuBvB,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,2BAA2B;IACtC,iCAAiC;;IAejC,0DAA0D;;CAElD,CAAC;AAMX;;;GAGG;AACH,eAAO,MAAM,yBAAyB;IACpC,oCAAoC;;IAqBpC,4DAA4D;;IAW5D,+BAA+B;;CAEvB,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,6BAA6B;;;;CAMhC,CAAC;AAMX;;;GAGG;AACH,eAAO,MAAM,eAAe,mJAkBlB,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,mBAAmB,2rBAwGtB,CAAC;AAMX;;;GAGG;AACH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA+B1B,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAc5B,CAAC;AAMX;;;GAGG;AACH,eAAO,MAAM,sBAAsB,2FAWzB,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,iBAAiB,mHAcpB,CAAC;AAMX;;;GAGG;AACH,eAAO,MAAM,uBAAuB,mFAU1B,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,2BAA2B,mDAM9B,CAAC;AAMX;;;GAGG;AACH,eAAO,MAAM,uBAAuB,2DAO1B,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,yBAAyB,2DAO5B,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,6BAA6B,yKAWhC,CAAC;AAMX;;;GAGG;AACH,eAAO,MAAM,kBAAkB,mGAYrB,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,2BAA2B,QACO,CAAC;AAMhD;;;GAGG;AACH,eAAO,MAAM,mBAAmB,QAC8B,CAAC;AAE/D;;;GAGG;AACH,eAAO,MAAM,wBAAwB,2EAS3B,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,2BAA2B,oRA4B9B,CAAC;AAMX;;;GAGG;AACH,eAAO,MAAM,0BAA0B;;;;;CAK7B,CAAC;AAMX;;GAEG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAE7E;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAOjD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEvD"}
|
|
1
|
+
{"version":3,"file":"SecurityPatternLibrary.d.ts","sourceRoot":"","sources":["../../../../../src/services/assessment/modules/securityTests/SecurityPatternLibrary.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH;;;GAGG;AACH,eAAO,MAAM,mBAAmB;IAC9B,kEAAkE;;IAIlE,8DAA8D;;IAG9D,kCAAkC;;IAGlC,gCAAgC;;CAExB,CAAC;AAMX;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,2JAmB5B,CAAC;AAMX;;;GAGG;AACH,eAAO,MAAM,oBAAoB,2LAuBvB,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,2BAA2B;IACtC,iCAAiC;;IAejC,0DAA0D;;CAElD,CAAC;AAMX;;;GAGG;AACH,eAAO,MAAM,yBAAyB;IACpC,oCAAoC;;IAqBpC,4DAA4D;;IAW5D,+BAA+B;;CAEvB,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,6BAA6B;;;;CAMhC,CAAC;AAMX;;;GAGG;AACH,eAAO,MAAM,eAAe,mJAkBlB,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,mBAAmB,2rBAwGtB,CAAC;AAMX;;;GAGG;AACH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA+B1B,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAc5B,CAAC;AAMX;;;;GAIG;AACH,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;;;;;;EAiCjC,CAAC;AAEX;;;;GAIG;AACH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;EAyB3B,CAAC;AAMX;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,iCAAiC,EAAE,oBAAoB,EA0FnE,CAAC;AAEF;;;;;;;;GAQG;AAKH;;;;;;;;;;GAUG;AACH,eAAO,MAAM,0BAA0B,MAAM,CAAC;AAE9C;;;;;;;GAOG;AACH,eAAO,MAAM,oBAAoB,IAAM,CAAC;AAMxC;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAC1C,MAAM,EACN;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,EAAE,CAgCxC,CAAC;AAEF;;;GAGG;AACH,wBAAgB,6BAA6B,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,EAAE,CAiB5E;AAED,eAAO,MAAM,2BAA2B,EAAE,oBAAoB,EAuE7D,CAAC;AAMF;;;GAGG;AACH,eAAO,MAAM,sBAAsB,2FAWzB,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,iBAAiB,mHAcpB,CAAC;AAMX;;;GAGG;AACH,eAAO,MAAM,uBAAuB,mFAU1B,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,2BAA2B,mDAM9B,CAAC;AAMX;;;GAGG;AACH,eAAO,MAAM,uBAAuB,2DAO1B,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,yBAAyB,2DAO5B,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,6BAA6B,yKAWhC,CAAC;AAMX;;;GAGG;AACH,eAAO,MAAM,kBAAkB,mGAYrB,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,2BAA2B,QACO,CAAC;AAMhD;;;GAGG;AACH,eAAO,MAAM,mBAAmB,QAC8B,CAAC;AAE/D;;;GAGG;AACH,eAAO,MAAM,wBAAwB,2EAS3B,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,2BAA2B,oRA4B9B,CAAC;AAMX;;;GAGG;AACH,eAAO,MAAM,0BAA0B;;;;;CAK7B,CAAC;AAMX;;GAEG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAE7E;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAOjD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEvD"}
|
|
@@ -338,6 +338,344 @@ export const AUTH_FAIL_CLOSED_PATTERNS = [
|
|
|
338
338
|
{ pattern: /"denial_reason"/i, evidence: "denial reason provided" },
|
|
339
339
|
];
|
|
340
340
|
// =============================================================================
|
|
341
|
+
// CROSS-TOOL STATE-BASED AUTH PATTERNS (Issue #92, Challenge #7)
|
|
342
|
+
// =============================================================================
|
|
343
|
+
/**
|
|
344
|
+
* Patterns indicating vulnerable shared state authorization
|
|
345
|
+
* Detects cross-tool privilege escalation via shared mutable state
|
|
346
|
+
* Used by: analyzeStateBasedAuthBypass()
|
|
347
|
+
*/
|
|
348
|
+
export const STATE_AUTH_VULNERABLE_PATTERNS = [
|
|
349
|
+
{
|
|
350
|
+
pattern: /"admin_mode"\s*:\s*true/i,
|
|
351
|
+
evidence: "admin_mode enabled in response",
|
|
352
|
+
},
|
|
353
|
+
{
|
|
354
|
+
pattern: /hint.*use\s+config_modifier/i,
|
|
355
|
+
evidence: "Tool hints at cross-tool state dependency",
|
|
356
|
+
},
|
|
357
|
+
{
|
|
358
|
+
pattern: /admin_mode.*set\s+by.*another\s+tool/i,
|
|
359
|
+
evidence: "Explicit cross-tool state dependency",
|
|
360
|
+
},
|
|
361
|
+
{
|
|
362
|
+
pattern: /"evidence".*cross-tool.*privilege/i,
|
|
363
|
+
evidence: "Cross-tool privilege escalation detected",
|
|
364
|
+
},
|
|
365
|
+
{
|
|
366
|
+
pattern: /elevated\s+privileges?\s+granted/i,
|
|
367
|
+
evidence: "Elevated privileges granted",
|
|
368
|
+
},
|
|
369
|
+
{
|
|
370
|
+
pattern: /admin\s+mode\s+activated/i,
|
|
371
|
+
evidence: "Admin mode activated (state modifier)",
|
|
372
|
+
},
|
|
373
|
+
{
|
|
374
|
+
pattern: /"hint".*config_modifier.*admin_mode/i,
|
|
375
|
+
evidence: "Response hints at config_modifier for admin_mode",
|
|
376
|
+
},
|
|
377
|
+
{
|
|
378
|
+
pattern: /Use\s+config_modifier.*enable.*admin_mode/i,
|
|
379
|
+
evidence: "Tool depends on config_modifier for authorization",
|
|
380
|
+
},
|
|
381
|
+
];
|
|
382
|
+
/**
|
|
383
|
+
* Patterns indicating safe independent authorization
|
|
384
|
+
* Detects tools that use per-request authentication (secure)
|
|
385
|
+
* Used by: analyzeStateBasedAuthBypass()
|
|
386
|
+
*/
|
|
387
|
+
export const STATE_AUTH_SAFE_PATTERNS = [
|
|
388
|
+
{
|
|
389
|
+
pattern: /"shared_state_checked"\s*:\s*false/i,
|
|
390
|
+
evidence: "Tool explicitly states it doesn't use shared state",
|
|
391
|
+
},
|
|
392
|
+
{
|
|
393
|
+
pattern: /"independent_auth_required"\s*:\s*true/i,
|
|
394
|
+
evidence: "Tool requires independent per-request auth",
|
|
395
|
+
},
|
|
396
|
+
{
|
|
397
|
+
pattern: /requires\s+independent\s+authorization/i,
|
|
398
|
+
evidence: "Independent authorization required",
|
|
399
|
+
},
|
|
400
|
+
{
|
|
401
|
+
pattern: /(?:not|does\s+not|doesn't)\s+(?:use\s+)?shared\s+state/i,
|
|
402
|
+
evidence: "Tool confirms it does not use shared state",
|
|
403
|
+
},
|
|
404
|
+
{
|
|
405
|
+
pattern: /stored.*for.*admin.*review/i,
|
|
406
|
+
evidence: "Request stored for admin review (no auto-execution)",
|
|
407
|
+
},
|
|
408
|
+
{
|
|
409
|
+
pattern: /per-request\s+auth/i,
|
|
410
|
+
evidence: "Per-request authentication enforced",
|
|
411
|
+
},
|
|
412
|
+
];
|
|
413
|
+
/**
|
|
414
|
+
* Patterns indicating vulnerable chain execution behavior
|
|
415
|
+
* - Arbitrary tool invocation without allowlist
|
|
416
|
+
* - Output injection via template substitution
|
|
417
|
+
* - Recursive/circular chain execution
|
|
418
|
+
* - Missing depth limits
|
|
419
|
+
* - State poisoning between steps
|
|
420
|
+
*
|
|
421
|
+
* Used by: analyzeChainExploitation()
|
|
422
|
+
*/
|
|
423
|
+
export const CHAIN_EXPLOIT_VULNERABLE_PATTERNS = [
|
|
424
|
+
// Chain execution evidence
|
|
425
|
+
{
|
|
426
|
+
pattern: /chain_results/i,
|
|
427
|
+
weight: 0.9,
|
|
428
|
+
category: "chain_execution",
|
|
429
|
+
description: "Chain execution returning step results",
|
|
430
|
+
},
|
|
431
|
+
{
|
|
432
|
+
pattern: /steps_executed/i,
|
|
433
|
+
weight: 0.8,
|
|
434
|
+
category: "chain_execution",
|
|
435
|
+
description: "Steps executed counter in response",
|
|
436
|
+
},
|
|
437
|
+
{
|
|
438
|
+
pattern: /vulnerabilities_triggered/i,
|
|
439
|
+
weight: 1.0,
|
|
440
|
+
category: "chain_execution",
|
|
441
|
+
description: "Explicit vulnerabilities triggered indicator",
|
|
442
|
+
},
|
|
443
|
+
// Output injection evidence
|
|
444
|
+
{
|
|
445
|
+
pattern: /output_injection/i,
|
|
446
|
+
weight: 1.0,
|
|
447
|
+
category: "output_injection",
|
|
448
|
+
description: "Output injection between chain steps",
|
|
449
|
+
},
|
|
450
|
+
{
|
|
451
|
+
pattern: /\{\{output\}\}.*substitut/i,
|
|
452
|
+
weight: 0.9,
|
|
453
|
+
category: "output_injection",
|
|
454
|
+
description: "Template output substitution performed",
|
|
455
|
+
},
|
|
456
|
+
{
|
|
457
|
+
pattern: /last_output.*passed/i,
|
|
458
|
+
weight: 0.8,
|
|
459
|
+
category: "output_injection",
|
|
460
|
+
description: "Raw output passed to next step",
|
|
461
|
+
},
|
|
462
|
+
// Recursive chain evidence
|
|
463
|
+
{
|
|
464
|
+
pattern: /recursive_chain/i,
|
|
465
|
+
weight: 1.0,
|
|
466
|
+
category: "recursive_chain",
|
|
467
|
+
description: "Self-referential chain execution",
|
|
468
|
+
},
|
|
469
|
+
{
|
|
470
|
+
pattern: /chain_executor.*within.*chain/i,
|
|
471
|
+
weight: 0.9,
|
|
472
|
+
category: "recursive_chain",
|
|
473
|
+
description: "Chain executor called recursively",
|
|
474
|
+
},
|
|
475
|
+
{
|
|
476
|
+
pattern: /circular.*chain/i,
|
|
477
|
+
weight: 0.9,
|
|
478
|
+
category: "recursive_chain",
|
|
479
|
+
description: "Circular chain reference detected",
|
|
480
|
+
},
|
|
481
|
+
// Arbitrary tool acceptance
|
|
482
|
+
{
|
|
483
|
+
pattern: /arbitrary.*tool.*step/i,
|
|
484
|
+
weight: 0.9,
|
|
485
|
+
category: "arbitrary_tool",
|
|
486
|
+
description: "Arbitrary tool name accepted in chain",
|
|
487
|
+
},
|
|
488
|
+
{
|
|
489
|
+
pattern: /unknown.*tool.*executed/i,
|
|
490
|
+
weight: 0.8,
|
|
491
|
+
category: "arbitrary_tool",
|
|
492
|
+
description: "Unknown tool executed without validation",
|
|
493
|
+
},
|
|
494
|
+
{
|
|
495
|
+
pattern: /attempted.*execute.*unknown/i,
|
|
496
|
+
weight: 0.8,
|
|
497
|
+
category: "arbitrary_tool",
|
|
498
|
+
description: "Attempted execution of unknown tool",
|
|
499
|
+
},
|
|
500
|
+
// Shadowed tool execution
|
|
501
|
+
{
|
|
502
|
+
pattern: /shadowed.*tool/i,
|
|
503
|
+
weight: 1.0,
|
|
504
|
+
category: "tool_shadowing",
|
|
505
|
+
description: "Shadowed/poisoned tool executed",
|
|
506
|
+
},
|
|
507
|
+
{
|
|
508
|
+
pattern: /shadowed_definition/i,
|
|
509
|
+
weight: 0.9,
|
|
510
|
+
category: "tool_shadowing",
|
|
511
|
+
description: "Shadowed definition used instead of original",
|
|
512
|
+
},
|
|
513
|
+
];
|
|
514
|
+
/**
|
|
515
|
+
* Patterns indicating safe/hardened chain handling
|
|
516
|
+
* - Tool allowlist validation
|
|
517
|
+
* - No execution (validation only)
|
|
518
|
+
* - Depth limits enforced
|
|
519
|
+
* - Output injection blocked
|
|
520
|
+
*
|
|
521
|
+
* Used by: analyzeChainExploitation()
|
|
522
|
+
*/
|
|
523
|
+
// =============================================================================
|
|
524
|
+
// CHAIN VULNERABILITY THRESHOLDS (Issue #93)
|
|
525
|
+
// =============================================================================
|
|
526
|
+
/**
|
|
527
|
+
* Threshold for confirming vulnerable chain execution behavior.
|
|
528
|
+
* Value of 1.5 requires ~2 weighted pattern matches to confirm vulnerability.
|
|
529
|
+
*
|
|
530
|
+
* Derived from A/B testing against vulnerable-mcp/hardened-mcp testbed:
|
|
531
|
+
* - vulnerable-mcp: typical scores 2.0-4.0 for vulnerable chains
|
|
532
|
+
* - hardened-mcp: typical scores 0.0-0.8 for safe chains
|
|
533
|
+
*
|
|
534
|
+
* Setting at 1.5 provides margin against false positives while
|
|
535
|
+
* maintaining detection of genuine vulnerabilities.
|
|
536
|
+
*/
|
|
537
|
+
export const CHAIN_VULNERABLE_THRESHOLD = 1.5;
|
|
538
|
+
/**
|
|
539
|
+
* Threshold for confirming safe/hardened chain behavior.
|
|
540
|
+
* Value of 1.0 requires 1+ weighted safe pattern matches.
|
|
541
|
+
*
|
|
542
|
+
* Derived from A/B testing:
|
|
543
|
+
* - hardened-mcp: typical scores 1.5-3.0 for safe chains
|
|
544
|
+
* - vulnerable-mcp: typical scores 0.0-0.5 for safe patterns
|
|
545
|
+
*/
|
|
546
|
+
export const CHAIN_SAFE_THRESHOLD = 1.0;
|
|
547
|
+
// =============================================================================
|
|
548
|
+
// CHAIN VULNERABILITY CATEGORY PATTERNS (Issue #93)
|
|
549
|
+
// =============================================================================
|
|
550
|
+
/**
|
|
551
|
+
* Maps vulnerability categories to detection patterns.
|
|
552
|
+
* Used by analyzeChainExploitation() for category classification.
|
|
553
|
+
*
|
|
554
|
+
* Extracted from inline patterns to maintain single source of truth.
|
|
555
|
+
*/
|
|
556
|
+
export const CHAIN_CATEGORY_PATTERNS = {
|
|
557
|
+
OUTPUT_INJECTION: [
|
|
558
|
+
{ pattern: /output_injection/i, category: "OUTPUT_INJECTION" },
|
|
559
|
+
{ pattern: /\{\{output\}\}.*substitut/i, category: "OUTPUT_INJECTION" },
|
|
560
|
+
],
|
|
561
|
+
RECURSIVE_CHAIN: [
|
|
562
|
+
{ pattern: /recursive_chain/i, category: "RECURSIVE_CHAIN" },
|
|
563
|
+
{ pattern: /chain_executor.*within/i, category: "RECURSIVE_CHAIN" },
|
|
564
|
+
],
|
|
565
|
+
ARBITRARY_TOOL_INVOCATION: [
|
|
566
|
+
{ pattern: /arbitrary.*tool/i, category: "ARBITRARY_TOOL_INVOCATION" },
|
|
567
|
+
{
|
|
568
|
+
pattern: /unknown.*tool.*executed/i,
|
|
569
|
+
category: "ARBITRARY_TOOL_INVOCATION",
|
|
570
|
+
},
|
|
571
|
+
],
|
|
572
|
+
TOOL_SHADOWING: [
|
|
573
|
+
{ pattern: /shadowed.*tool/i, category: "TOOL_SHADOWING" },
|
|
574
|
+
{ pattern: /shadowed_definition/i, category: "TOOL_SHADOWING" },
|
|
575
|
+
],
|
|
576
|
+
MISSING_DEPTH_LIMIT: [
|
|
577
|
+
{
|
|
578
|
+
pattern: /steps_executed.*[1-9][0-9]/i,
|
|
579
|
+
category: "MISSING_DEPTH_LIMIT",
|
|
580
|
+
},
|
|
581
|
+
{ pattern: /no.*depth.*limit/i, category: "MISSING_DEPTH_LIMIT" },
|
|
582
|
+
],
|
|
583
|
+
STATE_POISONING: [
|
|
584
|
+
{ pattern: /state.*poison/i, category: "STATE_POISONING" },
|
|
585
|
+
{ pattern: /config.*modified.*chain/i, category: "STATE_POISONING" },
|
|
586
|
+
],
|
|
587
|
+
};
|
|
588
|
+
/**
|
|
589
|
+
* Detect vulnerability categories from response text.
|
|
590
|
+
* Returns array of detected category names.
|
|
591
|
+
*/
|
|
592
|
+
export function detectVulnerabilityCategories(responseText) {
|
|
593
|
+
const categories = [];
|
|
594
|
+
for (const [categoryName, patterns] of Object.entries(CHAIN_CATEGORY_PATTERNS)) {
|
|
595
|
+
for (const { pattern } of patterns) {
|
|
596
|
+
if (pattern.test(responseText)) {
|
|
597
|
+
if (!categories.includes(categoryName)) {
|
|
598
|
+
categories.push(categoryName);
|
|
599
|
+
}
|
|
600
|
+
break; // Found match for this category, move to next
|
|
601
|
+
}
|
|
602
|
+
}
|
|
603
|
+
}
|
|
604
|
+
return categories;
|
|
605
|
+
}
|
|
606
|
+
export const CHAIN_EXPLOIT_SAFE_PATTERNS = [
|
|
607
|
+
// Validation-only behavior
|
|
608
|
+
{
|
|
609
|
+
pattern: /stored.*for.*review/i,
|
|
610
|
+
weight: 0.8,
|
|
611
|
+
category: "safe_storage",
|
|
612
|
+
description: "Chain stored for review, not executed",
|
|
613
|
+
},
|
|
614
|
+
{
|
|
615
|
+
pattern: /validation.*only/i,
|
|
616
|
+
weight: 0.9,
|
|
617
|
+
category: "safe_validation",
|
|
618
|
+
description: "Chain validated but not executed",
|
|
619
|
+
},
|
|
620
|
+
{
|
|
621
|
+
pattern: /chain.*validated/i,
|
|
622
|
+
weight: 0.7,
|
|
623
|
+
category: "safe_validation",
|
|
624
|
+
description: "Chain validation response",
|
|
625
|
+
},
|
|
626
|
+
{
|
|
627
|
+
pattern: /pending.*review/i,
|
|
628
|
+
weight: 0.8,
|
|
629
|
+
category: "safe_storage",
|
|
630
|
+
description: "Request pending admin review",
|
|
631
|
+
},
|
|
632
|
+
// Allowlist enforcement
|
|
633
|
+
{
|
|
634
|
+
pattern: /tool.*not.*in.*allowlist/i,
|
|
635
|
+
weight: 0.9,
|
|
636
|
+
category: "allowlist",
|
|
637
|
+
description: "Tool rejected - not in allowlist",
|
|
638
|
+
},
|
|
639
|
+
{
|
|
640
|
+
pattern: /only.*safe.*tools.*permitted/i,
|
|
641
|
+
weight: 0.9,
|
|
642
|
+
category: "allowlist",
|
|
643
|
+
description: "Allowlist enforcement message",
|
|
644
|
+
},
|
|
645
|
+
{
|
|
646
|
+
pattern: /blocked.*tool.*chain/i,
|
|
647
|
+
weight: 0.8,
|
|
648
|
+
category: "allowlist",
|
|
649
|
+
description: "Tool blocked from chain execution",
|
|
650
|
+
},
|
|
651
|
+
// Depth limit enforcement
|
|
652
|
+
{
|
|
653
|
+
pattern: /depth.*limit.*enforced/i,
|
|
654
|
+
weight: 0.8,
|
|
655
|
+
category: "depth_limit",
|
|
656
|
+
description: "Depth limit properly enforced",
|
|
657
|
+
},
|
|
658
|
+
{
|
|
659
|
+
pattern: /max.*depth.*exceeded/i,
|
|
660
|
+
weight: 0.7,
|
|
661
|
+
category: "depth_limit",
|
|
662
|
+
description: "Chain rejected for exceeding depth",
|
|
663
|
+
},
|
|
664
|
+
// No execution indicators
|
|
665
|
+
{
|
|
666
|
+
pattern: /chain_executed.*false/i,
|
|
667
|
+
weight: 0.9,
|
|
668
|
+
category: "no_execution",
|
|
669
|
+
description: "Chain execution disabled",
|
|
670
|
+
},
|
|
671
|
+
{
|
|
672
|
+
pattern: /execution.*disabled/i,
|
|
673
|
+
weight: 0.8,
|
|
674
|
+
category: "no_execution",
|
|
675
|
+
description: "Execution capability disabled",
|
|
676
|
+
},
|
|
677
|
+
];
|
|
678
|
+
// =============================================================================
|
|
341
679
|
// SEARCH/RETRIEVAL PATTERNS
|
|
342
680
|
// =============================================================================
|
|
343
681
|
/**
|
|
@@ -35,6 +35,40 @@ export interface AuthBypassResult {
|
|
|
35
35
|
failureMode: "FAIL_OPEN" | "FAIL_CLOSED" | "UNKNOWN";
|
|
36
36
|
evidence?: string;
|
|
37
37
|
}
|
|
38
|
+
/**
|
|
39
|
+
* Result of cross-tool state-based auth bypass analysis (Issue #92, Challenge #7)
|
|
40
|
+
* Detects privilege escalation via shared mutable state between tools
|
|
41
|
+
*/
|
|
42
|
+
export interface StateBasedAuthResult {
|
|
43
|
+
vulnerable: boolean;
|
|
44
|
+
safe: boolean;
|
|
45
|
+
stateDependency: "SHARED_STATE" | "INDEPENDENT" | "UNKNOWN";
|
|
46
|
+
evidence: string;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Chain execution type classification (Issue #93, Challenge #6)
|
|
50
|
+
*/
|
|
51
|
+
export type ChainExecutionType = "VULNERABLE_EXECUTION" | "SAFE_VALIDATION" | "PARTIAL" | "UNKNOWN";
|
|
52
|
+
/**
|
|
53
|
+
* Chain vulnerability categories (Issue #93, Challenge #6)
|
|
54
|
+
*/
|
|
55
|
+
export type ChainVulnerabilityCategory = "OUTPUT_INJECTION" | "RECURSIVE_CHAIN" | "ARBITRARY_TOOL_INVOCATION" | "TOOL_SHADOWING" | "MISSING_DEPTH_LIMIT" | "STATE_POISONING";
|
|
56
|
+
/**
|
|
57
|
+
* Result of chain exploitation analysis (Issue #93, Challenge #6)
|
|
58
|
+
* Detects multi-tool chained exploitation attacks
|
|
59
|
+
*/
|
|
60
|
+
export interface ChainExploitationAnalysis {
|
|
61
|
+
vulnerable: boolean;
|
|
62
|
+
safe: boolean;
|
|
63
|
+
chainType: ChainExecutionType;
|
|
64
|
+
vulnerabilityCategories: ChainVulnerabilityCategory[];
|
|
65
|
+
evidence: {
|
|
66
|
+
vulnerablePatterns: string[];
|
|
67
|
+
safePatterns: string[];
|
|
68
|
+
vulnerableScore: number;
|
|
69
|
+
safeScore: number;
|
|
70
|
+
};
|
|
71
|
+
}
|
|
38
72
|
/**
|
|
39
73
|
* Error classification types
|
|
40
74
|
*/
|
|
@@ -70,6 +104,31 @@ export declare class SecurityResponseAnalyzer {
|
|
|
70
104
|
* Detects fail-open authentication vulnerabilities (CVE-2025-52882)
|
|
71
105
|
*/
|
|
72
106
|
analyzeAuthBypassResponse(response: CompatibilityCallToolResult): AuthBypassResult;
|
|
107
|
+
/**
|
|
108
|
+
* Analyze response for cross-tool state-based authorization bypass (Issue #92)
|
|
109
|
+
* Detects Challenge #7: Privilege escalation via shared mutable state
|
|
110
|
+
*
|
|
111
|
+
* Vulnerable pattern: Tool checks shared state (e.g., config_state["admin_mode"])
|
|
112
|
+
* that can be modified by another tool (e.g., config_modifier)
|
|
113
|
+
*
|
|
114
|
+
* Safe pattern: Tool uses independent per-request authorization,
|
|
115
|
+
* indicated by shared_state_checked: false or independent_auth_required: true
|
|
116
|
+
*/
|
|
117
|
+
analyzeStateBasedAuthBypass(response: CompatibilityCallToolResult): StateBasedAuthResult;
|
|
118
|
+
/**
|
|
119
|
+
* Analyze response for chain exploitation vulnerabilities (Issue #93, Challenge #6)
|
|
120
|
+
* Detects multi-tool chained exploitation attacks including:
|
|
121
|
+
* - Arbitrary tool invocation without allowlist
|
|
122
|
+
* - Output injection via {{output}} template substitution
|
|
123
|
+
* - Recursive/circular chain execution (DoS potential)
|
|
124
|
+
* - State poisoning between chain steps
|
|
125
|
+
* - Tool shadowing in chains
|
|
126
|
+
* - Missing depth/size limits
|
|
127
|
+
*
|
|
128
|
+
* @param response The tool response to analyze
|
|
129
|
+
* @returns Analysis result with vulnerability status and evidence
|
|
130
|
+
*/
|
|
131
|
+
analyzeChainExploitation(response: CompatibilityCallToolResult): ChainExploitationAnalysis;
|
|
73
132
|
/**
|
|
74
133
|
* Check if response indicates connection/server failure
|
|
75
134
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SecurityResponseAnalyzer.d.ts","sourceRoot":"","sources":["../../../../../src/services/assessment/modules/securityTests/SecurityResponseAnalyzer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EACL,2BAA2B,EAC3B,IAAI,EACL,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AAK1E,OAAO,EAAgB,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAElE,OAAO,EAAoB,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"SecurityResponseAnalyzer.d.ts","sourceRoot":"","sources":["../../../../../src/services/assessment/modules/securityTests/SecurityResponseAnalyzer.ts"],"names":[],"mappings":"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"}
|