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.
- 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/analysis/passes/language-sources-pass.d.ts.map +1 -1
- package/dist/analysis/passes/language-sources-pass.js +8 -0
- package/dist/analysis/passes/language-sources-pass.js.map +1 -1
- package/dist/browser/circle-ir.js +53 -0
- package/dist/core/circle-ir-core.cjs +45 -0
- package/dist/core/circle-ir-core.js +45 -0
- package/package.json +1 -1
|
@@ -11082,6 +11082,26 @@ var DEFAULT_SOURCES = [
|
|
|
11082
11082
|
{ annotation: "FormParam", type: "http_param", severity: "high", param_tainted: true },
|
|
11083
11083
|
{ annotation: "PathParam", type: "http_path", severity: "medium", param_tainted: true },
|
|
11084
11084
|
{ annotation: "HeaderParam", type: "http_header", severity: "high", param_tainted: true },
|
|
11085
|
+
// JAX-RS params the block was missing (jakarta.ws.rs). Java-scoped — the
|
|
11086
|
+
// JS decorator ecosystem has its own distinct names and should not match.
|
|
11087
|
+
{ annotation: "CookieParam", type: "http_cookie", severity: "high", param_tainted: true, languages: ["java"] },
|
|
11088
|
+
{ annotation: "MatrixParam", type: "http_param", severity: "high", param_tainted: true, languages: ["java"] },
|
|
11089
|
+
{ annotation: "BeanParam", type: "http_body", severity: "high", param_tainted: true, languages: ["java"] },
|
|
11090
|
+
// Micronaut (io.micronaut.http.annotation). @Body / @Header / @CookieValue /
|
|
11091
|
+
// @PathVariable reuse Spring/JAX-RS names already covered above; these three
|
|
11092
|
+
// are Micronaut-specific. Java-scoped.
|
|
11093
|
+
{ annotation: "QueryValue", type: "http_param", severity: "high", param_tainted: true, languages: ["java"] },
|
|
11094
|
+
{ annotation: "Part", type: "http_body", severity: "high", param_tainted: true, languages: ["java"] },
|
|
11095
|
+
{ annotation: "RequestBean", type: "http_body", severity: "high", param_tainted: true, languages: ["java"] },
|
|
11096
|
+
// Quarkus / RESTEasy Reactive (org.jboss.resteasy.reactive) — the `@Rest*`
|
|
11097
|
+
// shortcut annotations that infer the binding name from the parameter name.
|
|
11098
|
+
// Java-scoped.
|
|
11099
|
+
{ annotation: "RestQuery", type: "http_param", severity: "high", param_tainted: true, languages: ["java"] },
|
|
11100
|
+
{ annotation: "RestPath", type: "http_path", severity: "medium", param_tainted: true, languages: ["java"] },
|
|
11101
|
+
{ annotation: "RestHeader", type: "http_header", severity: "high", param_tainted: true, languages: ["java"] },
|
|
11102
|
+
{ annotation: "RestForm", type: "http_param", severity: "high", param_tainted: true, languages: ["java"] },
|
|
11103
|
+
{ annotation: "RestCookie", type: "http_cookie", severity: "high", param_tainted: true, languages: ["java"] },
|
|
11104
|
+
{ annotation: "RestMatrix", type: "http_param", severity: "high", param_tainted: true, languages: ["java"] },
|
|
11085
11105
|
// Jenkins data-binding: every parameter of an annotated constructor is wired
|
|
11086
11106
|
// from form/JSON user input at construction time. Method-level annotation —
|
|
11087
11107
|
// all params tainted.
|
|
@@ -12760,6 +12780,25 @@ var DEFAULT_SINKS = [
|
|
|
12760
12780
|
{ method: "each", class: "Connection", type: "sql_injection", cwe: "CWE-89", severity: "critical", arg_positions: [0], languages: ["javascript", "typescript"], allow_unresolved_receiver: true },
|
|
12761
12781
|
{ method: "get", class: "Connection", type: "sql_injection", cwe: "CWE-89", severity: "critical", arg_positions: [0], languages: ["javascript", "typescript"], allow_unresolved_receiver: true },
|
|
12762
12782
|
{ method: "exec", class: "Connection", type: "sql_injection", cwe: "CWE-89", severity: "critical", arg_positions: [0], languages: ["javascript", "typescript"], allow_unresolved_receiver: true },
|
|
12783
|
+
// TypeORM QueryBuilder raw fragments (CWE-89). TypeORM's raw `.query(sql)`
|
|
12784
|
+
// escape hatch is already covered by the classless `query` sink in the JS
|
|
12785
|
+
// plugin (getBuiltinSinks), so it is NOT re-registered here — the dedup
|
|
12786
|
+
// would discard the duplicate anyway. What was uncovered is the
|
|
12787
|
+
// QueryBuilder fragment API: `andWhere`/`orWhere`/`andHaving`/`orHaving`
|
|
12788
|
+
// take raw SQL strings. These names are TypeORM-idiomatic, so classless +
|
|
12789
|
+
// language-scoped is safe and recovers the dominant chained-builder shape
|
|
12790
|
+
// (`repo.createQueryBuilder('u').andWhere(raw)`) that class matching cannot
|
|
12791
|
+
// reach — the receiver of `.andWhere(...)` is the factory call, not a
|
|
12792
|
+
// class-named variable. Generic `where`/`having` are deliberately NOT added
|
|
12793
|
+
// (too generic for classless; a `*QueryBuilder`-scoped entry would be
|
|
12794
|
+
// near-dead since receivers are rarely named that). Precision is inherent
|
|
12795
|
+
// to the flow: parameterised use (`:id` placeholders + a params object)
|
|
12796
|
+
// keeps input out of the string literal, so a finding fires only on
|
|
12797
|
+
// concatenation.
|
|
12798
|
+
{ method: "andWhere", type: "sql_injection", cwe: "CWE-89", severity: "high", arg_positions: [0], languages: ["javascript", "typescript"] },
|
|
12799
|
+
{ method: "orWhere", type: "sql_injection", cwe: "CWE-89", severity: "high", arg_positions: [0], languages: ["javascript", "typescript"] },
|
|
12800
|
+
{ method: "andHaving", type: "sql_injection", cwe: "CWE-89", severity: "high", arg_positions: [0], languages: ["javascript", "typescript"] },
|
|
12801
|
+
{ method: "orHaving", type: "sql_injection", cwe: "CWE-89", severity: "high", arg_positions: [0], languages: ["javascript", "typescript"] },
|
|
12763
12802
|
// Browser DOM XSS sinks
|
|
12764
12803
|
{ method: "setAttribute", type: "xss", cwe: "CWE-79", severity: "high", arg_positions: [1] },
|
|
12765
12804
|
// Angular DomSanitizer.bypassSecurityTrust* — CWE-79 (#184 Sprint 55).
|
|
@@ -12961,6 +13000,12 @@ var DEFAULT_SINKS = [
|
|
|
12961
13000
|
{ method: "executemany", type: "sql_injection", cwe: "CWE-89", severity: "critical", arg_positions: [0], languages: ["python"] },
|
|
12962
13001
|
{ method: "raw", type: "sql_injection", cwe: "CWE-89", severity: "critical", arg_positions: [0], languages: ["python"] },
|
|
12963
13002
|
{ method: "extra", type: "sql_injection", cwe: "CWE-89", severity: "high", arg_positions: [0], languages: ["python"] },
|
|
13003
|
+
// Django RawSQL expression (django.db.models.expressions.RawSQL) — the raw
|
|
13004
|
+
// SQL fragment in arg[0] is embedded verbatim into the query when the
|
|
13005
|
+
// annotate/filter/order_by containing it runs. Distinctive constructor name,
|
|
13006
|
+
// so classless + python-scoped is safe. Parameterised use passes user input
|
|
13007
|
+
// through arg[1] (`RawSQL("... %s", [uid])`), which keeps it out of arg[0].
|
|
13008
|
+
{ method: "RawSQL", type: "sql_injection", cwe: "CWE-89", severity: "critical", arg_positions: [0], languages: ["python"] },
|
|
12964
13009
|
// Python Path Traversal
|
|
12965
13010
|
// Language-scoped: classless `open` collides with Java I/O / JS DOM.
|
|
12966
13011
|
{ method: "open", type: "path_traversal", cwe: "CWE-22", severity: "high", arg_positions: [0], languages: ["python"] },
|
|
@@ -25682,6 +25727,14 @@ var JS_TAINTED_PATTERNS = [
|
|
|
25682
25727
|
{ pattern: /\blocation\.href\b/, type: "http_path" },
|
|
25683
25728
|
{ pattern: /\bdocument\.getElementById\b/, type: "dom_input" },
|
|
25684
25729
|
{ pattern: /\bdocument\.querySelector\b/, type: "dom_input" },
|
|
25730
|
+
// Remaining DOM element-accessor siblings — a `.value` read off any of these
|
|
25731
|
+
// (`document.getElementsByName('q')[0].value`) is the same DOM-input source as
|
|
25732
|
+
// getElementById/querySelector above. Kept narrow by requiring the `document.`
|
|
25733
|
+
// receiver so they cannot match unrelated `.getElementsByTagName`-named helpers.
|
|
25734
|
+
{ pattern: /\bdocument\.getElementsByName\b/, type: "dom_input" },
|
|
25735
|
+
{ pattern: /\bdocument\.getElementsByClassName\b/, type: "dom_input" },
|
|
25736
|
+
{ pattern: /\bdocument\.getElementsByTagName\b/, type: "dom_input" },
|
|
25737
|
+
{ pattern: /\bdocument\.querySelectorAll\b/, type: "dom_input" },
|
|
25685
25738
|
// Narrow to event-based DOM input reads: `e.target.value`, `event.target.value`.
|
|
25686
25739
|
// The formerly broad `/\.value\b/` matched any `.value` property (e.g. `result.value`,
|
|
25687
25740
|
// `node.value` in TypeScript) generating false positives in non-browser code.
|
|
@@ -10477,6 +10477,26 @@ var DEFAULT_SOURCES = [
|
|
|
10477
10477
|
{ annotation: "FormParam", type: "http_param", severity: "high", param_tainted: true },
|
|
10478
10478
|
{ annotation: "PathParam", type: "http_path", severity: "medium", param_tainted: true },
|
|
10479
10479
|
{ annotation: "HeaderParam", type: "http_header", severity: "high", param_tainted: true },
|
|
10480
|
+
// JAX-RS params the block was missing (jakarta.ws.rs). Java-scoped — the
|
|
10481
|
+
// JS decorator ecosystem has its own distinct names and should not match.
|
|
10482
|
+
{ annotation: "CookieParam", type: "http_cookie", severity: "high", param_tainted: true, languages: ["java"] },
|
|
10483
|
+
{ annotation: "MatrixParam", type: "http_param", severity: "high", param_tainted: true, languages: ["java"] },
|
|
10484
|
+
{ annotation: "BeanParam", type: "http_body", severity: "high", param_tainted: true, languages: ["java"] },
|
|
10485
|
+
// Micronaut (io.micronaut.http.annotation). @Body / @Header / @CookieValue /
|
|
10486
|
+
// @PathVariable reuse Spring/JAX-RS names already covered above; these three
|
|
10487
|
+
// are Micronaut-specific. Java-scoped.
|
|
10488
|
+
{ annotation: "QueryValue", type: "http_param", severity: "high", param_tainted: true, languages: ["java"] },
|
|
10489
|
+
{ annotation: "Part", type: "http_body", severity: "high", param_tainted: true, languages: ["java"] },
|
|
10490
|
+
{ annotation: "RequestBean", type: "http_body", severity: "high", param_tainted: true, languages: ["java"] },
|
|
10491
|
+
// Quarkus / RESTEasy Reactive (org.jboss.resteasy.reactive) — the `@Rest*`
|
|
10492
|
+
// shortcut annotations that infer the binding name from the parameter name.
|
|
10493
|
+
// Java-scoped.
|
|
10494
|
+
{ annotation: "RestQuery", type: "http_param", severity: "high", param_tainted: true, languages: ["java"] },
|
|
10495
|
+
{ annotation: "RestPath", type: "http_path", severity: "medium", param_tainted: true, languages: ["java"] },
|
|
10496
|
+
{ annotation: "RestHeader", type: "http_header", severity: "high", param_tainted: true, languages: ["java"] },
|
|
10497
|
+
{ annotation: "RestForm", type: "http_param", severity: "high", param_tainted: true, languages: ["java"] },
|
|
10498
|
+
{ annotation: "RestCookie", type: "http_cookie", severity: "high", param_tainted: true, languages: ["java"] },
|
|
10499
|
+
{ annotation: "RestMatrix", type: "http_param", severity: "high", param_tainted: true, languages: ["java"] },
|
|
10480
10500
|
// Jenkins data-binding: every parameter of an annotated constructor is wired
|
|
10481
10501
|
// from form/JSON user input at construction time. Method-level annotation —
|
|
10482
10502
|
// all params tainted.
|
|
@@ -12155,6 +12175,25 @@ var DEFAULT_SINKS = [
|
|
|
12155
12175
|
{ method: "each", class: "Connection", type: "sql_injection", cwe: "CWE-89", severity: "critical", arg_positions: [0], languages: ["javascript", "typescript"], allow_unresolved_receiver: true },
|
|
12156
12176
|
{ method: "get", class: "Connection", type: "sql_injection", cwe: "CWE-89", severity: "critical", arg_positions: [0], languages: ["javascript", "typescript"], allow_unresolved_receiver: true },
|
|
12157
12177
|
{ method: "exec", class: "Connection", type: "sql_injection", cwe: "CWE-89", severity: "critical", arg_positions: [0], languages: ["javascript", "typescript"], allow_unresolved_receiver: true },
|
|
12178
|
+
// TypeORM QueryBuilder raw fragments (CWE-89). TypeORM's raw `.query(sql)`
|
|
12179
|
+
// escape hatch is already covered by the classless `query` sink in the JS
|
|
12180
|
+
// plugin (getBuiltinSinks), so it is NOT re-registered here — the dedup
|
|
12181
|
+
// would discard the duplicate anyway. What was uncovered is the
|
|
12182
|
+
// QueryBuilder fragment API: `andWhere`/`orWhere`/`andHaving`/`orHaving`
|
|
12183
|
+
// take raw SQL strings. These names are TypeORM-idiomatic, so classless +
|
|
12184
|
+
// language-scoped is safe and recovers the dominant chained-builder shape
|
|
12185
|
+
// (`repo.createQueryBuilder('u').andWhere(raw)`) that class matching cannot
|
|
12186
|
+
// reach — the receiver of `.andWhere(...)` is the factory call, not a
|
|
12187
|
+
// class-named variable. Generic `where`/`having` are deliberately NOT added
|
|
12188
|
+
// (too generic for classless; a `*QueryBuilder`-scoped entry would be
|
|
12189
|
+
// near-dead since receivers are rarely named that). Precision is inherent
|
|
12190
|
+
// to the flow: parameterised use (`:id` placeholders + a params object)
|
|
12191
|
+
// keeps input out of the string literal, so a finding fires only on
|
|
12192
|
+
// concatenation.
|
|
12193
|
+
{ method: "andWhere", type: "sql_injection", cwe: "CWE-89", severity: "high", arg_positions: [0], languages: ["javascript", "typescript"] },
|
|
12194
|
+
{ method: "orWhere", type: "sql_injection", cwe: "CWE-89", severity: "high", arg_positions: [0], languages: ["javascript", "typescript"] },
|
|
12195
|
+
{ method: "andHaving", type: "sql_injection", cwe: "CWE-89", severity: "high", arg_positions: [0], languages: ["javascript", "typescript"] },
|
|
12196
|
+
{ method: "orHaving", type: "sql_injection", cwe: "CWE-89", severity: "high", arg_positions: [0], languages: ["javascript", "typescript"] },
|
|
12158
12197
|
// Browser DOM XSS sinks
|
|
12159
12198
|
{ method: "setAttribute", type: "xss", cwe: "CWE-79", severity: "high", arg_positions: [1] },
|
|
12160
12199
|
// Angular DomSanitizer.bypassSecurityTrust* — CWE-79 (#184 Sprint 55).
|
|
@@ -12356,6 +12395,12 @@ var DEFAULT_SINKS = [
|
|
|
12356
12395
|
{ method: "executemany", type: "sql_injection", cwe: "CWE-89", severity: "critical", arg_positions: [0], languages: ["python"] },
|
|
12357
12396
|
{ method: "raw", type: "sql_injection", cwe: "CWE-89", severity: "critical", arg_positions: [0], languages: ["python"] },
|
|
12358
12397
|
{ method: "extra", type: "sql_injection", cwe: "CWE-89", severity: "high", arg_positions: [0], languages: ["python"] },
|
|
12398
|
+
// Django RawSQL expression (django.db.models.expressions.RawSQL) — the raw
|
|
12399
|
+
// SQL fragment in arg[0] is embedded verbatim into the query when the
|
|
12400
|
+
// annotate/filter/order_by containing it runs. Distinctive constructor name,
|
|
12401
|
+
// so classless + python-scoped is safe. Parameterised use passes user input
|
|
12402
|
+
// through arg[1] (`RawSQL("... %s", [uid])`), which keeps it out of arg[0].
|
|
12403
|
+
{ method: "RawSQL", type: "sql_injection", cwe: "CWE-89", severity: "critical", arg_positions: [0], languages: ["python"] },
|
|
12359
12404
|
// Python Path Traversal
|
|
12360
12405
|
// Language-scoped: classless `open` collides with Java I/O / JS DOM.
|
|
12361
12406
|
{ method: "open", type: "path_traversal", cwe: "CWE-22", severity: "high", arg_positions: [0], languages: ["python"] },
|
|
@@ -10411,6 +10411,26 @@ var DEFAULT_SOURCES = [
|
|
|
10411
10411
|
{ annotation: "FormParam", type: "http_param", severity: "high", param_tainted: true },
|
|
10412
10412
|
{ annotation: "PathParam", type: "http_path", severity: "medium", param_tainted: true },
|
|
10413
10413
|
{ annotation: "HeaderParam", type: "http_header", severity: "high", param_tainted: true },
|
|
10414
|
+
// JAX-RS params the block was missing (jakarta.ws.rs). Java-scoped — the
|
|
10415
|
+
// JS decorator ecosystem has its own distinct names and should not match.
|
|
10416
|
+
{ annotation: "CookieParam", type: "http_cookie", severity: "high", param_tainted: true, languages: ["java"] },
|
|
10417
|
+
{ annotation: "MatrixParam", type: "http_param", severity: "high", param_tainted: true, languages: ["java"] },
|
|
10418
|
+
{ annotation: "BeanParam", type: "http_body", severity: "high", param_tainted: true, languages: ["java"] },
|
|
10419
|
+
// Micronaut (io.micronaut.http.annotation). @Body / @Header / @CookieValue /
|
|
10420
|
+
// @PathVariable reuse Spring/JAX-RS names already covered above; these three
|
|
10421
|
+
// are Micronaut-specific. Java-scoped.
|
|
10422
|
+
{ annotation: "QueryValue", type: "http_param", severity: "high", param_tainted: true, languages: ["java"] },
|
|
10423
|
+
{ annotation: "Part", type: "http_body", severity: "high", param_tainted: true, languages: ["java"] },
|
|
10424
|
+
{ annotation: "RequestBean", type: "http_body", severity: "high", param_tainted: true, languages: ["java"] },
|
|
10425
|
+
// Quarkus / RESTEasy Reactive (org.jboss.resteasy.reactive) — the `@Rest*`
|
|
10426
|
+
// shortcut annotations that infer the binding name from the parameter name.
|
|
10427
|
+
// Java-scoped.
|
|
10428
|
+
{ annotation: "RestQuery", type: "http_param", severity: "high", param_tainted: true, languages: ["java"] },
|
|
10429
|
+
{ annotation: "RestPath", type: "http_path", severity: "medium", param_tainted: true, languages: ["java"] },
|
|
10430
|
+
{ annotation: "RestHeader", type: "http_header", severity: "high", param_tainted: true, languages: ["java"] },
|
|
10431
|
+
{ annotation: "RestForm", type: "http_param", severity: "high", param_tainted: true, languages: ["java"] },
|
|
10432
|
+
{ annotation: "RestCookie", type: "http_cookie", severity: "high", param_tainted: true, languages: ["java"] },
|
|
10433
|
+
{ annotation: "RestMatrix", type: "http_param", severity: "high", param_tainted: true, languages: ["java"] },
|
|
10414
10434
|
// Jenkins data-binding: every parameter of an annotated constructor is wired
|
|
10415
10435
|
// from form/JSON user input at construction time. Method-level annotation —
|
|
10416
10436
|
// all params tainted.
|
|
@@ -12089,6 +12109,25 @@ var DEFAULT_SINKS = [
|
|
|
12089
12109
|
{ method: "each", class: "Connection", type: "sql_injection", cwe: "CWE-89", severity: "critical", arg_positions: [0], languages: ["javascript", "typescript"], allow_unresolved_receiver: true },
|
|
12090
12110
|
{ method: "get", class: "Connection", type: "sql_injection", cwe: "CWE-89", severity: "critical", arg_positions: [0], languages: ["javascript", "typescript"], allow_unresolved_receiver: true },
|
|
12091
12111
|
{ method: "exec", class: "Connection", type: "sql_injection", cwe: "CWE-89", severity: "critical", arg_positions: [0], languages: ["javascript", "typescript"], allow_unresolved_receiver: true },
|
|
12112
|
+
// TypeORM QueryBuilder raw fragments (CWE-89). TypeORM's raw `.query(sql)`
|
|
12113
|
+
// escape hatch is already covered by the classless `query` sink in the JS
|
|
12114
|
+
// plugin (getBuiltinSinks), so it is NOT re-registered here — the dedup
|
|
12115
|
+
// would discard the duplicate anyway. What was uncovered is the
|
|
12116
|
+
// QueryBuilder fragment API: `andWhere`/`orWhere`/`andHaving`/`orHaving`
|
|
12117
|
+
// take raw SQL strings. These names are TypeORM-idiomatic, so classless +
|
|
12118
|
+
// language-scoped is safe and recovers the dominant chained-builder shape
|
|
12119
|
+
// (`repo.createQueryBuilder('u').andWhere(raw)`) that class matching cannot
|
|
12120
|
+
// reach — the receiver of `.andWhere(...)` is the factory call, not a
|
|
12121
|
+
// class-named variable. Generic `where`/`having` are deliberately NOT added
|
|
12122
|
+
// (too generic for classless; a `*QueryBuilder`-scoped entry would be
|
|
12123
|
+
// near-dead since receivers are rarely named that). Precision is inherent
|
|
12124
|
+
// to the flow: parameterised use (`:id` placeholders + a params object)
|
|
12125
|
+
// keeps input out of the string literal, so a finding fires only on
|
|
12126
|
+
// concatenation.
|
|
12127
|
+
{ method: "andWhere", type: "sql_injection", cwe: "CWE-89", severity: "high", arg_positions: [0], languages: ["javascript", "typescript"] },
|
|
12128
|
+
{ method: "orWhere", type: "sql_injection", cwe: "CWE-89", severity: "high", arg_positions: [0], languages: ["javascript", "typescript"] },
|
|
12129
|
+
{ method: "andHaving", type: "sql_injection", cwe: "CWE-89", severity: "high", arg_positions: [0], languages: ["javascript", "typescript"] },
|
|
12130
|
+
{ method: "orHaving", type: "sql_injection", cwe: "CWE-89", severity: "high", arg_positions: [0], languages: ["javascript", "typescript"] },
|
|
12092
12131
|
// Browser DOM XSS sinks
|
|
12093
12132
|
{ method: "setAttribute", type: "xss", cwe: "CWE-79", severity: "high", arg_positions: [1] },
|
|
12094
12133
|
// Angular DomSanitizer.bypassSecurityTrust* — CWE-79 (#184 Sprint 55).
|
|
@@ -12290,6 +12329,12 @@ var DEFAULT_SINKS = [
|
|
|
12290
12329
|
{ method: "executemany", type: "sql_injection", cwe: "CWE-89", severity: "critical", arg_positions: [0], languages: ["python"] },
|
|
12291
12330
|
{ method: "raw", type: "sql_injection", cwe: "CWE-89", severity: "critical", arg_positions: [0], languages: ["python"] },
|
|
12292
12331
|
{ method: "extra", type: "sql_injection", cwe: "CWE-89", severity: "high", arg_positions: [0], languages: ["python"] },
|
|
12332
|
+
// Django RawSQL expression (django.db.models.expressions.RawSQL) — the raw
|
|
12333
|
+
// SQL fragment in arg[0] is embedded verbatim into the query when the
|
|
12334
|
+
// annotate/filter/order_by containing it runs. Distinctive constructor name,
|
|
12335
|
+
// so classless + python-scoped is safe. Parameterised use passes user input
|
|
12336
|
+
// through arg[1] (`RawSQL("... %s", [uid])`), which keeps it out of arg[0].
|
|
12337
|
+
{ method: "RawSQL", type: "sql_injection", cwe: "CWE-89", severity: "critical", arg_positions: [0], languages: ["python"] },
|
|
12293
12338
|
// Python Path Traversal
|
|
12294
12339
|
// Language-scoped: classless `open` collides with Java I/O / JS DOM.
|
|
12295
12340
|
{ method: "open", type: "path_traversal", cwe: "CWE-22", severity: "high", arg_positions: [0], languages: ["python"] },
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "circle-ir",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.201.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",
|