circle-ir 3.80.0 → 3.82.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/configs/sinks/xss.yaml +2 -1
- package/dist/analysis/config-loader.d.ts.map +1 -1
- package/dist/analysis/config-loader.js +26 -4
- package/dist/analysis/config-loader.js.map +1 -1
- package/dist/analysis/passes/_credential-helpers.d.ts +40 -0
- package/dist/analysis/passes/_credential-helpers.d.ts.map +1 -0
- package/dist/analysis/passes/_credential-helpers.js +152 -0
- package/dist/analysis/passes/_credential-helpers.js.map +1 -0
- package/dist/analysis/passes/cleartext-credential-transport-pass.d.ts +42 -0
- package/dist/analysis/passes/cleartext-credential-transport-pass.d.ts.map +1 -0
- package/dist/analysis/passes/cleartext-credential-transport-pass.js +196 -0
- package/dist/analysis/passes/cleartext-credential-transport-pass.js.map +1 -0
- package/dist/analysis/passes/info-disclosure-stacktrace-pass.d.ts +48 -0
- package/dist/analysis/passes/info-disclosure-stacktrace-pass.d.ts.map +1 -0
- package/dist/analysis/passes/info-disclosure-stacktrace-pass.js +222 -0
- package/dist/analysis/passes/info-disclosure-stacktrace-pass.js.map +1 -0
- package/dist/analysis/passes/plaintext-password-storage-pass.d.ts +47 -0
- package/dist/analysis/passes/plaintext-password-storage-pass.d.ts.map +1 -0
- package/dist/analysis/passes/plaintext-password-storage-pass.js +159 -0
- package/dist/analysis/passes/plaintext-password-storage-pass.js.map +1 -0
- package/dist/analysis/passes/unrestricted-file-upload-pass.d.ts +46 -0
- package/dist/analysis/passes/unrestricted-file-upload-pass.d.ts.map +1 -0
- package/dist/analysis/passes/unrestricted-file-upload-pass.js +193 -0
- package/dist/analysis/passes/unrestricted-file-upload-pass.js.map +1 -0
- package/dist/analysis/passes/weak-password-encoding-pass.d.ts +40 -0
- package/dist/analysis/passes/weak-password-encoding-pass.d.ts.map +1 -0
- package/dist/analysis/passes/weak-password-encoding-pass.js +157 -0
- package/dist/analysis/passes/weak-password-encoding-pass.js.map +1 -0
- package/dist/analysis/passes/weak-password-hash-pass.d.ts +49 -0
- package/dist/analysis/passes/weak-password-hash-pass.d.ts.map +1 -0
- package/dist/analysis/passes/weak-password-hash-pass.js +225 -0
- package/dist/analysis/passes/weak-password-hash-pass.js.map +1 -0
- package/dist/analyzer.d.ts.map +1 -1
- package/dist/analyzer.js +18 -0
- package/dist/analyzer.js.map +1 -1
- package/dist/browser/circle-ir.js +912 -4
- package/dist/core/circle-ir-core.cjs +26 -4
- package/dist/core/circle-ir-core.js +26 -4
- package/package.json +1 -1
|
@@ -10759,7 +10759,12 @@ var DEFAULT_SINKS = [
|
|
|
10759
10759
|
// Class-less XSS patterns for cases where receiver type is inferred
|
|
10760
10760
|
{ method: "println", type: "xss", cwe: "CWE-79", severity: "medium", arg_positions: [0] },
|
|
10761
10761
|
{ method: "print", type: "xss", cwe: "CWE-79", severity: "medium", arg_positions: [0] },
|
|
10762
|
-
{ method:
|
|
10762
|
+
// NOTE: the unscoped { method: 'write', type: 'xss' } entry was removed in
|
|
10763
|
+
// Sprint 28 (#110). It mistyped every non-XSS .write() across all languages
|
|
10764
|
+
// (fs.writeFile, open().write, bcrypt callbacks, credential file writes,
|
|
10765
|
+
// node ClientRequest.write, etc.) as xss. Real HTML writers are covered
|
|
10766
|
+
// by class-scoped entries: PrintWriter.write (line 843), ServletOutputStream.write
|
|
10767
|
+
// (line 849), JspWriter.write (xss.yaml), Response.write (nodejs.json).
|
|
10763
10768
|
{ method: "append", class: "StringBuilder", type: "xss", cwe: "CWE-79", severity: "medium", arg_positions: [0] },
|
|
10764
10769
|
{ method: "append", class: "StringBuffer", type: "xss", cwe: "CWE-79", severity: "medium", arg_positions: [0] },
|
|
10765
10770
|
// Wiki/CMS XSS sinks (JSPWiki, Confluence, etc.)
|
|
@@ -11956,9 +11961,26 @@ var DEFAULT_SANITIZERS = [
|
|
|
11956
11961
|
// JSON.parse (data is validated against JSON grammar, prevents XSS/code injection)
|
|
11957
11962
|
{ method: "parse", class: "JSON", removes: ["xss", "code_injection"] },
|
|
11958
11963
|
// Type coercion (removes string-based injections)
|
|
11959
|
-
|
|
11960
|
-
|
|
11961
|
-
{ method: "
|
|
11964
|
+
// Sprint 29 (#113): include external_taint_escape — a numeric cast cannot
|
|
11965
|
+
// carry an unvalidated string payload across a function boundary.
|
|
11966
|
+
{ method: "parseInt", removes: ["sql_injection", "nosql_injection", "command_injection", "xss", "external_taint_escape", "path_traversal", "code_injection"] },
|
|
11967
|
+
{ method: "parseFloat", removes: ["sql_injection", "nosql_injection", "command_injection", "external_taint_escape", "path_traversal", "code_injection"] },
|
|
11968
|
+
{ method: "Number", removes: ["sql_injection", "nosql_injection", "command_injection", "external_taint_escape", "path_traversal", "code_injection"] },
|
|
11969
|
+
// Sprint 29 (#113): bounds-clamp Math.min / Math.max — when used to bound
|
|
11970
|
+
// a numeric/size value (e.g. `Math.min(size, MAX_BYTES)`), the result is
|
|
11971
|
+
// safely bounded and cannot resource-exhaust downstream. Only suppress
|
|
11972
|
+
// external_taint_escape — these helpers do NOT sanitize string injection.
|
|
11973
|
+
{ method: "min", class: "Math", removes: ["external_taint_escape"] },
|
|
11974
|
+
{ method: "max", class: "Math", removes: ["external_taint_escape"] },
|
|
11975
|
+
// Sprint 29 (#113): allow-list / membership guards — when an external value
|
|
11976
|
+
// is tested against an allow-list (`ALLOWED.includes(x)`, `set.has(x)`,
|
|
11977
|
+
// `list.contains(x)`) before being forwarded, it cannot escape unbounded.
|
|
11978
|
+
// Only suppress `external_taint_escape`; real string-injection sinks should
|
|
11979
|
+
// still rely on their own escaping.
|
|
11980
|
+
{ method: "includes", removes: ["external_taint_escape"] },
|
|
11981
|
+
{ method: "has", removes: ["external_taint_escape"] },
|
|
11982
|
+
{ method: "contains", removes: ["external_taint_escape"] },
|
|
11983
|
+
{ method: "indexOf", removes: ["external_taint_escape"] },
|
|
11962
11984
|
// Path sanitization
|
|
11963
11985
|
{ method: "basename", class: "path", removes: ["path_traversal"] },
|
|
11964
11986
|
{ method: "normalize", class: "path", removes: ["path_traversal"] },
|
|
@@ -10693,7 +10693,12 @@ var DEFAULT_SINKS = [
|
|
|
10693
10693
|
// Class-less XSS patterns for cases where receiver type is inferred
|
|
10694
10694
|
{ method: "println", type: "xss", cwe: "CWE-79", severity: "medium", arg_positions: [0] },
|
|
10695
10695
|
{ method: "print", type: "xss", cwe: "CWE-79", severity: "medium", arg_positions: [0] },
|
|
10696
|
-
{ method:
|
|
10696
|
+
// NOTE: the unscoped { method: 'write', type: 'xss' } entry was removed in
|
|
10697
|
+
// Sprint 28 (#110). It mistyped every non-XSS .write() across all languages
|
|
10698
|
+
// (fs.writeFile, open().write, bcrypt callbacks, credential file writes,
|
|
10699
|
+
// node ClientRequest.write, etc.) as xss. Real HTML writers are covered
|
|
10700
|
+
// by class-scoped entries: PrintWriter.write (line 843), ServletOutputStream.write
|
|
10701
|
+
// (line 849), JspWriter.write (xss.yaml), Response.write (nodejs.json).
|
|
10697
10702
|
{ method: "append", class: "StringBuilder", type: "xss", cwe: "CWE-79", severity: "medium", arg_positions: [0] },
|
|
10698
10703
|
{ method: "append", class: "StringBuffer", type: "xss", cwe: "CWE-79", severity: "medium", arg_positions: [0] },
|
|
10699
10704
|
// Wiki/CMS XSS sinks (JSPWiki, Confluence, etc.)
|
|
@@ -11890,9 +11895,26 @@ var DEFAULT_SANITIZERS = [
|
|
|
11890
11895
|
// JSON.parse (data is validated against JSON grammar, prevents XSS/code injection)
|
|
11891
11896
|
{ method: "parse", class: "JSON", removes: ["xss", "code_injection"] },
|
|
11892
11897
|
// Type coercion (removes string-based injections)
|
|
11893
|
-
|
|
11894
|
-
|
|
11895
|
-
{ method: "
|
|
11898
|
+
// Sprint 29 (#113): include external_taint_escape — a numeric cast cannot
|
|
11899
|
+
// carry an unvalidated string payload across a function boundary.
|
|
11900
|
+
{ method: "parseInt", removes: ["sql_injection", "nosql_injection", "command_injection", "xss", "external_taint_escape", "path_traversal", "code_injection"] },
|
|
11901
|
+
{ method: "parseFloat", removes: ["sql_injection", "nosql_injection", "command_injection", "external_taint_escape", "path_traversal", "code_injection"] },
|
|
11902
|
+
{ method: "Number", removes: ["sql_injection", "nosql_injection", "command_injection", "external_taint_escape", "path_traversal", "code_injection"] },
|
|
11903
|
+
// Sprint 29 (#113): bounds-clamp Math.min / Math.max — when used to bound
|
|
11904
|
+
// a numeric/size value (e.g. `Math.min(size, MAX_BYTES)`), the result is
|
|
11905
|
+
// safely bounded and cannot resource-exhaust downstream. Only suppress
|
|
11906
|
+
// external_taint_escape — these helpers do NOT sanitize string injection.
|
|
11907
|
+
{ method: "min", class: "Math", removes: ["external_taint_escape"] },
|
|
11908
|
+
{ method: "max", class: "Math", removes: ["external_taint_escape"] },
|
|
11909
|
+
// Sprint 29 (#113): allow-list / membership guards — when an external value
|
|
11910
|
+
// is tested against an allow-list (`ALLOWED.includes(x)`, `set.has(x)`,
|
|
11911
|
+
// `list.contains(x)`) before being forwarded, it cannot escape unbounded.
|
|
11912
|
+
// Only suppress `external_taint_escape`; real string-injection sinks should
|
|
11913
|
+
// still rely on their own escaping.
|
|
11914
|
+
{ method: "includes", removes: ["external_taint_escape"] },
|
|
11915
|
+
{ method: "has", removes: ["external_taint_escape"] },
|
|
11916
|
+
{ method: "contains", removes: ["external_taint_escape"] },
|
|
11917
|
+
{ method: "indexOf", removes: ["external_taint_escape"] },
|
|
11896
11918
|
// Path sanitization
|
|
11897
11919
|
{ method: "basename", class: "path", removes: ["path_traversal"] },
|
|
11898
11920
|
{ method: "normalize", class: "path", removes: ["path_traversal"] },
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "circle-ir",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.82.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",
|