circle-ir 3.199.0 → 3.201.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.
@@ -1 +1 @@
1
- {"version":3,"file":"config-loader.d.ts","sourceRoot":"","sources":["../../src/analysis/config-loader.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,UAAU,EACV,mBAAmB,EACnB,kBAAkB,EAClB,WAAW,EACX,aAAa,EACb,WAAW,EACX,gBAAgB,EAChB,UAAU,EACX,MAAM,oBAAoB,CAAC;AAE5B;;;GAGG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,CAAC,CAEjD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,aAAa,EAAE,CAiB1E;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG;IACtD,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,UAAU,EAAE,gBAAgB,EAAE,CAAC;CAChC,CAcA;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,mBAAmB,EAAE,GAC7B,kBAAkB,EAAE,CAQtB;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,cAAc,EAAE,MAAM,EAAE,EACxB,YAAY,EAAE,MAAM,EAAE,EACtB,qBAAqB,GAAE,MAAM,EAAO,GACnC,WAAW,CAYb;AAED;;;GAGG;AACH,eAAO,MAAM,eAAe,EAAE,aAAa,EAivB1C,CAAC;AA+KF,eAAO,MAAM,aAAa,EAAE,WAAW,EA+yDtC,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,gBAAgB,EA+hBhD,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,sBAAsB,EAAE,kBAAkB,EAiDtD,CAAC;AAEF;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,WAAW,CAO9C;AAMD;;;;;;;;GAQG;AACH,eAAO,MAAM,oBAAoB,EAAE,UAAU,EA8F5C,CAAC"}
1
+ {"version":3,"file":"config-loader.d.ts","sourceRoot":"","sources":["../../src/analysis/config-loader.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,UAAU,EACV,mBAAmB,EACnB,kBAAkB,EAClB,WAAW,EACX,aAAa,EACb,WAAW,EACX,gBAAgB,EAChB,UAAU,EACX,MAAM,oBAAoB,CAAC;AAE5B;;;GAGG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,CAAC,CAEjD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,aAAa,EAAE,CAiB1E;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG;IACtD,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,UAAU,EAAE,gBAAgB,EAAE,CAAC;CAChC,CAcA;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,mBAAmB,EAAE,GAC7B,kBAAkB,EAAE,CAQtB;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,cAAc,EAAE,MAAM,EAAE,EACxB,YAAY,EAAE,MAAM,EAAE,EACtB,qBAAqB,GAAE,MAAM,EAAO,GACnC,WAAW,CAYb;AAED;;;GAGG;AACH,eAAO,MAAM,eAAe,EAAE,aAAa,EAuwB1C,CAAC;AA+KF,eAAO,MAAM,aAAa,EAAE,WAAW,EAy0DtC,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,gBAAgB,EA+hBhD,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,sBAAsB,EAAE,kBAAkB,EAiDtD,CAAC;AAEF;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,WAAW,CAO9C;AAMD;;;;;;;;GAQG;AACH,eAAO,MAAM,oBAAoB,EAAE,UAAU,EA8F5C,CAAC"}
@@ -151,6 +151,26 @@ export const DEFAULT_SOURCES = [
151
151
  { annotation: 'FormParam', type: 'http_param', severity: 'high', param_tainted: true },
152
152
  { annotation: 'PathParam', type: 'http_path', severity: 'medium', param_tainted: true },
153
153
  { annotation: 'HeaderParam', type: 'http_header', severity: 'high', param_tainted: true },
154
+ // JAX-RS params the block was missing (jakarta.ws.rs). Java-scoped — the
155
+ // JS decorator ecosystem has its own distinct names and should not match.
156
+ { annotation: 'CookieParam', type: 'http_cookie', severity: 'high', param_tainted: true, languages: ['java'] },
157
+ { annotation: 'MatrixParam', type: 'http_param', severity: 'high', param_tainted: true, languages: ['java'] },
158
+ { annotation: 'BeanParam', type: 'http_body', severity: 'high', param_tainted: true, languages: ['java'] },
159
+ // Micronaut (io.micronaut.http.annotation). @Body / @Header / @CookieValue /
160
+ // @PathVariable reuse Spring/JAX-RS names already covered above; these three
161
+ // are Micronaut-specific. Java-scoped.
162
+ { annotation: 'QueryValue', type: 'http_param', severity: 'high', param_tainted: true, languages: ['java'] },
163
+ { annotation: 'Part', type: 'http_body', severity: 'high', param_tainted: true, languages: ['java'] },
164
+ { annotation: 'RequestBean', type: 'http_body', severity: 'high', param_tainted: true, languages: ['java'] },
165
+ // Quarkus / RESTEasy Reactive (org.jboss.resteasy.reactive) — the `@Rest*`
166
+ // shortcut annotations that infer the binding name from the parameter name.
167
+ // Java-scoped.
168
+ { annotation: 'RestQuery', type: 'http_param', severity: 'high', param_tainted: true, languages: ['java'] },
169
+ { annotation: 'RestPath', type: 'http_path', severity: 'medium', param_tainted: true, languages: ['java'] },
170
+ { annotation: 'RestHeader', type: 'http_header', severity: 'high', param_tainted: true, languages: ['java'] },
171
+ { annotation: 'RestForm', type: 'http_param', severity: 'high', param_tainted: true, languages: ['java'] },
172
+ { annotation: 'RestCookie', type: 'http_cookie', severity: 'high', param_tainted: true, languages: ['java'] },
173
+ { annotation: 'RestMatrix', type: 'http_param', severity: 'high', param_tainted: true, languages: ['java'] },
154
174
  // Jenkins data-binding: every parameter of an annotated constructor is wired
155
175
  // from form/JSON user input at construction time. Method-level annotation —
156
176
  // all params tainted.
@@ -1874,6 +1894,25 @@ export const DEFAULT_SINKS = [
1874
1894
  { method: 'each', class: 'Connection', type: 'sql_injection', cwe: 'CWE-89', severity: 'critical', arg_positions: [0], languages: ['javascript', 'typescript'], allow_unresolved_receiver: true },
1875
1895
  { method: 'get', class: 'Connection', type: 'sql_injection', cwe: 'CWE-89', severity: 'critical', arg_positions: [0], languages: ['javascript', 'typescript'], allow_unresolved_receiver: true },
1876
1896
  { method: 'exec', class: 'Connection', type: 'sql_injection', cwe: 'CWE-89', severity: 'critical', arg_positions: [0], languages: ['javascript', 'typescript'], allow_unresolved_receiver: true },
1897
+ // TypeORM QueryBuilder raw fragments (CWE-89). TypeORM's raw `.query(sql)`
1898
+ // escape hatch is already covered by the classless `query` sink in the JS
1899
+ // plugin (getBuiltinSinks), so it is NOT re-registered here — the dedup
1900
+ // would discard the duplicate anyway. What was uncovered is the
1901
+ // QueryBuilder fragment API: `andWhere`/`orWhere`/`andHaving`/`orHaving`
1902
+ // take raw SQL strings. These names are TypeORM-idiomatic, so classless +
1903
+ // language-scoped is safe and recovers the dominant chained-builder shape
1904
+ // (`repo.createQueryBuilder('u').andWhere(raw)`) that class matching cannot
1905
+ // reach — the receiver of `.andWhere(...)` is the factory call, not a
1906
+ // class-named variable. Generic `where`/`having` are deliberately NOT added
1907
+ // (too generic for classless; a `*QueryBuilder`-scoped entry would be
1908
+ // near-dead since receivers are rarely named that). Precision is inherent
1909
+ // to the flow: parameterised use (`:id` placeholders + a params object)
1910
+ // keeps input out of the string literal, so a finding fires only on
1911
+ // concatenation.
1912
+ { method: 'andWhere', type: 'sql_injection', cwe: 'CWE-89', severity: 'high', arg_positions: [0], languages: ['javascript', 'typescript'] },
1913
+ { method: 'orWhere', type: 'sql_injection', cwe: 'CWE-89', severity: 'high', arg_positions: [0], languages: ['javascript', 'typescript'] },
1914
+ { method: 'andHaving', type: 'sql_injection', cwe: 'CWE-89', severity: 'high', arg_positions: [0], languages: ['javascript', 'typescript'] },
1915
+ { method: 'orHaving', type: 'sql_injection', cwe: 'CWE-89', severity: 'high', arg_positions: [0], languages: ['javascript', 'typescript'] },
1877
1916
  // Browser DOM XSS sinks
1878
1917
  { method: 'setAttribute', type: 'xss', cwe: 'CWE-79', severity: 'high', arg_positions: [1] },
1879
1918
  // Angular DomSanitizer.bypassSecurityTrust* — CWE-79 (#184 Sprint 55).
@@ -2075,6 +2114,12 @@ export const DEFAULT_SINKS = [
2075
2114
  { method: 'executemany', type: 'sql_injection', cwe: 'CWE-89', severity: 'critical', arg_positions: [0], languages: ['python'] },
2076
2115
  { method: 'raw', type: 'sql_injection', cwe: 'CWE-89', severity: 'critical', arg_positions: [0], languages: ['python'] },
2077
2116
  { method: 'extra', type: 'sql_injection', cwe: 'CWE-89', severity: 'high', arg_positions: [0], languages: ['python'] },
2117
+ // Django RawSQL expression (django.db.models.expressions.RawSQL) — the raw
2118
+ // SQL fragment in arg[0] is embedded verbatim into the query when the
2119
+ // annotate/filter/order_by containing it runs. Distinctive constructor name,
2120
+ // so classless + python-scoped is safe. Parameterised use passes user input
2121
+ // through arg[1] (`RawSQL("... %s", [uid])`), which keeps it out of arg[0].
2122
+ { method: 'RawSQL', type: 'sql_injection', cwe: 'CWE-89', severity: 'critical', arg_positions: [0], languages: ['python'] },
2078
2123
  // Python Path Traversal
2079
2124
  // Language-scoped: classless `open` collides with Java I/O / JS DOM.
2080
2125
  { method: 'open', type: 'path_traversal', cwe: 'CWE-22', severity: 'high', arg_positions: [0], languages: ['python'] },