@bryan-thompson/inspector-assessment-client 1.19.5 → 1.19.7

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.
@@ -1,4 +1,4 @@
1
- import { u as useToast, r as reactExports, j as jsxRuntimeExports, p as parseOAuthCallbackParams, g as generateOAuthErrorDescription, S as SESSION_KEYS, I as InspectorOAuthClientProvider, a as auth } from "./index-BToUV-36.js";
1
+ import { u as useToast, r as reactExports, j as jsxRuntimeExports, p as parseOAuthCallbackParams, g as generateOAuthErrorDescription, S as SESSION_KEYS, I as InspectorOAuthClientProvider, a as auth } from "./index-CdUk9TCd.js";
2
2
  const OAuthCallback = ({ onConnect }) => {
3
3
  const { toast } = useToast();
4
4
  const hasProcessedRef = reactExports.useRef(false);
@@ -1,4 +1,4 @@
1
- import { r as reactExports, S as SESSION_KEYS, p as parseOAuthCallbackParams, j as jsxRuntimeExports, g as generateOAuthErrorDescription } from "./index-BToUV-36.js";
1
+ import { r as reactExports, S as SESSION_KEYS, p as parseOAuthCallbackParams, j as jsxRuntimeExports, g as generateOAuthErrorDescription } from "./index-CdUk9TCd.js";
2
2
  const OAuthDebugCallback = ({ onConnect }) => {
3
3
  reactExports.useEffect(() => {
4
4
  let isProcessed = false;
@@ -16320,7 +16320,7 @@ object({
16320
16320
  token_type_hint: string().optional()
16321
16321
  }).strip();
16322
16322
  const name = "@bryan-thompson/inspector-assessment-client";
16323
- const version$1 = "1.19.4";
16323
+ const version$1 = "1.19.7";
16324
16324
  const packageJson = {
16325
16325
  name,
16326
16326
  version: version$1
@@ -45352,7 +45352,7 @@ const useTheme = () => {
45352
45352
  [theme, setThemeWithSideEffect]
45353
45353
  );
45354
45354
  };
45355
- const version = "1.19.4";
45355
+ const version = "1.19.7";
45356
45356
  var [createTooltipContext] = createContextScope("Tooltip", [
45357
45357
  createPopperScope
45358
45358
  ]);
@@ -48915,6 +48915,11 @@ class ErrorHandlingAssessor extends BaseAssessor {
48915
48915
  }
48916
48916
  selectToolsForTesting(tools) {
48917
48917
  if (this.config.selectedToolsForTesting !== void 0) {
48918
+ if (this.config.maxToolsToTestForErrors !== void 0) {
48919
+ this.log(
48920
+ `Warning: Both selectedToolsForTesting and maxToolsToTestForErrors are set. Using selectedToolsForTesting (maxToolsToTestForErrors is deprecated).`
48921
+ );
48922
+ }
48918
48923
  const selectedNames = new Set(this.config.selectedToolsForTesting);
48919
48924
  const selectedTools = tools.filter(
48920
48925
  (tool) => selectedNames.has(tool.name)
@@ -59161,13 +59166,13 @@ const App = () => {
59161
59166
  ) });
59162
59167
  if (window.location.pathname === "/oauth/callback") {
59163
59168
  const OAuthCallback = React.lazy(
59164
- () => __vitePreload(() => import("./OAuthCallback-DbXCayzE.js"), true ? [] : void 0)
59169
+ () => __vitePreload(() => import("./OAuthCallback-CTi1WHpO.js"), true ? [] : void 0)
59165
59170
  );
59166
59171
  return /* @__PURE__ */ jsxRuntimeExports.jsx(reactExports.Suspense, { fallback: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { children: "Loading..." }), children: /* @__PURE__ */ jsxRuntimeExports.jsx(OAuthCallback, { onConnect: onOAuthConnect }) });
59167
59172
  }
59168
59173
  if (window.location.pathname === "/oauth/callback/debug") {
59169
59174
  const OAuthDebugCallback = React.lazy(
59170
- () => __vitePreload(() => import("./OAuthDebugCallback-DO4zwsDb.js"), true ? [] : void 0)
59175
+ () => __vitePreload(() => import("./OAuthDebugCallback-Ugn64tA_.js"), true ? [] : void 0)
59171
59176
  );
59172
59177
  return /* @__PURE__ */ jsxRuntimeExports.jsx(reactExports.Suspense, { fallback: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { children: "Loading..." }), children: /* @__PURE__ */ jsxRuntimeExports.jsx(OAuthDebugCallback, { onConnect: onOAuthDebugConnect }) });
59173
59178
  }
package/dist/index.html CHANGED
@@ -5,7 +5,7 @@
5
5
  <link rel="icon" type="image/svg+xml" href="/mcp.svg" />
6
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
7
  <title>MCP Inspector</title>
8
- <script type="module" crossorigin src="/assets/index-BToUV-36.js"></script>
8
+ <script type="module" crossorigin src="/assets/index-CdUk9TCd.js"></script>
9
9
  <link rel="stylesheet" crossorigin href="/assets/index-DiyPO_Zj.css">
10
10
  </head>
11
11
  <body>
@@ -1 +1 @@
1
- {"version":3,"file":"AssessmentOrchestrator.d.ts","sourceRoot":"","sources":["../../../src/services/assessment/AssessmentOrchestrator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AssessmentOrchestrator.d.ts","sourceRoot":"","sources":["../../../src/services/assessment/AssessmentOrchestrator.ts"],"names":[],"mappings":"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"}
@@ -51,6 +51,7 @@ function emitModuleStartedEvent(moduleName, estimatedTests, toolCount) {
51
51
  /**
52
52
  * Emit module_complete event with score and duration.
53
53
  * Uses shared score calculator for consistent scoring logic.
54
+ * For AUP module, includes enriched violation data for Claude analysis.
54
55
  */
55
56
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
56
57
  function emitModuleProgress(moduleName, status, result, testsRun = 0) {
@@ -61,8 +62,8 @@ function emitModuleProgress(moduleName, status, result, testsRun = 0) {
61
62
  const startTime = moduleStartTimes.get(moduleKey);
62
63
  const duration = startTime ? Date.now() - startTime : 0;
63
64
  moduleStartTimes.delete(moduleKey);
64
- // Emit JSONL to stderr with version field
65
- console.error(JSON.stringify({
65
+ // Build base event
66
+ const event = {
66
67
  event: "module_complete",
67
68
  module: moduleKey,
68
69
  status,
@@ -70,7 +71,78 @@ function emitModuleProgress(moduleName, status, result, testsRun = 0) {
70
71
  testsRun,
71
72
  duration,
72
73
  version: INSPECTOR_VERSION,
73
- }));
74
+ };
75
+ // Add AUP enrichment when module is AUP
76
+ if (moduleKey === "aup" && result) {
77
+ const aupEnrichment = buildAUPEnrichment(result);
78
+ Object.assign(event, aupEnrichment);
79
+ }
80
+ // Emit JSONL to stderr with version field
81
+ console.error(JSON.stringify(event));
82
+ }
83
+ /**
84
+ * Build AUP enrichment data from an AUP compliance assessment result.
85
+ * Samples violations prioritizing by severity (CRITICAL > HIGH > MEDIUM).
86
+ */
87
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
88
+ function buildAUPEnrichment(aupResult, maxSamples = 10) {
89
+ const violations = aupResult.violations || [];
90
+ // Calculate metrics
91
+ const metrics = {
92
+ total: violations.length,
93
+ critical: violations.filter((v) => v.severity === "CRITICAL").length,
94
+ high: violations.filter((v) => v.severity === "HIGH")
95
+ .length,
96
+ medium: violations.filter((v) => v.severity === "MEDIUM").length,
97
+ byCategory: {},
98
+ };
99
+ // Count by category
100
+ for (const v of violations) {
101
+ metrics.byCategory[v.category] = (metrics.byCategory[v.category] || 0) + 1;
102
+ }
103
+ // Sample violations prioritizing by severity
104
+ const sampled = [];
105
+ const severityOrder = ["CRITICAL", "HIGH", "MEDIUM"];
106
+ for (const severity of severityOrder) {
107
+ if (sampled.length >= maxSamples)
108
+ break;
109
+ const bySeverity = violations.filter((v) => v.severity === severity);
110
+ for (const v of bySeverity) {
111
+ if (sampled.length >= maxSamples)
112
+ break;
113
+ sampled.push({
114
+ category: v.category,
115
+ categoryName: v.categoryName,
116
+ severity: v.severity,
117
+ matchedText: v.matchedText,
118
+ location: v.location,
119
+ confidence: v.confidence,
120
+ });
121
+ }
122
+ }
123
+ // Build sampling note
124
+ let samplingNote = "";
125
+ if (violations.length === 0) {
126
+ samplingNote = "No violations detected.";
127
+ }
128
+ else if (violations.length <= maxSamples) {
129
+ samplingNote = `All ${violations.length} violation(s) included.`;
130
+ }
131
+ else {
132
+ samplingNote = `Sampled ${sampled.length} of ${violations.length} violations, prioritized by severity (CRITICAL > HIGH > MEDIUM).`;
133
+ }
134
+ return {
135
+ violationsSample: sampled,
136
+ samplingNote,
137
+ violationMetrics: metrics,
138
+ scannedLocations: aupResult.scannedLocations || {
139
+ toolNames: false,
140
+ toolDescriptions: false,
141
+ readme: false,
142
+ sourceCode: false,
143
+ },
144
+ highRiskDomains: (aupResult.highRiskDomains || []).slice(0, 10),
145
+ };
74
146
  }
75
147
  export class AssessmentOrchestrator {
76
148
  config;
@@ -1 +1 @@
1
- {"version":3,"file":"DocumentationAssessor.d.ts","sourceRoot":"","sources":["../../../../src/services/assessment/modules/DocumentationAssessor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,uBAAuB,EAIxB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAE9D,qBAAa,qBAAsB,SAAQ,YAAY;IAC/C,MAAM,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAuB1E,OAAO,CAAC,oBAAoB;IA6H5B;;;OAGG;IACH,OAAO,CAAC,yBAAyB;IAuEjC;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAiBhC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAmC9B;;OAEG;IACH,OAAO,CAAC,aAAa;IAKrB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAqB3B;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IA4C3B,OAAO,CAAC,wBAAwB;IAchC,OAAO,CAAC,eAAe;IAavB,OAAO,CAAC,iBAAiB;IAezB,OAAO,CAAC,cAAc;IAUtB;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IAY9B;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IA4B3B,OAAO,CAAC,4BAA4B;IAmBpC,OAAO,CAAC,mBAAmB;IAyB3B,OAAO,CAAC,uBAAuB;CA+BhC"}
1
+ {"version":3,"file":"DocumentationAssessor.d.ts","sourceRoot":"","sources":["../../../../src/services/assessment/modules/DocumentationAssessor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,uBAAuB,EAIxB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAE9D,qBAAa,qBAAsB,SAAQ,YAAY;IAC/C,MAAM,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAwC1E,OAAO,CAAC,oBAAoB;IA6H5B;;;OAGG;IACH,OAAO,CAAC,yBAAyB;IAuEjC;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAiBhC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAmC9B;;OAEG;IACH,OAAO,CAAC,aAAa;IAKrB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAqB3B;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IA4C3B,OAAO,CAAC,wBAAwB;IAchC,OAAO,CAAC,eAAe;IAavB,OAAO,CAAC,iBAAiB;IAezB,OAAO,CAAC,cAAc;IAUtB;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IAY9B;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IA4B3B,OAAO,CAAC,4BAA4B;IAmBpC,OAAO,CAAC,mBAAmB;IAyB3B,OAAO,CAAC,uBAAuB;CA+BhC"}
@@ -7,7 +7,18 @@ export class DocumentationAssessor extends BaseAssessor {
7
7
  async assess(context) {
8
8
  this.log("Starting documentation assessment");
9
9
  const readmeContent = context.readmeContent || "";
10
- const verbosity = this.config.documentationVerbosity || "standard";
10
+ const validVerbosityLevels = ["minimal", "standard", "verbose"];
11
+ const configVerbosity = this.config.documentationVerbosity;
12
+ let verbosity = "standard";
13
+ if (configVerbosity) {
14
+ if (validVerbosityLevels.includes(configVerbosity)) {
15
+ verbosity = configVerbosity;
16
+ }
17
+ else {
18
+ this.log(`Warning: Invalid documentationVerbosity "${configVerbosity}". ` +
19
+ `Valid options: ${validVerbosityLevels.join(", ")}. Using "standard".`);
20
+ }
21
+ }
11
22
  const metrics = this.analyzeDocumentation(readmeContent, context.tools, verbosity);
12
23
  const status = this.determineDocumentationStatus(metrics);
13
24
  const explanation = this.generateExplanation(metrics);
@@ -1 +1 @@
1
- {"version":3,"file":"ErrorHandlingAssessor.d.ts","sourceRoot":"","sources":["../../../../src/services/assessment/modules/ErrorHandlingAssessor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,uBAAuB,EAIxB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAG9D,qBAAa,qBAAsB,SAAQ,YAAY;IAC/C,MAAM,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,uBAAuB,CAAC;IA+D1E,OAAO,CAAC,qBAAqB;YA8Cf,qBAAqB;YAuBrB,qBAAqB;YAmGrB,cAAc;YAmFd,iBAAiB;YA8DjB,kBAAkB;IA6DhC,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,uBAAuB;IAgC/B,OAAO,CAAC,0BAA0B;IAgClC,OAAO,CAAC,uBAAuB;IA4B/B,OAAO,CAAC,gBAAgB;IAoGxB,OAAO,CAAC,4BAA4B;IAapC,OAAO,CAAC,mBAAmB;IAuE3B,OAAO,CAAC,uBAAuB;CA4ChC"}
1
+ {"version":3,"file":"ErrorHandlingAssessor.d.ts","sourceRoot":"","sources":["../../../../src/services/assessment/modules/ErrorHandlingAssessor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,uBAAuB,EAIxB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAG9D,qBAAa,qBAAsB,SAAQ,YAAY;IAC/C,MAAM,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,uBAAuB,CAAC;IA+D1E,OAAO,CAAC,qBAAqB;YAqDf,qBAAqB;YAuBrB,qBAAqB;YAmGrB,cAAc;YAmFd,iBAAiB;YA8DjB,kBAAkB;IA6DhC,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,uBAAuB;IAgC/B,OAAO,CAAC,0BAA0B;IAgClC,OAAO,CAAC,uBAAuB;IA4B/B,OAAO,CAAC,gBAAgB;IAoGxB,OAAO,CAAC,4BAA4B;IAapC,OAAO,CAAC,mBAAmB;IAuE3B,OAAO,CAAC,uBAAuB;CA4ChC"}
@@ -46,6 +46,11 @@ export class ErrorHandlingAssessor extends BaseAssessor {
46
46
  // Prefer new selectedToolsForTesting configuration
47
47
  // Note: undefined/null means "test all" (default), empty array [] means "test none" (explicit)
48
48
  if (this.config.selectedToolsForTesting !== undefined) {
49
+ // Warn if deprecated maxToolsToTestForErrors is also set
50
+ if (this.config.maxToolsToTestForErrors !== undefined) {
51
+ this.log(`Warning: Both selectedToolsForTesting and maxToolsToTestForErrors are set. ` +
52
+ `Using selectedToolsForTesting (maxToolsToTestForErrors is deprecated).`);
53
+ }
49
54
  const selectedNames = new Set(this.config.selectedToolsForTesting);
50
55
  const selectedTools = tools.filter((tool) => selectedNames.has(tool.name));
51
56
  // Empty array means user explicitly selected 0 tools
@@ -1,13 +1,19 @@
1
1
  /**
2
2
  * Security Assessor Module
3
3
  * Tests for backend API security vulnerabilities using 20 focused patterns
4
- * - Critical Injection (6): Command, Calculator, SQL, Path Traversal, XXE, NoSQL
5
- * - Input Validation (3): Type Safety, Boundary Testing, Required Fields
6
- * - Protocol Compliance (2): MCP Error Format, Timeout Handling
7
- * - Tool-Specific (7): SSRF, Unicode Bypass, Nested Injection, Package Squatting,
8
- * Data Exfiltration, Configuration Drift, Tool Shadowing
9
- * - Resource Exhaustion (1): DoS/Resource Exhaustion
10
- * - Deserialization (1): Insecure Deserialization
4
+ *
5
+ * BASIC MODE (5 patterns - enableDomainTesting=false):
6
+ * Command Injection, Calculator Injection, SQL Injection, Path Traversal, Unicode Bypass
7
+ *
8
+ * ADVANCED MODE (all 20 patterns - enableDomainTesting=true):
9
+ * - Critical Injection (6): Command, Calculator, SQL, Path Traversal, XXE, NoSQL
10
+ * - Input Validation (3): Type Safety, Boundary Testing, Required Fields
11
+ * - Protocol Compliance (2): MCP Error Format, Timeout Handling
12
+ * - Tool-Specific (6): SSRF, Nested Injection, Package Squatting,
13
+ * Data Exfiltration, Configuration Drift, Tool Shadowing
14
+ * - Encoding Bypass (1): Unicode Bypass
15
+ * - Resource Exhaustion (1): DoS/Resource Exhaustion
16
+ * - Deserialization (1): Insecure Deserialization
11
17
  */
12
18
  import { SecurityAssessment } from "../../../lib/assessmentTypes.js";
13
19
  import { BaseAssessor } from "./BaseAssessor.js";
@@ -1 +1 @@
1
- {"version":3,"file":"SecurityAssessor.d.ts","sourceRoot":"","sources":["../../../../src/services/assessment/modules/SecurityAssessor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EACL,kBAAkB,EAInB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAc9D,qBAAa,gBAAiB,SAAQ,YAAY;IAChD,OAAO,CAAC,iBAAiB,CAAuC;IAC1D,MAAM,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAuFrE;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAkC7B;;;;OAIG;YACW,yBAAyB;IAuKvC;;;;OAIG;YACW,qBAAqB;IA4JnC;;OAEG;YACW,WAAW;IA2HzB;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB;IAgDzB;;;OAGG;IACH,OAAO,CAAC,8BAA8B;IAiDtC;;OAEG;IACH,OAAO,CAAC,aAAa;IA+BrB;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAgClC;;;OAGG;IACH,OAAO,CAAC,eAAe;IA6HvB;;;;;;;OAOG;IACH,OAAO,CAAC,qBAAqB;IAiE7B;;;;;;;;;OASG;IACH,OAAO,CAAC,oBAAoB;IAqC5B;;;;;OAKG;IACH,OAAO,CAAC,mBAAmB;IAsB3B;;;;;;;OAOG;IACH,OAAO,CAAC,oBAAoB;IAkC5B;;OAEG;YACW,+BAA+B;IAiC7C;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAYjC;;OAEG;IACH,OAAO,CAAC,uBAAuB;IA0B/B;;OAEG;IACH,OAAO,CAAC,2BAA2B;IAkEnC;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAuI3B;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAsB5B;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,oBAAoB;IAuM5B;;;;;;;;;OASG;IACH,OAAO,CAAC,wBAAwB;IAwDhC;;;OAGG;IACH,OAAO,CAAC,8BAA8B;IAuBtC;;;OAGG;IACH,OAAO,CAAC,wBAAwB;IA8BhC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAW9B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAO1B,OAAO,CAAC,oBAAoB;IAoH5B;;OAEG;IACH,OAAO,CAAC,YAAY;IASpB;;;OAGG;IACH,OAAO,CAAC,eAAe;IASvB;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IAiB9B;;;OAGG;IACH,OAAO,CAAC,kBAAkB;CAmB3B"}
1
+ {"version":3,"file":"SecurityAssessor.d.ts","sourceRoot":"","sources":["../../../../src/services/assessment/modules/SecurityAssessor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EACL,kBAAkB,EAInB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAc9D,qBAAa,gBAAiB,SAAQ,YAAY;IAChD,OAAO,CAAC,iBAAiB,CAAuC;IAC1D,MAAM,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAuFrE;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAkC7B;;;;OAIG;YACW,yBAAyB;IAuKvC;;;;OAIG;YACW,qBAAqB;IA4JnC;;OAEG;YACW,WAAW;IA2HzB;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB;IAgDzB;;;OAGG;IACH,OAAO,CAAC,8BAA8B;IAiDtC;;OAEG;IACH,OAAO,CAAC,aAAa;IA+BrB;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAgClC;;;OAGG;IACH,OAAO,CAAC,eAAe;IA6HvB;;;;;;;OAOG;IACH,OAAO,CAAC,qBAAqB;IAiE7B;;;;;;;;;OASG;IACH,OAAO,CAAC,oBAAoB;IAqC5B;;;;;OAKG;IACH,OAAO,CAAC,mBAAmB;IAsB3B;;;;;;;OAOG;IACH,OAAO,CAAC,oBAAoB;IAkC5B;;OAEG;YACW,+BAA+B;IAiC7C;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAYjC;;OAEG;IACH,OAAO,CAAC,uBAAuB;IA0B/B;;OAEG;IACH,OAAO,CAAC,2BAA2B;IAkEnC;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAuI3B;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAsB5B;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,oBAAoB;IAuM5B;;;;;;;;;OASG;IACH,OAAO,CAAC,wBAAwB;IAwDhC;;;OAGG;IACH,OAAO,CAAC,8BAA8B;IAuBtC;;;OAGG;IACH,OAAO,CAAC,wBAAwB;IA8BhC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAW9B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAO1B,OAAO,CAAC,oBAAoB;IAoH5B;;OAEG;IACH,OAAO,CAAC,YAAY;IASpB;;;OAGG;IACH,OAAO,CAAC,eAAe;IASvB;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IAiB9B;;;OAGG;IACH,OAAO,CAAC,kBAAkB;CAmB3B"}
@@ -1,13 +1,19 @@
1
1
  /**
2
2
  * Security Assessor Module
3
3
  * Tests for backend API security vulnerabilities using 20 focused patterns
4
- * - Critical Injection (6): Command, Calculator, SQL, Path Traversal, XXE, NoSQL
5
- * - Input Validation (3): Type Safety, Boundary Testing, Required Fields
6
- * - Protocol Compliance (2): MCP Error Format, Timeout Handling
7
- * - Tool-Specific (7): SSRF, Unicode Bypass, Nested Injection, Package Squatting,
8
- * Data Exfiltration, Configuration Drift, Tool Shadowing
9
- * - Resource Exhaustion (1): DoS/Resource Exhaustion
10
- * - Deserialization (1): Insecure Deserialization
4
+ *
5
+ * BASIC MODE (5 patterns - enableDomainTesting=false):
6
+ * Command Injection, Calculator Injection, SQL Injection, Path Traversal, Unicode Bypass
7
+ *
8
+ * ADVANCED MODE (all 20 patterns - enableDomainTesting=true):
9
+ * - Critical Injection (6): Command, Calculator, SQL, Path Traversal, XXE, NoSQL
10
+ * - Input Validation (3): Type Safety, Boundary Testing, Required Fields
11
+ * - Protocol Compliance (2): MCP Error Format, Timeout Handling
12
+ * - Tool-Specific (6): SSRF, Nested Injection, Package Squatting,
13
+ * Data Exfiltration, Configuration Drift, Tool Shadowing
14
+ * - Encoding Bypass (1): Unicode Bypass
15
+ * - Resource Exhaustion (1): DoS/Resource Exhaustion
16
+ * - Deserialization (1): Insecure Deserialization
11
17
  */
12
18
  import { BaseAssessor } from "./BaseAssessor.js";
13
19
  import { getAllAttackPatterns, getPayloadsForAttack, } from "../../../lib/securityPatterns.js";
@@ -16,13 +16,17 @@ export declare class TemporalAssessor extends BaseAssessor {
16
16
  /**
17
17
  * Tool name patterns that are expected to have state-dependent responses.
18
18
  * These tools legitimately return different results based on data state,
19
- * which is NOT a rug pull vulnerability (e.g., search returning more results
20
- * after other tools have stored data).
19
+ * which is NOT a rug pull vulnerability.
21
20
  *
22
- * NOTE: Uses substring matching, so "get" matches "get_user", "forget",
23
- * "target", etc. This favors recall over precision - we prefer lenient
24
- * schema comparison for edge cases over false positives on legitimate tools.
25
- * Consider word-boundary regex if false positives become problematic.
21
+ * Includes both:
22
+ * - READ operations: search, list, query return more results after data stored
23
+ * - ACCUMULATION operations: add, append, store return accumulated state (counts, IDs)
24
+ *
25
+ * NOTE: Does NOT include patterns already in DESTRUCTIVE_PATTERNS (create, write,
26
+ * insert, etc.) - those need strict comparison to detect real rug pulls.
27
+ *
28
+ * Uses word-boundary matching to prevent false matches.
29
+ * "add_observations" matches "add" but "address_validator" does not.
26
30
  */
27
31
  private readonly STATEFUL_TOOL_PATTERNS;
28
32
  constructor(config: AssessmentConfiguration);
@@ -51,8 +55,12 @@ export declare class TemporalAssessor extends BaseAssessor {
51
55
  private isDestructiveTool;
52
56
  /**
53
57
  * Check if a tool is expected to have state-dependent behavior.
54
- * Stateful tools (search, list, etc.) legitimately return different
58
+ * Stateful tools (search, list, add, store, etc.) legitimately return different
55
59
  * results as underlying data changes - this is NOT a rug pull.
60
+ *
61
+ * Uses word-boundary matching to prevent false positives:
62
+ * - "add_observations" matches "add" ✓
63
+ * - "address_validator" does NOT match "add" ✓
56
64
  */
57
65
  private isStatefulTool;
58
66
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"TemporalAssessor.d.ts","sourceRoot":"","sources":["../../../../src/services/assessment/modules/TemporalAssessor.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,uBAAuB,EAEvB,kBAAkB,EAEnB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AA+B9C,qBAAa,gBAAiB,SAAQ,YAAY;IAChD,OAAO,CAAC,kBAAkB,CAAS;IAGnC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAoBnC;IAGF,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAU;IAEjD;;;;;;;;;;OAUG;IACH,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CASrC;gBAEU,MAAM,EAAE,uBAAuB;IAKrC,MAAM,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC;YAqEvD,UAAU;IAuHxB;;;OAGG;IACH,OAAO,CAAC,wBAAwB;IAkChC,OAAO,CAAC,gBAAgB;IAmFxB;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAsC3B;;;;OAIG;IACH,OAAO,CAAC,iBAAiB;IAoDzB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAKzB;;;;OAIG;IACH,OAAO,CAAC,cAAc;IAYtB;;;;;;OAMG;IACH,OAAO,CAAC,cAAc;IAuBtB;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAiCzB,OAAO,CAAC,uBAAuB;IAa/B,OAAO,CAAC,mBAAmB;IA+C3B,OAAO,CAAC,uBAAuB;CA+DhC"}
1
+ {"version":3,"file":"TemporalAssessor.d.ts","sourceRoot":"","sources":["../../../../src/services/assessment/modules/TemporalAssessor.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,uBAAuB,EAEvB,kBAAkB,EAEnB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AA+B9C,qBAAa,gBAAiB,SAAQ,YAAY;IAChD,OAAO,CAAC,kBAAkB,CAAS;IAGnC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAoBnC;IAGF,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAU;IAEjD;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAqBrC;gBAEU,MAAM,EAAE,uBAAuB;IAKrC,MAAM,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC;YAqEvD,UAAU;IAuHxB;;;OAGG;IACH,OAAO,CAAC,wBAAwB;IAkChC,OAAO,CAAC,gBAAgB;IAmFxB;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAsC3B;;;;OAIG;IACH,OAAO,CAAC,iBAAiB;IAiFzB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAKzB;;;;;;;;OAQG;IACH,OAAO,CAAC,cAAc;IAetB;;;;;;OAMG;IACH,OAAO,CAAC,cAAc;IAuBtB;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAiCzB,OAAO,CAAC,uBAAuB;IAa/B,OAAO,CAAC,mBAAmB;IA+C3B,OAAO,CAAC,uBAAuB;CA+DhC"}
@@ -38,15 +38,20 @@ export class TemporalAssessor extends BaseAssessor {
38
38
  /**
39
39
  * Tool name patterns that are expected to have state-dependent responses.
40
40
  * These tools legitimately return different results based on data state,
41
- * which is NOT a rug pull vulnerability (e.g., search returning more results
42
- * after other tools have stored data).
41
+ * which is NOT a rug pull vulnerability.
43
42
  *
44
- * NOTE: Uses substring matching, so "get" matches "get_user", "forget",
45
- * "target", etc. This favors recall over precision - we prefer lenient
46
- * schema comparison for edge cases over false positives on legitimate tools.
47
- * Consider word-boundary regex if false positives become problematic.
43
+ * Includes both:
44
+ * - READ operations: search, list, query return more results after data stored
45
+ * - ACCUMULATION operations: add, append, store return accumulated state (counts, IDs)
46
+ *
47
+ * NOTE: Does NOT include patterns already in DESTRUCTIVE_PATTERNS (create, write,
48
+ * insert, etc.) - those need strict comparison to detect real rug pulls.
49
+ *
50
+ * Uses word-boundary matching to prevent false matches.
51
+ * "add_observations" matches "add" but "address_validator" does not.
48
52
  */
49
53
  STATEFUL_TOOL_PATTERNS = [
54
+ // READ operations - results depend on current data state
50
55
  "search",
51
56
  "list",
52
57
  "query",
@@ -55,6 +60,17 @@ export class TemporalAssessor extends BaseAssessor {
55
60
  "fetch",
56
61
  "read",
57
62
  "browse",
63
+ // ACCUMULATION operations (non-destructive) that return accumulated state
64
+ // These legitimately return different counts/IDs as data accumulates
65
+ // NOTE: "add" is NOT in DESTRUCTIVE_PATTERNS, unlike "insert", "create", "write"
66
+ "add",
67
+ "append",
68
+ "store",
69
+ "save",
70
+ "log",
71
+ "record",
72
+ "push",
73
+ "enqueue",
58
74
  ];
59
75
  constructor(config) {
60
76
  super(config);
@@ -370,6 +386,23 @@ export class TemporalAssessor extends BaseAssessor {
370
386
  .replace(/\\"sequence\\":\s*\d+/g, '\\"sequence\\": <NUMBER>')
371
387
  .replace(/"index":\s*\d+/g, '"index": <NUMBER>')
372
388
  .replace(/\\"index\\":\s*\d+/g, '\\"index\\": <NUMBER>')
389
+ // Additional accumulation-related counter fields (defense-in-depth)
390
+ .replace(/"total_observations":\s*\d+/g, '"total_observations": <NUMBER>')
391
+ .replace(/\\"total_observations\\":\s*\d+/g, '\\"total_observations\\": <NUMBER>')
392
+ .replace(/"observations_count":\s*\d+/g, '"observations_count": <NUMBER>')
393
+ .replace(/\\"observations_count\\":\s*\d+/g, '\\"observations_count\\": <NUMBER>')
394
+ .replace(/"total_records":\s*\d+/g, '"total_records": <NUMBER>')
395
+ .replace(/\\"total_records\\":\s*\d+/g, '\\"total_records\\": <NUMBER>')
396
+ .replace(/"records_added":\s*\d+/g, '"records_added": <NUMBER>')
397
+ .replace(/\\"records_added\\":\s*\d+/g, '\\"records_added\\": <NUMBER>')
398
+ .replace(/"items_added":\s*\d+/g, '"items_added": <NUMBER>')
399
+ .replace(/\\"items_added\\":\s*\d+/g, '\\"items_added\\": <NUMBER>')
400
+ .replace(/"size":\s*\d+/g, '"size": <NUMBER>')
401
+ .replace(/\\"size\\":\s*\d+/g, '\\"size\\": <NUMBER>')
402
+ .replace(/"length":\s*\d+/g, '"length": <NUMBER>')
403
+ .replace(/\\"length\\":\s*\d+/g, '\\"length\\": <NUMBER>')
404
+ .replace(/"total":\s*\d+/g, '"total": <NUMBER>')
405
+ .replace(/\\"total\\":\s*\d+/g, '\\"total\\": <NUMBER>')
373
406
  // String IDs
374
407
  .replace(/"id":\s*"[^"]+"/g, '"id": "<ID>"')
375
408
  // P2-1: Additional timestamp fields that vary between calls
@@ -386,8 +419,12 @@ export class TemporalAssessor extends BaseAssessor {
386
419
  }
387
420
  /**
388
421
  * Check if a tool is expected to have state-dependent behavior.
389
- * Stateful tools (search, list, etc.) legitimately return different
422
+ * Stateful tools (search, list, add, store, etc.) legitimately return different
390
423
  * results as underlying data changes - this is NOT a rug pull.
424
+ *
425
+ * Uses word-boundary matching to prevent false positives:
426
+ * - "add_observations" matches "add" ✓
427
+ * - "address_validator" does NOT match "add" ✓
391
428
  */
392
429
  isStatefulTool(tool) {
393
430
  const toolName = tool.name.toLowerCase();
@@ -396,7 +433,12 @@ export class TemporalAssessor extends BaseAssessor {
396
433
  if (this.isDestructiveTool(tool)) {
397
434
  return false;
398
435
  }
399
- return this.STATEFUL_TOOL_PATTERNS.some((pattern) => toolName.includes(pattern));
436
+ // Use word-boundary matching: pattern must be at start/end or bounded by _ or -
437
+ // This prevents "address_validator" from matching "add"
438
+ return this.STATEFUL_TOOL_PATTERNS.some((pattern) => {
439
+ const wordBoundaryRegex = new RegExp(`(^|_|-)${pattern}($|_|-)`);
440
+ return wordBoundaryRegex.test(toolName);
441
+ });
400
442
  }
401
443
  /**
402
444
  * Compare response schemas (field names) rather than full content.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bryan-thompson/inspector-assessment-client",
3
- "version": "1.19.5",
3
+ "version": "1.19.7",
4
4
  "description": "Client-side application for the Enhanced MCP Inspector with assessment capabilities",
5
5
  "license": "MIT",
6
6
  "author": "Bryan Thompson <bryan@triepod.ai>",