@bryan-thompson/inspector-assessment 1.19.0 → 1.19.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.
@@ -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-B5_VY0TC.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-O3f3KjpP.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-B5_VY0TC.js";
1
+ import { r as reactExports, S as SESSION_KEYS, p as parseOAuthCallbackParams, j as jsxRuntimeExports, g as generateOAuthErrorDescription } from "./index-O3f3KjpP.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.0";
16323
+ const version$1 = "1.19.2";
16324
16324
  const packageJson = {
16325
16325
  name,
16326
16326
  version: version$1
@@ -45337,7 +45337,7 @@ const useTheme = () => {
45337
45337
  [theme, setThemeWithSideEffect]
45338
45338
  );
45339
45339
  };
45340
- const version = "1.19.0";
45340
+ const version = "1.19.2";
45341
45341
  var [createTooltipContext] = createContextScope("Tooltip", [
45342
45342
  createPopperScope
45343
45343
  ]);
@@ -53110,11 +53110,7 @@ class SecurityAssessor extends BaseAssessor {
53110
53110
  /gateway timeout/i,
53111
53111
  // HTTP 504 (gateway timeout)
53112
53112
  /unknown tool:/i,
53113
- // Tool name not in current server's tool list (stale tool list)
53114
- /tool.*not found/i,
53115
- // Alternative phrasing for missing tool
53116
- /tool.*does not exist/i,
53117
- // Alternative phrasing for missing tool
53113
+ // MCP spec format: "Unknown tool: <name>"
53118
53114
  /no such tool/i
53119
53115
  // Alternative phrasing for missing tool
53120
53116
  ];
@@ -53182,11 +53178,7 @@ class SecurityAssessor extends BaseAssessor {
53182
53178
  /gateway timeout/i,
53183
53179
  // HTTP 504 (gateway timeout)
53184
53180
  /unknown tool:/i,
53185
- // Tool name not in current server's tool list (stale tool list)
53186
- /tool.*not found/i,
53187
- // Alternative phrasing for missing tool
53188
- /tool.*does not exist/i,
53189
- // Alternative phrasing for missing tool
53181
+ // MCP spec format: "Unknown tool: <name>"
53190
53182
  /no such tool/i
53191
53183
  // Alternative phrasing for missing tool
53192
53184
  ];
@@ -53840,8 +53832,12 @@ class SecurityAssessor extends BaseAssessor {
53840
53832
  *
53841
53833
  * HIGH confidence: System files, commands, directory listings
53842
53834
  * MEDIUM confidence: Contextual patterns (root alone, paths)
53835
+ *
53836
+ * IMPORTANT: Excludes patterns that appear within echoed injection payloads
53837
+ * (e.g., /etc/passwd within an XXE entity definition is NOT execution evidence)
53843
53838
  */
53844
53839
  detectExecutionArtifacts(responseText) {
53840
+ const containsEchoedPayload = this.containsEchoedInjectionPayload(responseText);
53845
53841
  const executionIndicators = [
53846
53842
  // HIGH CONFIDENCE - System files (requires format)
53847
53843
  /[a-z]+:x:\d+:\d+:/i,
@@ -53868,13 +53864,58 @@ class SecurityAssessor extends BaseAssessor {
53868
53864
  // "root" alone on line (whoami)
53869
53865
  /\/root\//i,
53870
53866
  // Path: "/root/"
53871
- /\/etc\/passwd/i,
53872
- // Sensitive file
53873
53867
  // MEDIUM CONFIDENCE - Process info
53874
53868
  /PID:\s*\d{3,}/i
53875
53869
  // Process ID
53876
53870
  ];
53877
- return executionIndicators.some((pattern2) => pattern2.test(responseText));
53871
+ const contextSensitiveIndicators = [
53872
+ /\/etc\/passwd/i,
53873
+ // Sensitive file - appears in XXE payloads
53874
+ /\/etc\/shadow/i,
53875
+ // Sensitive file - appears in XXE payloads
53876
+ /file:\/\/\//i
53877
+ // File protocol - appears in XXE/SSRF payloads
53878
+ ];
53879
+ if (executionIndicators.some((pattern2) => pattern2.test(responseText))) {
53880
+ return true;
53881
+ }
53882
+ if (!containsEchoedPayload) {
53883
+ if (contextSensitiveIndicators.some((pattern2) => pattern2.test(responseText))) {
53884
+ return true;
53885
+ }
53886
+ }
53887
+ return false;
53888
+ }
53889
+ /**
53890
+ * Check if response contains echoed injection payload patterns
53891
+ * These indicate the tool is safely echoing/storing input rather than executing it
53892
+ */
53893
+ containsEchoedInjectionPayload(responseText) {
53894
+ const echoedPayloadPatterns = [
53895
+ // XXE payload markers (echoed XML entity definitions)
53896
+ /<!DOCTYPE\s+\w+\s+\[/i,
53897
+ // DOCTYPE with internal subset
53898
+ /<!ENTITY\s+\w+\s+SYSTEM/i,
53899
+ // External entity definition
53900
+ /<!ENTITY\s+%\s*\w+/i,
53901
+ // Parameter entity
53902
+ // SSRF/URL payload markers (echoed in storage context)
53903
+ /stored.*http:\/\//i,
53904
+ // "Stored query: http://..."
53905
+ /saved.*http:\/\//i,
53906
+ // "Saved: http://..."
53907
+ // SQL injection payload markers (echoed)
53908
+ /stored.*union\s+select/i,
53909
+ // "Stored query: UNION SELECT..."
53910
+ /stored.*drop\s+table/i,
53911
+ // "Stored query: DROP TABLE..."
53912
+ // Common echo/storage patterns with payload content
53913
+ /stored\s+query:\s*[<'"]/i,
53914
+ // "Stored query: <xml..." or "Stored query: '..."
53915
+ /saved\s+data:\s*[<'"]/i
53916
+ // "Saved data: <xml..."
53917
+ ];
53918
+ return echoedPayloadPatterns.some((pattern2) => pattern2.test(responseText));
53878
53919
  }
53879
53920
  /**
53880
53921
  * Analyze injection response (existing logic)
@@ -59061,13 +59102,13 @@ const App = () => {
59061
59102
  ) });
59062
59103
  if (window.location.pathname === "/oauth/callback") {
59063
59104
  const OAuthCallback = React.lazy(
59064
- () => __vitePreload(() => import("./OAuthCallback-D_dKq_wM.js"), true ? [] : void 0)
59105
+ () => __vitePreload(() => import("./OAuthCallback-BH_aUBF0.js"), true ? [] : void 0)
59065
59106
  );
59066
59107
  return /* @__PURE__ */ jsxRuntimeExports.jsx(reactExports.Suspense, { fallback: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { children: "Loading..." }), children: /* @__PURE__ */ jsxRuntimeExports.jsx(OAuthCallback, { onConnect: onOAuthConnect }) });
59067
59108
  }
59068
59109
  if (window.location.pathname === "/oauth/callback/debug") {
59069
59110
  const OAuthDebugCallback = React.lazy(
59070
- () => __vitePreload(() => import("./OAuthDebugCallback-UqARwe_4.js"), true ? [] : void 0)
59111
+ () => __vitePreload(() => import("./OAuthDebugCallback-hhATDmh0.js"), true ? [] : void 0)
59071
59112
  );
59072
59113
  return /* @__PURE__ */ jsxRuntimeExports.jsx(reactExports.Suspense, { fallback: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { children: "Loading..." }), children: /* @__PURE__ */ jsxRuntimeExports.jsx(OAuthDebugCallback, { onConnect: onOAuthDebugConnect }) });
59073
59114
  }
@@ -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-B5_VY0TC.js"></script>
8
+ <script type="module" crossorigin src="/assets/index-O3f3KjpP.js"></script>
9
9
  <link rel="stylesheet" crossorigin href="/assets/index-32-uLPhe.css">
10
10
  </head>
11
11
  <body>
@@ -142,8 +142,16 @@ export declare class SecurityAssessor extends BaseAssessor {
142
142
  *
143
143
  * HIGH confidence: System files, commands, directory listings
144
144
  * MEDIUM confidence: Contextual patterns (root alone, paths)
145
+ *
146
+ * IMPORTANT: Excludes patterns that appear within echoed injection payloads
147
+ * (e.g., /etc/passwd within an XXE entity definition is NOT execution evidence)
145
148
  */
146
149
  private detectExecutionArtifacts;
150
+ /**
151
+ * Check if response contains echoed injection payload patterns
152
+ * These indicate the tool is safely echoing/storing input rather than executing it
153
+ */
154
+ private containsEchoedInjectionPayload;
147
155
  /**
148
156
  * Analyze injection response (existing logic)
149
157
  * Note: payload parameter unused after refactoring to two-layer defense
@@ -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;IA2JnC;;OAEG;YACW,WAAW;IA2HzB;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB;IAkDzB;;;OAGG;IACH,OAAO,CAAC,8BAA8B;IAmDtC;;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;;;;;;OAMG;IACH,OAAO,CAAC,wBAAwB;IA8BhC;;;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;;;;;;;;;;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;IA2JnC;;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"}
@@ -460,9 +460,7 @@ export class SecurityAssessor extends BaseAssessor {
460
460
  /error GETting.*endpoint/i, // Transport layer GET errors (requires 'endpoint' to avoid false positives)
461
461
  /service unavailable/i, // HTTP 503 (server down)
462
462
  /gateway timeout/i, // HTTP 504 (gateway timeout)
463
- /unknown tool:/i, // Tool name not in current server's tool list (stale tool list)
464
- /tool.*not found/i, // Alternative phrasing for missing tool
465
- /tool.*does not exist/i, // Alternative phrasing for missing tool
463
+ /unknown tool:/i, // MCP spec format: "Unknown tool: <name>"
466
464
  /no such tool/i, // Alternative phrasing for missing tool
467
465
  ];
468
466
  // Check unambiguous patterns first
@@ -510,9 +508,7 @@ export class SecurityAssessor extends BaseAssessor {
510
508
  /error GETting/i, // Transport layer GET errors
511
509
  /service unavailable/i, // HTTP 503 (server down)
512
510
  /gateway timeout/i, // HTTP 504 (gateway timeout)
513
- /unknown tool:/i, // Tool name not in current server's tool list (stale tool list)
514
- /tool.*not found/i, // Alternative phrasing for missing tool
515
- /tool.*does not exist/i, // Alternative phrasing for missing tool
511
+ /unknown tool:/i, // MCP spec format: "Unknown tool: <name>"
516
512
  /no such tool/i, // Alternative phrasing for missing tool
517
513
  ];
518
514
  // Check unambiguous patterns first
@@ -1259,8 +1255,14 @@ export class SecurityAssessor extends BaseAssessor {
1259
1255
  *
1260
1256
  * HIGH confidence: System files, commands, directory listings
1261
1257
  * MEDIUM confidence: Contextual patterns (root alone, paths)
1258
+ *
1259
+ * IMPORTANT: Excludes patterns that appear within echoed injection payloads
1260
+ * (e.g., /etc/passwd within an XXE entity definition is NOT execution evidence)
1262
1261
  */
1263
1262
  detectExecutionArtifacts(responseText) {
1263
+ // First, check if this response contains echoed injection payload patterns
1264
+ // If so, we need to be more careful about what we consider "execution evidence"
1265
+ const containsEchoedPayload = this.containsEchoedInjectionPayload(responseText);
1264
1266
  const executionIndicators = [
1265
1267
  // HIGH CONFIDENCE - System files (requires format)
1266
1268
  /[a-z]+:x:\d+:\d+:/i, // passwd: "root:x:0:0:"
@@ -1277,11 +1279,49 @@ export class SecurityAssessor extends BaseAssessor {
1277
1279
  // MEDIUM CONFIDENCE - System identity (contextual only)
1278
1280
  /\b(root|administrator)\s*$/im, // "root" alone on line (whoami)
1279
1281
  /\/root\//i, // Path: "/root/"
1280
- /\/etc\/passwd/i, // Sensitive file
1281
1282
  // MEDIUM CONFIDENCE - Process info
1282
1283
  /PID:\s*\d{3,}/i, // Process ID
1283
1284
  ];
1284
- return executionIndicators.some((pattern) => pattern.test(responseText));
1285
+ // Patterns that indicate execution ONLY if NOT in an echoed payload context
1286
+ // These patterns can appear in injection payloads (XXE, SSRF, etc.)
1287
+ const contextSensitiveIndicators = [
1288
+ /\/etc\/passwd/i, // Sensitive file - appears in XXE payloads
1289
+ /\/etc\/shadow/i, // Sensitive file - appears in XXE payloads
1290
+ /file:\/\/\//i, // File protocol - appears in XXE/SSRF payloads
1291
+ ];
1292
+ // Check high-confidence indicators first (always count as execution)
1293
+ if (executionIndicators.some((pattern) => pattern.test(responseText))) {
1294
+ return true;
1295
+ }
1296
+ // Check context-sensitive indicators only if NOT in echoed payload context
1297
+ if (!containsEchoedPayload) {
1298
+ if (contextSensitiveIndicators.some((pattern) => pattern.test(responseText))) {
1299
+ return true;
1300
+ }
1301
+ }
1302
+ return false;
1303
+ }
1304
+ /**
1305
+ * Check if response contains echoed injection payload patterns
1306
+ * These indicate the tool is safely echoing/storing input rather than executing it
1307
+ */
1308
+ containsEchoedInjectionPayload(responseText) {
1309
+ const echoedPayloadPatterns = [
1310
+ // XXE payload markers (echoed XML entity definitions)
1311
+ /<!DOCTYPE\s+\w+\s+\[/i, // DOCTYPE with internal subset
1312
+ /<!ENTITY\s+\w+\s+SYSTEM/i, // External entity definition
1313
+ /<!ENTITY\s+%\s*\w+/i, // Parameter entity
1314
+ // SSRF/URL payload markers (echoed in storage context)
1315
+ /stored.*http:\/\//i, // "Stored query: http://..."
1316
+ /saved.*http:\/\//i, // "Saved: http://..."
1317
+ // SQL injection payload markers (echoed)
1318
+ /stored.*union\s+select/i, // "Stored query: UNION SELECT..."
1319
+ /stored.*drop\s+table/i, // "Stored query: DROP TABLE..."
1320
+ // Common echo/storage patterns with payload content
1321
+ /stored\s+query:\s*[<'"]/i, // "Stored query: <xml..." or "Stored query: '..."
1322
+ /saved\s+data:\s*[<'"]/i, // "Saved data: <xml..."
1323
+ ];
1324
+ return echoedPayloadPatterns.some((pattern) => pattern.test(responseText));
1285
1325
  }
1286
1326
  /**
1287
1327
  * Analyze injection response (existing logic)
@@ -1 +1 @@
1
- {"version":3,"file":"ToolAnnotationAssessor.d.ts","sourceRoot":"","sources":["../../../../src/services/assessment/modules/ToolAnnotationAssessor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,KAAK,EACV,wBAAwB,EACxB,oBAAoB,EAKpB,uBAAuB,EAExB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EACL,KAAK,gBAAgB,EAGtB,MAAM,8BAA8B,CAAC;AAgNtC;;GAEG;AACH,MAAM,WAAW,4BAA6B,SAAQ,oBAAoB;IACxE,eAAe,CAAC,EAAE;QAChB,gBAAgB,EAAE,OAAO,CAAC;QAC1B,mBAAmB,EAAE,OAAO,CAAC;QAC7B,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,oBAAoB,EAAE;YACpB,YAAY,CAAC,EAAE,OAAO,CAAC;YACvB,eAAe,CAAC,EAAE,OAAO,CAAC;YAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;SAC1B,CAAC;QACF,oBAAoB,EAAE,OAAO,CAAC;QAC9B,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,MAAM,EAAE,iBAAiB,GAAG,eAAe,CAAC;KAC7C,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,gCAAiC,SAAQ,wBAAwB;IAChF,WAAW,EAAE,4BAA4B,EAAE,CAAC;IAC5C,cAAc,EAAE,OAAO,CAAC;IACxB,2BAA2B,EAAE,4BAA4B,EAAE,CAAC;CAC7D;AAKD,qBAAa,sBAAuB,SAAQ,YAAY;IACtD,OAAO,CAAC,YAAY,CAAC,CAAmB;IACxC,OAAO,CAAC,gBAAgB,CAAmB;gBAE/B,MAAM,EAAE,uBAAuB;IAM3C;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI;IAK7C;;OAEG;IACH,eAAe,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI;IAK/C;;OAEG;IACH,eAAe,IAAI,OAAO;IAO1B;;OAEG;IACG,MAAM,CACV,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,wBAAwB,GAAG,gCAAgC,CAAC;IAkSvE;;OAEG;YACW,0BAA0B;IA+IxC;;OAEG;IACH,OAAO,CAAC,2BAA2B;IAiCnC;;OAEG;IACH,OAAO,CAAC,+BAA+B;IAoFvC;;;OAGG;IACH,OAAO,CAAC,UAAU;IA2HlB;;;OAGG;IACH,OAAO,CAAC,2BAA2B;IA2DnC;;;;;;;;;OASG;IACH,OAAO,CAAC,kBAAkB;IAyE1B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAuBzB;;;OAGG;IACH,OAAO,CAAC,aAAa;IAgGrB;;;OAGG;IACH,OAAO,CAAC,yBAAyB;IA0DjC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAiDxB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAmC3B;;OAEG;IACH,OAAO,CAAC,uBAAuB;CA2ChC"}
1
+ {"version":3,"file":"ToolAnnotationAssessor.d.ts","sourceRoot":"","sources":["../../../../src/services/assessment/modules/ToolAnnotationAssessor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,KAAK,EACV,wBAAwB,EACxB,oBAAoB,EAKpB,uBAAuB,EAExB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EACL,KAAK,gBAAgB,EAGtB,MAAM,8BAA8B,CAAC;AAmNtC;;GAEG;AACH,MAAM,WAAW,4BAA6B,SAAQ,oBAAoB;IACxE,eAAe,CAAC,EAAE;QAChB,gBAAgB,EAAE,OAAO,CAAC;QAC1B,mBAAmB,EAAE,OAAO,CAAC;QAC7B,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,oBAAoB,EAAE;YACpB,YAAY,CAAC,EAAE,OAAO,CAAC;YACvB,eAAe,CAAC,EAAE,OAAO,CAAC;YAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;SAC1B,CAAC;QACF,oBAAoB,EAAE,OAAO,CAAC;QAC9B,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,MAAM,EAAE,iBAAiB,GAAG,eAAe,CAAC;KAC7C,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,gCAAiC,SAAQ,wBAAwB;IAChF,WAAW,EAAE,4BAA4B,EAAE,CAAC;IAC5C,cAAc,EAAE,OAAO,CAAC;IACxB,2BAA2B,EAAE,4BAA4B,EAAE,CAAC;CAC7D;AAKD,qBAAa,sBAAuB,SAAQ,YAAY;IACtD,OAAO,CAAC,YAAY,CAAC,CAAmB;IACxC,OAAO,CAAC,gBAAgB,CAAmB;gBAE/B,MAAM,EAAE,uBAAuB;IAM3C;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI;IAK7C;;OAEG;IACH,eAAe,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI;IAK/C;;OAEG;IACH,eAAe,IAAI,OAAO;IAO1B;;OAEG;IACG,MAAM,CACV,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,wBAAwB,GAAG,gCAAgC,CAAC;IAkSvE;;OAEG;YACW,0BAA0B;IA+IxC;;OAEG;IACH,OAAO,CAAC,2BAA2B;IAiCnC;;OAEG;IACH,OAAO,CAAC,+BAA+B;IAoFvC;;;OAGG;IACH,OAAO,CAAC,UAAU;IA2HlB;;;OAGG;IACH,OAAO,CAAC,2BAA2B;IA2DnC;;;;;;;;;OASG;IACH,OAAO,CAAC,kBAAkB;IAyE1B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAuBzB;;;OAGG;IACH,OAAO,CAAC,aAAa;IAgGrB;;;OAGG;IACH,OAAO,CAAC,yBAAyB;IA0DjC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAiDxB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAmC3B;;OAEG;IACH,OAAO,CAAC,uBAAuB;CA2ChC"}
@@ -91,7 +91,9 @@ const DESCRIPTION_POISONING_PATTERNS = [
91
91
  },
92
92
  {
93
93
  name: "include_credentials",
94
- pattern: /include.*(api.?key|credential|password|secret)/i,
94
+ // More specific: requires directive context (in/with/when/to) to reduce false positives
95
+ // from legitimate documentation like "does not include credential storage"
96
+ pattern: /include\s+(the\s+|all\s+|your\s+)?(api.?key|credential|password|secret)s?\s*(in|with|when|to)/i,
95
97
  severity: "HIGH",
96
98
  category: "exfiltration",
97
99
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bryan-thompson/inspector-assessment",
3
- "version": "1.19.0",
3
+ "version": "1.19.2",
4
4
  "description": "Enhanced MCP Inspector with comprehensive assessment capabilities for server validation",
5
5
  "license": "MIT",
6
6
  "author": "Bryan Thompson <bryan@triepod.ai>",
@@ -79,9 +79,9 @@
79
79
  "access": "public"
80
80
  },
81
81
  "dependencies": {
82
- "@bryan-thompson/inspector-assessment-cli": "^1.19.0",
83
- "@bryan-thompson/inspector-assessment-client": "^1.19.0",
84
- "@bryan-thompson/inspector-assessment-server": "^1.19.0",
82
+ "@bryan-thompson/inspector-assessment-cli": "^1.19.2",
83
+ "@bryan-thompson/inspector-assessment-client": "^1.19.2",
84
+ "@bryan-thompson/inspector-assessment-server": "^1.19.2",
85
85
  "@modelcontextprotocol/sdk": "^1.24.3",
86
86
  "concurrently": "^9.2.0",
87
87
  "node-fetch": "^3.3.2",