circle-ir 3.199.0 → 3.200.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.
- package/dist/analysis/config-loader.d.ts.map +1 -1
- package/dist/analysis/config-loader.js +45 -0
- package/dist/analysis/config-loader.js.map +1 -1
- package/dist/browser/circle-ir.js +45 -0
- package/dist/core/circle-ir-core.cjs +45 -0
- package/dist/core/circle-ir-core.js +45 -0
- package/package.json +1 -1
|
@@ -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,
|
|
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'] },
|