circle-ir-ai 2.33.4 → 2.34.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.
@@ -282,16 +282,51 @@ export function isKnownNonSink(code, sinkType) {
282
282
  });
283
283
  }
284
284
  // ---------------------------------------------------------------------------
285
- // Fix 4 — nosql_injection on browser-side JS/HTML (#94)
285
+ // Fix 4 — nosql_injection on browser-side JS/HTML (#94) + browser-side
286
+ // SQL FP on Chrome-extension / Web-API `.query()` calls (cognium-ai#186)
286
287
  // ---------------------------------------------------------------------------
287
288
  /**
288
- * MongoDB / NoSQL drivers run server-side. The LLM occasionally flags
289
- * client-side `.find(...)`, `.aggregate(...)` calls on `.js`/`.html`
290
- * (jQuery selectors, DOM array methods) as `nosql_injection`. There is
291
- * no MongoDB driver in the browser by construction suppress the
292
- * entire CWE on browser file types.
289
+ * Strict browser-only file extensions used by `#94` `isNosqlOnBrowserFile`.
290
+ *
291
+ * MUST NOT include `.ts` / `.tsx` / `.mts` / `.cts` Node.js / Nest / Express
292
+ * backends written in TypeScript legitimately import `mongodb` / `mongoose`
293
+ * and call `.find()` / `.aggregate()` server-side. Extending this set to
294
+ * include `.ts` would silently drop real NoSQL injection findings on any
295
+ * TypeScript backend. `.js` / `.jsx` / `.mjs` / `.cjs` / `.html` / `.htm` are
296
+ * kept because the mongodb driver has no browser build for those either, and
297
+ * the historical evidence (`#94`) came from browser-side jQuery / DOM
298
+ * collections mis-classified as `.find()` sinks.
293
299
  */
294
300
  const BROWSER_JS_EXTS = new Set(['.js', '.jsx', '.mjs', '.cjs', '.html', '.htm']);
301
+ /**
302
+ * Wider "renderer / browser context" extension set used by
303
+ * `isBrowserQueryApi` (cognium-ai#186). Safe to include TypeScript / Vue /
304
+ * Svelte here because the code-shape regexes in `isBrowserQueryApi` are
305
+ * unambiguous browser signals:
306
+ *
307
+ * - `chrome.tabs.query(...)` / `browser.storage.local.query(...)` — WebExt
308
+ * - `navigator.permissions.query(...)` — Web Permissions API
309
+ * - `document.querySelector*(...)` — DOM
310
+ *
311
+ * None of these globals exist in Node.js, so gating on this wider extension
312
+ * set only suppresses code that had no chance of hitting a real DB driver.
313
+ * Kept separate from `BROWSER_JS_EXTS` so `isNosqlOnBrowserFile` continues
314
+ * to treat `.ts` as server-side.
315
+ */
316
+ const BROWSER_RENDERER_EXTS = new Set([
317
+ '.js',
318
+ '.jsx',
319
+ '.mjs',
320
+ '.cjs',
321
+ '.ts',
322
+ '.tsx',
323
+ '.mts',
324
+ '.cts',
325
+ '.html',
326
+ '.htm',
327
+ '.vue',
328
+ '.svelte',
329
+ ]);
295
330
  function fileExtension(file) {
296
331
  if (!file)
297
332
  return '';
@@ -306,6 +341,223 @@ export function isNosqlOnBrowserFile(sinkType, sinkFile) {
306
341
  return BROWSER_JS_EXTS.has(fileExtension(sinkFile));
307
342
  }
308
343
  // ---------------------------------------------------------------------------
344
+ // cognium-ai#186 — browser-side `.query()` mis-classified as SQL injection
345
+ // ---------------------------------------------------------------------------
346
+ /**
347
+ * Sink types this filter can suppress. `sql_injection` is the observed
348
+ * failure (BLOCKED tier on a Chrome MV3 extension in #186). `nosql_injection`
349
+ * is included defensively — the same call shapes (`.query({...})`) are
350
+ * plausible bait for the same misclassification on the LLM path.
351
+ */
352
+ const BROWSER_QUERY_SUPPRESSIBLE_SINK_TYPES = new Set([
353
+ 'sql_injection',
354
+ 'nosql_injection',
355
+ ]);
356
+ /**
357
+ * Regex for Chrome-extension `.query()` APIs and Web `navigator`/document
358
+ * `.query()` / `.querySelector*()` shapes that share the method name with
359
+ * SQL drivers but never route to a database.
360
+ *
361
+ * Anchored on the receiver so a real DB call (`db.query(...)`,
362
+ * `client.query(...)`, `pool.query(...)`) with an unfamiliar variable name
363
+ * still fires. The listed receivers are the standardised browser globals
364
+ * (`chrome`, `browser`, `navigator`, `document`, `window`) — user code
365
+ * that names a variable `chrome` will hit this filter, which is the
366
+ * accepted trade-off for suppressing the standard-API FP class.
367
+ *
368
+ * Coverage:
369
+ * - Chrome / WebExtension APIs:
370
+ * chrome.tabs.query, chrome.bookmarks.query, chrome.history.query,
371
+ * chrome.sessions.query, chrome.management.query,
372
+ * chrome.windows.getAll, chrome.storage.local.query (rare),
373
+ * chrome.notifications.getAll (not .query), and the equivalent
374
+ * `browser.*` namespace used by Firefox / Safari extensions.
375
+ * - Web Permissions API: navigator.permissions.query
376
+ * - DOM query APIs: document.querySelector, .querySelectorAll,
377
+ * element.querySelector*, window.matchMedia (adjacent shape)
378
+ *
379
+ * Non-goals (still real sinks):
380
+ * - `db.query(...)`, `client.query(...)`, `knex.raw(...)`,
381
+ * `mongoose.<model>.find(...)` — receiver isn't a browser global.
382
+ * - `req.query.<key>` — that's a *source*, not a sink; the source-type
383
+ * tagger already handles it.
384
+ */
385
+ const BROWSER_QUERY_RE = /\b(?:chrome|browser)\s*\.\s*(?:tabs|bookmarks|history|sessions|management|windows|storage(?:\.\s*(?:local|sync|managed|session))?|notifications|permissions|contextMenus)\s*\.\s*query\s*\(/;
386
+ const NAVIGATOR_PERMISSIONS_RE = /\bnavigator\s*\.\s*permissions\s*\.\s*query\s*\(/;
387
+ const DOM_QUERY_SELECTOR_RE = /\b(?:document|window|this|self|globalThis|[A-Za-z_$][\w$]*)\s*\.\s*querySelector(?:All)?\s*\(/;
388
+ /**
389
+ * True if the sink line is a browser / WebExtension `.query()` /
390
+ * `querySelector*` call. Gated on file extension so that server-side
391
+ * `chrome.query(...)` on a Node.js repo (unlikely but possible: a variable
392
+ * named `chrome` in server code) still fires normally.
393
+ *
394
+ * Confirmed downstream sighting: `cognium-meet` Chrome extension —
395
+ * `apps/extension/src/lib/settings-form.ts:177`
396
+ * (`navigator.permissions.query({ name: 'microphone' })`) and
397
+ * `apps/extension/src/popup/popup.ts:717`
398
+ * (`chrome.tabs.query({ active: true, currentWindow: true })`) both
399
+ * flagged as CRITICAL `sql_injection` → BLOCKED tier on trust score.
400
+ * Neither call touches a SQL driver.
401
+ */
402
+ export function isBrowserQueryApi(sinkCode, sinkType, sinkFile) {
403
+ if (!sinkCode || !sinkType)
404
+ return false;
405
+ if (!BROWSER_QUERY_SUPPRESSIBLE_SINK_TYPES.has(sinkType))
406
+ return false;
407
+ // File-extension gate: only browser / renderer-side files. Prevents a
408
+ // server-side variable named `chrome` from being silently suppressed.
409
+ // Uses BROWSER_RENDERER_EXTS (wider than BROWSER_JS_EXTS) because the
410
+ // chrome.*/navigator.*/document.* code shapes below are unambiguously
411
+ // browser — safe to widen to `.ts` / `.tsx` / `.vue` / `.svelte`.
412
+ if (!BROWSER_RENDERER_EXTS.has(fileExtension(sinkFile)))
413
+ return false;
414
+ const trimmed = sinkCode.trim();
415
+ if (!trimmed)
416
+ return false;
417
+ if (BROWSER_QUERY_RE.test(trimmed))
418
+ return true;
419
+ if (NAVIGATOR_PERMISSIONS_RE.test(trimmed))
420
+ return true;
421
+ if (DOM_QUERY_SELECTOR_RE.test(trimmed))
422
+ return true;
423
+ return false;
424
+ }
425
+ // ---------------------------------------------------------------------------
426
+ // cognium-ai#167 — library-internal FP gates 5, 6, 7 for XPath / XXE / crypto
427
+ // ---------------------------------------------------------------------------
428
+ //
429
+ // The 10-repo top-100 sweep on 2026-07-01 surfaced three sink families that
430
+ // share the same failure mode as cognium-dev#179's gates 1-4: the sink fires
431
+ // on the *library itself*, not on caller-controlled input reaching the
432
+ // library's public API. Each gate matches on the fully-qualified package
433
+ // path in the sink file — semver-stable and doesn't depend on repo name.
434
+ //
435
+ // Gate 5 (XPath): JsonPath ValueNodes.java (10 CRIT CWE-643) — the
436
+ // library's own predicate-node type
437
+ // Gate 6 (XXE): jsoup XML processing (5 CRIT CWE-611) — jsoup IS the
438
+ // parser being flagged
439
+ // Gate 7 (crypto): JJWT JcaTemplate.java + EcdhKeyAlgorithm.java (8 CRIT
440
+ // CWE-902 + CWE-310) — jjwt's JCA wrapper + ECDH-ES impl
441
+ /** Fully-qualified package paths for XPath / JsonPath-shaped libraries.
442
+ * Anchored on `/pkg/` (leading + trailing separator) so a class name like
443
+ * `MyJaxenParser.java` doesn't spuriously match. Case-insensitive because
444
+ * a few of these historically use mixed-case Maven `groupId`s. */
445
+ const XPATH_LIBRARY_PATH_RE = /(?:com\/jayway\/jsonpath|org\/jaxen|net\/sf\/saxon|org\/dom4j\/xpath)\//i;
446
+ /** Fully-qualified package paths for HTML / XML parser libraries whose own
447
+ * internal XML processing gets flagged CWE-611. The evidence-driven set:
448
+ * jsoup (5 CRIT in the 10-repo sweep) + adjacent HTML parser shapes. */
449
+ const XXE_PARSER_LIBRARY_PATH_RE = /(?:org\/jsoup|org\/htmlcleaner)\//i;
450
+ /** Sink types that gate 7 can suppress. `crypto_api` = high-level misuse
451
+ * (algorithm choice, mode, IV); `crypto` = lower-level primitive selection.
452
+ * Both fire on JJWT internals — the whole *point* of the library is to
453
+ * call `Cipher.getInstance(...)` / `KeyAgreement.getInstance(...)`. */
454
+ const CRYPTO_SUPPRESSIBLE_SINK_TYPES = new Set(['crypto_api', 'crypto']);
455
+ /** Fully-qualified package paths for crypto libraries whose own JCA-wrapping
456
+ * code gets flagged as unsafe crypto usage. */
457
+ const CRYPTO_LIBRARY_PATH_RE = /(?:io\/jsonwebtoken|com\/nimbusds\/jose|org\/bouncycastle|com\/google\/crypto\/tink)\//i;
458
+ /** JCA Service Provider Interface types. A class that extends/implements
459
+ * any of these IS a JCA SPI implementation — Cipher.getInstance / Mac.
460
+ * getInstance / etc. inside such a class are the intended implementation,
461
+ * not user-controlled crypto misuse. Backstop for crypto library code
462
+ * that isn't in the fully-qualified path set above. */
463
+ const JCA_SPI_TYPES = new Set([
464
+ 'CipherSpi',
465
+ 'MacSpi',
466
+ 'MessageDigestSpi',
467
+ 'KeyAgreementSpi',
468
+ 'SignatureSpi',
469
+ 'KeyFactorySpi',
470
+ 'SecretKeyFactorySpi',
471
+ 'KeyGeneratorSpi',
472
+ 'KeyPairGeneratorSpi',
473
+ 'AlgorithmParametersSpi',
474
+ 'SecureRandomSpi',
475
+ ]);
476
+ /**
477
+ * True when the sink is an `xpath_injection` inside a well-known XPath
478
+ * library package (JsonPath / Jaxen / Saxon / dom4j XPath). These libraries'
479
+ * own predicate-node / expression-node classes fire the xpath_injection
480
+ * rule because they syntactically wrap an XPath-shaped call — but they ARE
481
+ * the XPath engine, not user code reaching an unsafe evaluator.
482
+ *
483
+ * Confirmed evidence (cognium-ai#167): `json-path/JsonPath` — 10 CRIT
484
+ * findings in `ValueNodes.java:680,694`.
485
+ */
486
+ export function isXPathLibraryInternal(sinkType, sinkFile) {
487
+ if (sinkType !== 'xpath_injection')
488
+ return false;
489
+ if (!sinkFile)
490
+ return false;
491
+ return XPATH_LIBRARY_PATH_RE.test(sinkFile);
492
+ }
493
+ /**
494
+ * True when the sink is an `xxe` inside a well-known HTML/XML parser
495
+ * library (jsoup, htmlcleaner). These libraries' own XML processing paths
496
+ * fire the XXE rule because they syntactically call low-level XML APIs —
497
+ * but they ARE the parser, and their DTD/entity handling is a library
498
+ * configuration surface exposed to callers.
499
+ *
500
+ * Confirmed evidence (cognium-ai#167): `jhy/jsoup` — 5 CRIT CWE-611 in
501
+ * jsoup's own XML processing paths.
502
+ *
503
+ * Note: complements cognium-dev#166 (DocumentBuilderFactory FEATURE_
504
+ * SECURE_PROCESSING recognition). #166 covers DBF; this gate covers
505
+ * parser libraries that don't use DBF.
506
+ */
507
+ export function isXxeOnParserLibrary(sinkType, sinkFile) {
508
+ if (sinkType !== 'xxe')
509
+ return false;
510
+ if (!sinkFile)
511
+ return false;
512
+ return XXE_PARSER_LIBRARY_PATH_RE.test(sinkFile);
513
+ }
514
+ /**
515
+ * True when the sink is a `crypto_api` / `crypto` inside a well-known
516
+ * crypto library (JJWT, Nimbus JOSE, BouncyCastle, Tink) OR inside a
517
+ * class that extends/implements a JCA SPI type (`CipherSpi`, `MacSpi`,
518
+ * etc.). Crypto misuse rules fire on `Cipher.getInstance(...)` /
519
+ * `KeyAgreement.getInstance(...)` / algorithm-string sinks — but a JWT
520
+ * or JOSE library's whole purpose IS to wrap those calls, so the sink
521
+ * is the intended implementation, not caller-controlled misuse.
522
+ *
523
+ * Confirmed evidence (cognium-ai#167): `jwtk/jjwt` — 5× CWE-902 in
524
+ * `JcaTemplate.java:67`, 3× CWE-310 in `EcdhKeyAlgorithm.java:188`.
525
+ *
526
+ * Two-layer detection:
527
+ * 1. Fully-qualified package path match (fast; covers the 4 known
528
+ * library packages in `CRYPTO_LIBRARY_PATH_RE`).
529
+ * 2. JCA SPI subclass check via `types.implements[]` (backstop; catches
530
+ * third-party JCA providers not in the path set).
531
+ */
532
+ export function isCryptoLibraryInternal(sinkType, sinkFile, types, sinkLine) {
533
+ if (!sinkType || !CRYPTO_SUPPRESSIBLE_SINK_TYPES.has(sinkType))
534
+ return false;
535
+ // Layer 1: file-path heuristic.
536
+ if (sinkFile && CRYPTO_LIBRARY_PATH_RE.test(sinkFile))
537
+ return true;
538
+ // Layer 2: JCA SPI subclass check. Only fires when types + sinkLine are
539
+ // available (post-#111 callers). Missing bounds → skip → preserve recall.
540
+ if (!types || types.length === 0)
541
+ return false;
542
+ if (sinkLine == null || !Number.isFinite(sinkLine))
543
+ return false;
544
+ for (const t of types) {
545
+ if (t.kind !== 'class')
546
+ continue;
547
+ if (sinkLine < t.start_line || sinkLine > t.end_line)
548
+ continue;
549
+ for (const impl of t.implements) {
550
+ // `implements` carries simple names from circle-ir; tolerate the
551
+ // generic-parameter form (e.g. `CipherSpi<Foo>` — hypothetical but
552
+ // matches the #111 pattern).
553
+ const simple = impl.replace(/<.*$/, '').trim();
554
+ if (JCA_SPI_TYPES.has(simple))
555
+ return true;
556
+ }
557
+ }
558
+ return false;
559
+ }
560
+ // ---------------------------------------------------------------------------
309
561
  // Class-aware MyBatis Interceptor suppression (#111)
310
562
  // ---------------------------------------------------------------------------
311
563
  /**
@@ -367,6 +619,104 @@ export function isInsideMybatisInterceptor(types, sinkLine, sinkType) {
367
619
  return false;
368
620
  }
369
621
  // ---------------------------------------------------------------------------
622
+ // cognium-ai#172 — XSS FP: response.setContentType("application/json") set
623
+ // earlier in the same method as the writer sink
624
+ // ---------------------------------------------------------------------------
625
+ /**
626
+ * XSS sink types that can be suppressed by an in-scope
627
+ * `setContentType("application/json*")` — see `hasJsonContentTypeInScope`.
628
+ *
629
+ * Kept explicit rather than a broad `startsWith('xss')` so a future
630
+ * `xss_stored` (persisted-payload) sink type won't be inadvertently
631
+ * suppressed by a header set immediately before the write (persisted
632
+ * flows can still be exploitable when re-served without the same header).
633
+ */
634
+ const JSON_CT_SUPPRESSIBLE_SINK_TYPES = new Set([
635
+ 'xss',
636
+ 'reflected_xss',
637
+ 'dom_xss',
638
+ ]);
639
+ /**
640
+ * Regex for the servlet `HttpServletResponse.setContentType("application/json…")`
641
+ * pattern. Match is line-oriented and case-insensitive on the method name +
642
+ * MIME type so `.setContentType("Application/JSON")` still hits.
643
+ *
644
+ * Anchoring:
645
+ * - `setContentType` — method name, dotted or bare (matches
646
+ * `response.setContentType(...)` and `resp.setContentType(...)`)
647
+ * - opening quote → `application/json` — the MIME literal must actually
648
+ * start the string so `"text/html; application/json-hint"` (contrived
649
+ * but possible) doesn't false-positive
650
+ * - `application/json-patch+json` / `application/jsonrequest` etc. are
651
+ * NOT accepted — the `\b` anchor after `json` requires a delimiter
652
+ * (`"`, `;`, whitespace, `+`) that isn't `-` or letters, so `jsonp` /
653
+ * `json-patch` still trigger a browser HTML sniff → keep as XSS.
654
+ */
655
+ const SET_CONTENT_TYPE_JSON_RE = /setContentType\s*\(\s*["'`]application\/json\b(?![a-z\-])/i;
656
+ /**
657
+ * True if a `setContentType("application/json…")` call appears earlier in
658
+ * the same enclosing method as the sink. Suppresses XSS FPs on servlet
659
+ * `response.getWriter().println(...)` (and equivalent writer sinks) when
660
+ * the response Content-Type is already committed to JSON — modern browsers
661
+ * refuse to interpret an `application/json` body as HTML, so a reflected
662
+ * value in the JSON body can't fire an XSS payload.
663
+ *
664
+ * Confirmed example (cognium-ai#172): calcite-avatica `AvaticaJsonHandler`
665
+ * sets `application/json;charset=utf-8` at line 98 and writes at line 153,
666
+ * flagged as high-severity XSS pre-#172.
667
+ *
668
+ * Bounds are conservative:
669
+ * - Only fires when the sink line is inside a known method (`types` +
670
+ * `methods` + line range all present). Missing bounds → return false
671
+ * → treat as unsuppressed (preserve recall).
672
+ * - Only scans lines strictly BEFORE the sink line, inclusive of the
673
+ * method's opening line — a `setContentType` call AFTER the sink can't
674
+ * protect against the reflected value already having been written.
675
+ * - No cross-method / cross-file inference. If the caller sets JSON on
676
+ * the response and delegates to a helper that writes, the helper
677
+ * method still emits XSS (recall over precision for indirect flows).
678
+ * - Only matches `application/json` MIME literals — NOT `application/
679
+ * json-patch+json`, `application/jsonrequest`, or JSONP (`text/
680
+ * javascript` + a `?callback=` query). See the regex anchor.
681
+ */
682
+ export function hasJsonContentTypeInScope(sourceCode, types, sinkLine) {
683
+ if (!sourceCode || !types || types.length === 0)
684
+ return false;
685
+ if (sinkLine == null || !Number.isFinite(sinkLine) || sinkLine < 1)
686
+ return false;
687
+ // Locate the enclosing method. Uses the same inclusive-1-indexed bounds
688
+ // as source-classifier.ts::findEnclosing so the two stay consistent.
689
+ let methodStartLine;
690
+ for (const t of types) {
691
+ if (sinkLine < t.start_line || sinkLine > t.end_line)
692
+ continue;
693
+ for (const m of t.methods ?? []) {
694
+ if (sinkLine >= m.start_line && sinkLine <= m.end_line) {
695
+ methodStartLine = m.start_line;
696
+ break;
697
+ }
698
+ }
699
+ if (methodStartLine !== undefined)
700
+ break;
701
+ }
702
+ if (methodStartLine === undefined)
703
+ return false;
704
+ // Scan `[methodStart, sinkLine)` for the setContentType call. `split('\n')`
705
+ // yields a 0-indexed array; lines are 1-indexed in the schema, so line N
706
+ // is at index N-1.
707
+ const lines = sourceCode.split('\n');
708
+ const startIdx = Math.max(0, methodStartLine - 1);
709
+ const endIdx = Math.min(lines.length, sinkLine - 1); // exclusive of sink line
710
+ for (let i = startIdx; i < endIdx; i++) {
711
+ const line = lines[i];
712
+ if (!line)
713
+ continue;
714
+ if (SET_CONTENT_TYPE_JSON_RE.test(line))
715
+ return true;
716
+ }
717
+ return false;
718
+ }
719
+ // ---------------------------------------------------------------------------
370
720
  // Combined predicate
371
721
  // ---------------------------------------------------------------------------
372
722
  /**
@@ -377,25 +727,56 @@ export function isInsideMybatisInterceptor(types, sinkLine, sinkType) {
377
727
  * it short-circuits the whole table on the bulk-FP case from #94.
378
728
  *
379
729
  * Backwards-compat: callers passing just `(code, type)` still get
380
- * the previous behavior — the new `sinkFile` arg is optional and only
381
- * activates the #93 nosql-on-browser check.
730
+ * the previous behavior — the newer `sinkFile`/`types`/`sinkLine`/
731
+ * `sourceCode` args are all optional and gate the individual checks
732
+ * that need them. Callers that omit them get the pre-#172 behavior on
733
+ * that filter (returns false → not suppressed).
382
734
  */
383
- export function isSuppressedSinkShape(sinkCode, sinkType, sinkFile, types, sinkLine) {
735
+ export function isSuppressedSinkShape(sinkCode, sinkType, sinkFile, types, sinkLine,
736
+ // cognium-ai#172: full file contents for the JSON-content-type XSS scan.
737
+ // Optional so legacy callers (older tests, runReport invoked without a
738
+ // pattern-match result) get pre-#172 behavior.
739
+ sourceCode) {
384
740
  if (isPhantomLineSink(sinkCode))
385
741
  return true;
386
742
  if (isNosqlOnBrowserFile(sinkType, sinkFile))
387
743
  return true;
744
+ // cognium-ai#186: browser-side `.query()` mis-classified as SQL
745
+ // (chrome.tabs.query, navigator.permissions.query, DOM querySelector*)
746
+ // — cheap file-ext + regex, ordered before the more expensive
747
+ // isKnownNonSink pattern table.
748
+ if (isBrowserQueryApi(sinkCode, sinkType, sinkFile))
749
+ return true;
750
+ // cognium-ai#167 gates 5, 6, 7 — library-internal FPs for XPath /
751
+ // XXE / crypto. Each is a fully-qualified-package match on the sink
752
+ // file (semver-stable, doesn't depend on repo name). Cheap regex, no
753
+ // TypeScript source read required; ordered before isKnownNonSink so
754
+ // the more expensive pattern table isn't reached for these buckets.
755
+ if (isXPathLibraryInternal(sinkType, sinkFile))
756
+ return true;
757
+ if (isXxeOnParserLibrary(sinkType, sinkFile))
758
+ return true;
759
+ if (isCryptoLibraryInternal(sinkType, sinkFile, types, sinkLine))
760
+ return true;
388
761
  if (isRequireOrImportSink(sinkCode))
389
762
  return true;
390
763
  if (isKnownNonSink(sinkCode, sinkType))
391
764
  return true;
392
- // #111: class-aware MyBatis Interceptor suppression. Last because it
393
- // needs `types` + `sinkLine`, both of which may be unavailable on
394
- // legacy code paths (older test callers, runReport invoked without a
395
- // pattern-match result). When omitted the predicate returns false
396
- // and behavior is unchanged.
765
+ // #111: class-aware MyBatis Interceptor suppression. Last of the
766
+ // pre-#172 checks because it needs `types` + `sinkLine`, both of which
767
+ // may be unavailable on legacy code paths (older test callers, runReport
768
+ // invoked without a pattern-match result). When omitted the predicate
769
+ // returns false and behavior is unchanged.
397
770
  if (isInsideMybatisInterceptor(types, sinkLine, sinkType))
398
771
  return true;
772
+ // cognium-ai#172: XSS on servlet writer sink with `application/json`
773
+ // Content-Type committed earlier in the same method. Guarded by
774
+ // sink-type check so non-XSS findings never pay the source scan cost.
775
+ if (sinkType &&
776
+ JSON_CT_SUPPRESSIBLE_SINK_TYPES.has(sinkType) &&
777
+ hasJsonContentTypeInScope(sourceCode, types, sinkLine)) {
778
+ return true;
779
+ }
399
780
  return false;
400
781
  }
401
782
  //# sourceMappingURL=sink-filters.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sink-filters.js","sourceRoot":"","sources":["../../src/security-scan/sink-filters.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sink-filters.js","sourceRoot":"","sources":["../../src/security-scan/sink-filters.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"input-validation.d.ts","sourceRoot":"","sources":["../../../src/trust/passes/input-validation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EACL,KAAK,eAAe,EAGrB,MAAM,aAAa,CAAC;AAMrB,yEAAyE;AACzE,QAAA,MAAM,aAAa,EAAE,GAAG,CAAC,MAAM,CAW7B,CAAC;AAEH,8DAA8D;AAC9D,QAAA,MAAM,cAAc,EAAE,GAAG,CAAC,MAAM,CAE9B,CAAC;AACH,QAAA,MAAM,UAAU,EAAE,GAAG,CAAC,MAAM,CAE1B,CAAC;AAMH,MAAM,WAAW,sBAAsB;IACrC,oCAAoC;IACpC,eAAe,CAAC,EAAE,QAAQ,EAAE,CAAC;CAC9B;AAgBD,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,eAAe,CAAC,CAuF1B;AAGD,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,UAAU,EAAE,CAAC"}
1
+ {"version":3,"file":"input-validation.d.ts","sourceRoot":"","sources":["../../../src/trust/passes/input-validation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EACL,KAAK,eAAe,EAGrB,MAAM,aAAa,CAAC;AAOrB,yEAAyE;AACzE,QAAA,MAAM,aAAa,EAAE,GAAG,CAAC,MAAM,CAW7B,CAAC;AAEH,8DAA8D;AAC9D,QAAA,MAAM,cAAc,EAAE,GAAG,CAAC,MAAM,CAE9B,CAAC;AACH,QAAA,MAAM,UAAU,EAAE,GAAG,CAAC,MAAM,CAE1B,CAAC;AAMH,MAAM,WAAW,sBAAsB;IACrC,oCAAoC;IACpC,eAAe,CAAC,EAAE,QAAQ,EAAE,CAAC;CAC9B;AAgBD,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,eAAe,CAAC,CA4G1B;AAGD,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,UAAU,EAAE,CAAC"}
@@ -9,6 +9,7 @@
9
9
  *
10
10
  * Falls back gracefully (score 100 + info) when no CircleIR data is available.
11
11
  */
12
+ import { isBrowserQueryApi } from '../../security-scan/sink-filters.js';
12
13
  // ---------------------------------------------------------------------------
13
14
  // Constants
14
15
  // ---------------------------------------------------------------------------
@@ -67,9 +68,29 @@ export async function inputValidationPass(projectPath, options = {}) {
67
68
  let sanitizedFlows = 0;
68
69
  for (const ir of options.circleIRResults) {
69
70
  const file = ir.meta?.file ?? 'unknown';
71
+ // cognium-ai#186: build a line -> sink.code lookup so we can gate flows
72
+ // through `isBrowserQueryApi`. Same file resolves to the same sink line
73
+ // regardless of which source flowed into it, so a Map keyed on sink_line
74
+ // is enough. Missing sinks (line absent from the map) fall through to
75
+ // pre-#186 behavior.
76
+ const sinksByLine = new Map();
77
+ for (const sink of ir.taint?.sinks ?? []) {
78
+ if (typeof sink.line === 'number' && typeof sink.code === 'string') {
79
+ sinksByLine.set(sink.line, sink.code);
80
+ }
81
+ }
70
82
  for (const flow of ir.taint?.flows ?? []) {
71
83
  if (!INPUT_SOURCES.has(flow.source_type))
72
84
  continue;
85
+ // cognium-ai#186: browser `.query()` / `querySelector*` on renderer
86
+ // file types (`.ts` / `.js` / `.html` / `.vue` / …) — Chrome extension
87
+ // APIs and Web APIs share the `.query()` method name with SQL drivers.
88
+ // Drop the flow entirely (not counted in totalFlows) so the coverage
89
+ // score isn't dragged down by a non-vulnerability. Guarded on the
90
+ // presence of sink.code — without it the filter is a no-op.
91
+ const sinkCode = sinksByLine.get(flow.sink_line);
92
+ if (isBrowserQueryApi(sinkCode, flow.sink_type, file))
93
+ continue;
73
94
  totalFlows++;
74
95
  if (flow.sanitized) {
75
96
  sanitizedFlows++;
@@ -1 +1 @@
1
- {"version":3,"file":"input-validation.js","sourceRoot":"","sources":["../../../src/trust/passes/input-validation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"input-validation.js","sourceRoot":"","sources":["../../../src/trust/passes/input-validation.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "circle-ir-ai",
3
- "version": "2.33.4",
3
+ "version": "2.34.0",
4
4
  "description": "LLM-enhanced SAST analysis built on circle-ir",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",
@@ -97,7 +97,7 @@
97
97
  "@ax-llm/ax": "^20.0.0",
98
98
  "@cognium/project-profile-detect": "^1.1.0",
99
99
  "@mastra/core": "^1.18.0",
100
- "circle-ir": "3.148.0",
100
+ "circle-ir": "3.150.0",
101
101
  "minimatch": "^10.2.5",
102
102
  "p-queue": "^9.1.0"
103
103
  },