circle-ir 3.185.0 → 3.186.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.
@@ -13397,6 +13397,91 @@ var DEFAULT_SANITIZERS = [
13397
13397
  // Command injection - shell escaping
13398
13398
  { method: "quote", class: "shell", removes: ["command_injection"] },
13399
13399
  { method: "escape", class: "shell-escape", removes: ["command_injection"] },
13400
+ // JS/Node — additional XSS/HTML encoders (cognium-dev #213 sixth slice).
13401
+ //
13402
+ // he.encode(x) / he.escape(x) — `he` npm package
13403
+ // sanitizeHtml(x) — `sanitize-html` npm
13404
+ // xss(x) / filterXSS(x) — `xss` npm (Yahoo)
13405
+ // escapeHtml(x) / escapeHTML(x) — common bare helpers
13406
+ // entities.encode(x) / entities.escape(x) — `entities` npm
13407
+ // xssFilters.inHTMLData(x) / inHTMLComment(x) / uriInHTMLData(x)
13408
+ // — `xss-filters` npm (Yahoo)
13409
+ //
13410
+ // `external_taint_escape` is included alongside `xss` — the CWE-668
13411
+ // fallback fires on any call receiving tainted data that the engine
13412
+ // does not otherwise recognize. Since these functions are explicitly
13413
+ // registered as sanitizers (they PURIFY input), they should also
13414
+ // suppress the fallback so a `res.send(sanitizeHtml(x))` flow does
13415
+ // not report an external-taint-escape at the sanitizer call itself.
13416
+ { method: "encode", class: "he", removes: ["xss", "external_taint_escape"] },
13417
+ { method: "escape", class: "he", removes: ["xss", "external_taint_escape"] },
13418
+ { method: "sanitizeHtml", removes: ["xss", "external_taint_escape"] },
13419
+ { method: "xss", removes: ["xss", "external_taint_escape"] },
13420
+ { method: "filterXSS", removes: ["xss", "external_taint_escape"] },
13421
+ { method: "escapeHtml", removes: ["xss", "external_taint_escape"] },
13422
+ { method: "escapeHTML", removes: ["xss", "external_taint_escape"] },
13423
+ { method: "encode", class: "entities", removes: ["xss", "external_taint_escape"] },
13424
+ { method: "escape", class: "entities", removes: ["xss", "external_taint_escape"] },
13425
+ // xss-filters: context-specific helpers, all XSS-safe by construction.
13426
+ { method: "inHTMLData", class: "xssFilters", removes: ["xss", "external_taint_escape"] },
13427
+ { method: "inHTMLComment", class: "xssFilters", removes: ["xss", "external_taint_escape"] },
13428
+ { method: "uriInHTMLData", class: "xssFilters", removes: ["xss", "external_taint_escape"] },
13429
+ // JS/Node — SQL escaping (in addition to the mysql class above).
13430
+ //
13431
+ // SqlString.escape / .escapeId — `sqlstring` npm (raw
13432
+ // escape used by mysql /
13433
+ // node-mysql2 drivers)
13434
+ // pgFormat(sql, ...args) / format(bare) — `pg-format` npm
13435
+ // SQL.raw / SQL(bare) — `sql-template-strings`
13436
+ //
13437
+ // Bare `format` is intentionally NOT registered — it collides with
13438
+ // string.format-style helpers unrelated to SQL. Callers should use the
13439
+ // qualified form.
13440
+ { method: "escape", class: "SqlString", removes: ["sql_injection", "external_taint_escape"] },
13441
+ { method: "escapeId", class: "SqlString", removes: ["sql_injection", "external_taint_escape"] },
13442
+ { method: "format", class: "SqlString", removes: ["sql_injection", "external_taint_escape"] },
13443
+ { method: "format", class: "pgFormat", removes: ["sql_injection", "external_taint_escape"] },
13444
+ { method: "ident", class: "pgFormat", removes: ["sql_injection", "external_taint_escape"] },
13445
+ { method: "literal", class: "pgFormat", removes: ["sql_injection", "external_taint_escape"] },
13446
+ // JS/Node — crypto.randomUUID() and Node's crypto.randomBytes(...)toString()
13447
+ // produce cryptographically-secure typed strings that cannot carry
13448
+ // attacker-injected payload. Registered as type coercion.
13449
+ { method: "randomUUID", class: "crypto", removes: ["sql_injection", "nosql_injection", "command_injection", "path_traversal", "code_injection", "xss"] },
13450
+ // Bare `randomUUID()` alias — `import { randomUUID } from 'crypto'`.
13451
+ { method: "randomUUID", removes: ["sql_injection", "nosql_injection", "command_injection", "path_traversal", "code_injection", "xss"] },
13452
+ // JS/Node — URL construction. `new URL(x, base)` (constructor-call
13453
+ // matched by method_name === 'URL') and `URLSearchParams.toString()`
13454
+ // safely encode components for URL context.
13455
+ { method: "toString", class: "URLSearchParams", removes: ["ssrf", "open_redirect", "xss"] },
13456
+ // Go — additional sanitizers (cognium-dev #213 sixth slice).
13457
+ //
13458
+ // regexp.QuoteMeta(x) — mirror of Python re.escape; strips regex
13459
+ // metacharacters so downstream compile/match
13460
+ // cannot execute attacker-crafted patterns.
13461
+ // bluemonday.Sanitize — dominant Go HTML sanitizer library
13462
+ // (`microcosm-cc/bluemonday`). Called on a
13463
+ // Policy value returned by UGCPolicy() /
13464
+ // StrictPolicy() / etc. Match by method name
13465
+ // alone — Policy is the receiver type.
13466
+ // net.ParseIP(x) — validates the input is a well-formed IP;
13467
+ // returns nil for bad input (developer must
13468
+ // check, but the sanitizer only applies when
13469
+ // the parsed IP flows onward).
13470
+ // sql.Named(name, val) — parameterized query binding.
13471
+ { method: "QuoteMeta", class: "regexp", removes: ["redos", "code_injection", "external_taint_escape"] },
13472
+ { method: "Sanitize", class: "bluemonday", removes: ["xss", "external_taint_escape"] },
13473
+ { method: "Sanitize", class: "Policy", removes: ["xss", "external_taint_escape"] },
13474
+ // Bare `Sanitize` — the receiver is a Policy variable (`p := bluemonday.UGCPolicy(); p.Sanitize(x)`).
13475
+ // `Policy` class-matching only fires when the IR resolves the receiver type;
13476
+ // since Go DFG rarely propagates the type of a locally-assigned variable
13477
+ // from a package factory call, we also register the bare method name.
13478
+ // Narrow FP risk: `Sanitize` bare is uncommon outside bluemonday context.
13479
+ { method: "Sanitize", removes: ["xss", "external_taint_escape"] },
13480
+ { method: "SanitizeBytes", class: "bluemonday", removes: ["xss", "external_taint_escape"] },
13481
+ { method: "SanitizeBytes", class: "Policy", removes: ["xss", "external_taint_escape"] },
13482
+ { method: "SanitizeBytes", removes: ["xss", "external_taint_escape"] },
13483
+ { method: "ParseIP", class: "net", removes: ["ssrf", "command_injection", "path_traversal", "external_taint_escape"] },
13484
+ { method: "Named", class: "sql", removes: ["sql_injection", "external_taint_escape"] },
13400
13485
  // =========================================================================
13401
13486
  // Python Sanitizers
13402
13487
  // =========================================================================
@@ -12792,6 +12792,91 @@ var DEFAULT_SANITIZERS = [
12792
12792
  // Command injection - shell escaping
12793
12793
  { method: "quote", class: "shell", removes: ["command_injection"] },
12794
12794
  { method: "escape", class: "shell-escape", removes: ["command_injection"] },
12795
+ // JS/Node — additional XSS/HTML encoders (cognium-dev #213 sixth slice).
12796
+ //
12797
+ // he.encode(x) / he.escape(x) — `he` npm package
12798
+ // sanitizeHtml(x) — `sanitize-html` npm
12799
+ // xss(x) / filterXSS(x) — `xss` npm (Yahoo)
12800
+ // escapeHtml(x) / escapeHTML(x) — common bare helpers
12801
+ // entities.encode(x) / entities.escape(x) — `entities` npm
12802
+ // xssFilters.inHTMLData(x) / inHTMLComment(x) / uriInHTMLData(x)
12803
+ // — `xss-filters` npm (Yahoo)
12804
+ //
12805
+ // `external_taint_escape` is included alongside `xss` — the CWE-668
12806
+ // fallback fires on any call receiving tainted data that the engine
12807
+ // does not otherwise recognize. Since these functions are explicitly
12808
+ // registered as sanitizers (they PURIFY input), they should also
12809
+ // suppress the fallback so a `res.send(sanitizeHtml(x))` flow does
12810
+ // not report an external-taint-escape at the sanitizer call itself.
12811
+ { method: "encode", class: "he", removes: ["xss", "external_taint_escape"] },
12812
+ { method: "escape", class: "he", removes: ["xss", "external_taint_escape"] },
12813
+ { method: "sanitizeHtml", removes: ["xss", "external_taint_escape"] },
12814
+ { method: "xss", removes: ["xss", "external_taint_escape"] },
12815
+ { method: "filterXSS", removes: ["xss", "external_taint_escape"] },
12816
+ { method: "escapeHtml", removes: ["xss", "external_taint_escape"] },
12817
+ { method: "escapeHTML", removes: ["xss", "external_taint_escape"] },
12818
+ { method: "encode", class: "entities", removes: ["xss", "external_taint_escape"] },
12819
+ { method: "escape", class: "entities", removes: ["xss", "external_taint_escape"] },
12820
+ // xss-filters: context-specific helpers, all XSS-safe by construction.
12821
+ { method: "inHTMLData", class: "xssFilters", removes: ["xss", "external_taint_escape"] },
12822
+ { method: "inHTMLComment", class: "xssFilters", removes: ["xss", "external_taint_escape"] },
12823
+ { method: "uriInHTMLData", class: "xssFilters", removes: ["xss", "external_taint_escape"] },
12824
+ // JS/Node — SQL escaping (in addition to the mysql class above).
12825
+ //
12826
+ // SqlString.escape / .escapeId — `sqlstring` npm (raw
12827
+ // escape used by mysql /
12828
+ // node-mysql2 drivers)
12829
+ // pgFormat(sql, ...args) / format(bare) — `pg-format` npm
12830
+ // SQL.raw / SQL(bare) — `sql-template-strings`
12831
+ //
12832
+ // Bare `format` is intentionally NOT registered — it collides with
12833
+ // string.format-style helpers unrelated to SQL. Callers should use the
12834
+ // qualified form.
12835
+ { method: "escape", class: "SqlString", removes: ["sql_injection", "external_taint_escape"] },
12836
+ { method: "escapeId", class: "SqlString", removes: ["sql_injection", "external_taint_escape"] },
12837
+ { method: "format", class: "SqlString", removes: ["sql_injection", "external_taint_escape"] },
12838
+ { method: "format", class: "pgFormat", removes: ["sql_injection", "external_taint_escape"] },
12839
+ { method: "ident", class: "pgFormat", removes: ["sql_injection", "external_taint_escape"] },
12840
+ { method: "literal", class: "pgFormat", removes: ["sql_injection", "external_taint_escape"] },
12841
+ // JS/Node — crypto.randomUUID() and Node's crypto.randomBytes(...)toString()
12842
+ // produce cryptographically-secure typed strings that cannot carry
12843
+ // attacker-injected payload. Registered as type coercion.
12844
+ { method: "randomUUID", class: "crypto", removes: ["sql_injection", "nosql_injection", "command_injection", "path_traversal", "code_injection", "xss"] },
12845
+ // Bare `randomUUID()` alias — `import { randomUUID } from 'crypto'`.
12846
+ { method: "randomUUID", removes: ["sql_injection", "nosql_injection", "command_injection", "path_traversal", "code_injection", "xss"] },
12847
+ // JS/Node — URL construction. `new URL(x, base)` (constructor-call
12848
+ // matched by method_name === 'URL') and `URLSearchParams.toString()`
12849
+ // safely encode components for URL context.
12850
+ { method: "toString", class: "URLSearchParams", removes: ["ssrf", "open_redirect", "xss"] },
12851
+ // Go — additional sanitizers (cognium-dev #213 sixth slice).
12852
+ //
12853
+ // regexp.QuoteMeta(x) — mirror of Python re.escape; strips regex
12854
+ // metacharacters so downstream compile/match
12855
+ // cannot execute attacker-crafted patterns.
12856
+ // bluemonday.Sanitize — dominant Go HTML sanitizer library
12857
+ // (`microcosm-cc/bluemonday`). Called on a
12858
+ // Policy value returned by UGCPolicy() /
12859
+ // StrictPolicy() / etc. Match by method name
12860
+ // alone — Policy is the receiver type.
12861
+ // net.ParseIP(x) — validates the input is a well-formed IP;
12862
+ // returns nil for bad input (developer must
12863
+ // check, but the sanitizer only applies when
12864
+ // the parsed IP flows onward).
12865
+ // sql.Named(name, val) — parameterized query binding.
12866
+ { method: "QuoteMeta", class: "regexp", removes: ["redos", "code_injection", "external_taint_escape"] },
12867
+ { method: "Sanitize", class: "bluemonday", removes: ["xss", "external_taint_escape"] },
12868
+ { method: "Sanitize", class: "Policy", removes: ["xss", "external_taint_escape"] },
12869
+ // Bare `Sanitize` — the receiver is a Policy variable (`p := bluemonday.UGCPolicy(); p.Sanitize(x)`).
12870
+ // `Policy` class-matching only fires when the IR resolves the receiver type;
12871
+ // since Go DFG rarely propagates the type of a locally-assigned variable
12872
+ // from a package factory call, we also register the bare method name.
12873
+ // Narrow FP risk: `Sanitize` bare is uncommon outside bluemonday context.
12874
+ { method: "Sanitize", removes: ["xss", "external_taint_escape"] },
12875
+ { method: "SanitizeBytes", class: "bluemonday", removes: ["xss", "external_taint_escape"] },
12876
+ { method: "SanitizeBytes", class: "Policy", removes: ["xss", "external_taint_escape"] },
12877
+ { method: "SanitizeBytes", removes: ["xss", "external_taint_escape"] },
12878
+ { method: "ParseIP", class: "net", removes: ["ssrf", "command_injection", "path_traversal", "external_taint_escape"] },
12879
+ { method: "Named", class: "sql", removes: ["sql_injection", "external_taint_escape"] },
12795
12880
  // =========================================================================
12796
12881
  // Python Sanitizers
12797
12882
  // =========================================================================
@@ -12726,6 +12726,91 @@ var DEFAULT_SANITIZERS = [
12726
12726
  // Command injection - shell escaping
12727
12727
  { method: "quote", class: "shell", removes: ["command_injection"] },
12728
12728
  { method: "escape", class: "shell-escape", removes: ["command_injection"] },
12729
+ // JS/Node — additional XSS/HTML encoders (cognium-dev #213 sixth slice).
12730
+ //
12731
+ // he.encode(x) / he.escape(x) — `he` npm package
12732
+ // sanitizeHtml(x) — `sanitize-html` npm
12733
+ // xss(x) / filterXSS(x) — `xss` npm (Yahoo)
12734
+ // escapeHtml(x) / escapeHTML(x) — common bare helpers
12735
+ // entities.encode(x) / entities.escape(x) — `entities` npm
12736
+ // xssFilters.inHTMLData(x) / inHTMLComment(x) / uriInHTMLData(x)
12737
+ // — `xss-filters` npm (Yahoo)
12738
+ //
12739
+ // `external_taint_escape` is included alongside `xss` — the CWE-668
12740
+ // fallback fires on any call receiving tainted data that the engine
12741
+ // does not otherwise recognize. Since these functions are explicitly
12742
+ // registered as sanitizers (they PURIFY input), they should also
12743
+ // suppress the fallback so a `res.send(sanitizeHtml(x))` flow does
12744
+ // not report an external-taint-escape at the sanitizer call itself.
12745
+ { method: "encode", class: "he", removes: ["xss", "external_taint_escape"] },
12746
+ { method: "escape", class: "he", removes: ["xss", "external_taint_escape"] },
12747
+ { method: "sanitizeHtml", removes: ["xss", "external_taint_escape"] },
12748
+ { method: "xss", removes: ["xss", "external_taint_escape"] },
12749
+ { method: "filterXSS", removes: ["xss", "external_taint_escape"] },
12750
+ { method: "escapeHtml", removes: ["xss", "external_taint_escape"] },
12751
+ { method: "escapeHTML", removes: ["xss", "external_taint_escape"] },
12752
+ { method: "encode", class: "entities", removes: ["xss", "external_taint_escape"] },
12753
+ { method: "escape", class: "entities", removes: ["xss", "external_taint_escape"] },
12754
+ // xss-filters: context-specific helpers, all XSS-safe by construction.
12755
+ { method: "inHTMLData", class: "xssFilters", removes: ["xss", "external_taint_escape"] },
12756
+ { method: "inHTMLComment", class: "xssFilters", removes: ["xss", "external_taint_escape"] },
12757
+ { method: "uriInHTMLData", class: "xssFilters", removes: ["xss", "external_taint_escape"] },
12758
+ // JS/Node — SQL escaping (in addition to the mysql class above).
12759
+ //
12760
+ // SqlString.escape / .escapeId — `sqlstring` npm (raw
12761
+ // escape used by mysql /
12762
+ // node-mysql2 drivers)
12763
+ // pgFormat(sql, ...args) / format(bare) — `pg-format` npm
12764
+ // SQL.raw / SQL(bare) — `sql-template-strings`
12765
+ //
12766
+ // Bare `format` is intentionally NOT registered — it collides with
12767
+ // string.format-style helpers unrelated to SQL. Callers should use the
12768
+ // qualified form.
12769
+ { method: "escape", class: "SqlString", removes: ["sql_injection", "external_taint_escape"] },
12770
+ { method: "escapeId", class: "SqlString", removes: ["sql_injection", "external_taint_escape"] },
12771
+ { method: "format", class: "SqlString", removes: ["sql_injection", "external_taint_escape"] },
12772
+ { method: "format", class: "pgFormat", removes: ["sql_injection", "external_taint_escape"] },
12773
+ { method: "ident", class: "pgFormat", removes: ["sql_injection", "external_taint_escape"] },
12774
+ { method: "literal", class: "pgFormat", removes: ["sql_injection", "external_taint_escape"] },
12775
+ // JS/Node — crypto.randomUUID() and Node's crypto.randomBytes(...)toString()
12776
+ // produce cryptographically-secure typed strings that cannot carry
12777
+ // attacker-injected payload. Registered as type coercion.
12778
+ { method: "randomUUID", class: "crypto", removes: ["sql_injection", "nosql_injection", "command_injection", "path_traversal", "code_injection", "xss"] },
12779
+ // Bare `randomUUID()` alias — `import { randomUUID } from 'crypto'`.
12780
+ { method: "randomUUID", removes: ["sql_injection", "nosql_injection", "command_injection", "path_traversal", "code_injection", "xss"] },
12781
+ // JS/Node — URL construction. `new URL(x, base)` (constructor-call
12782
+ // matched by method_name === 'URL') and `URLSearchParams.toString()`
12783
+ // safely encode components for URL context.
12784
+ { method: "toString", class: "URLSearchParams", removes: ["ssrf", "open_redirect", "xss"] },
12785
+ // Go — additional sanitizers (cognium-dev #213 sixth slice).
12786
+ //
12787
+ // regexp.QuoteMeta(x) — mirror of Python re.escape; strips regex
12788
+ // metacharacters so downstream compile/match
12789
+ // cannot execute attacker-crafted patterns.
12790
+ // bluemonday.Sanitize — dominant Go HTML sanitizer library
12791
+ // (`microcosm-cc/bluemonday`). Called on a
12792
+ // Policy value returned by UGCPolicy() /
12793
+ // StrictPolicy() / etc. Match by method name
12794
+ // alone — Policy is the receiver type.
12795
+ // net.ParseIP(x) — validates the input is a well-formed IP;
12796
+ // returns nil for bad input (developer must
12797
+ // check, but the sanitizer only applies when
12798
+ // the parsed IP flows onward).
12799
+ // sql.Named(name, val) — parameterized query binding.
12800
+ { method: "QuoteMeta", class: "regexp", removes: ["redos", "code_injection", "external_taint_escape"] },
12801
+ { method: "Sanitize", class: "bluemonday", removes: ["xss", "external_taint_escape"] },
12802
+ { method: "Sanitize", class: "Policy", removes: ["xss", "external_taint_escape"] },
12803
+ // Bare `Sanitize` — the receiver is a Policy variable (`p := bluemonday.UGCPolicy(); p.Sanitize(x)`).
12804
+ // `Policy` class-matching only fires when the IR resolves the receiver type;
12805
+ // since Go DFG rarely propagates the type of a locally-assigned variable
12806
+ // from a package factory call, we also register the bare method name.
12807
+ // Narrow FP risk: `Sanitize` bare is uncommon outside bluemonday context.
12808
+ { method: "Sanitize", removes: ["xss", "external_taint_escape"] },
12809
+ { method: "SanitizeBytes", class: "bluemonday", removes: ["xss", "external_taint_escape"] },
12810
+ { method: "SanitizeBytes", class: "Policy", removes: ["xss", "external_taint_escape"] },
12811
+ { method: "SanitizeBytes", removes: ["xss", "external_taint_escape"] },
12812
+ { method: "ParseIP", class: "net", removes: ["ssrf", "command_injection", "path_traversal", "external_taint_escape"] },
12813
+ { method: "Named", class: "sql", removes: ["sql_injection", "external_taint_escape"] },
12729
12814
  // =========================================================================
12730
12815
  // Python Sanitizers
12731
12816
  // =========================================================================
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "circle-ir",
3
- "version": "3.185.0",
3
+ "version": "3.186.0",
4
4
  "description": "High-performance Static Application Security Testing (SAST) library for detecting security vulnerabilities through taint analysis",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",