circle-ir 4.6.0 → 4.7.1
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 +25 -3
- package/dist/analysis/config-loader.js.map +1 -1
- package/dist/analysis/interprocedural.d.ts.map +1 -1
- package/dist/analysis/interprocedural.js +16 -1
- package/dist/analysis/interprocedural.js.map +1 -1
- package/dist/analysis/passes/language-sources-pass.d.ts.map +1 -1
- package/dist/analysis/passes/language-sources-pass.js +50 -3
- package/dist/analysis/passes/language-sources-pass.js.map +1 -1
- package/dist/analysis/passes/missing-public-doc-pass.d.ts.map +1 -1
- package/dist/analysis/passes/missing-public-doc-pass.js +6 -1
- package/dist/analysis/passes/missing-public-doc-pass.js.map +1 -1
- package/dist/analysis/passes/sink-filter-pass.d.ts.map +1 -1
- package/dist/analysis/passes/sink-filter-pass.js +10 -0
- package/dist/analysis/passes/sink-filter-pass.js.map +1 -1
- package/dist/analysis/passes/unrestricted-file-upload-pass.d.ts.map +1 -1
- package/dist/analysis/passes/unrestricted-file-upload-pass.js +6 -4
- package/dist/analysis/passes/unrestricted-file-upload-pass.js.map +1 -1
- package/dist/analysis/passes/unused-variable-pass.d.ts.map +1 -1
- package/dist/analysis/passes/unused-variable-pass.js +69 -20
- package/dist/analysis/passes/unused-variable-pass.js.map +1 -1
- package/dist/analysis/passes/weak-crypto-pass.d.ts.map +1 -1
- package/dist/analysis/passes/weak-crypto-pass.js +66 -0
- package/dist/analysis/passes/weak-crypto-pass.js.map +1 -1
- package/dist/analysis/passes/weak-hash-pass.d.ts.map +1 -1
- package/dist/analysis/passes/weak-hash-pass.js +46 -0
- package/dist/analysis/passes/weak-hash-pass.js.map +1 -1
- package/dist/browser/circle-ir.js +203 -25
- package/dist/core/circle-ir-core.cjs +29 -7
- package/dist/core/circle-ir-core.js +29 -7
- package/dist/core/extractors/dfg.js +6 -3
- package/dist/core/extractors/dfg.js.map +1 -1
- 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,EAuwB1C,CAAC;AA+KF,eAAO,MAAM,aAAa,EAAE,WAAW,
|
|
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,EA28DtC,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,gBAAgB,EAuiBhD,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"}
|
|
@@ -1334,8 +1334,11 @@ export const DEFAULT_SINKS = [
|
|
|
1334
1334
|
// SAX handler sinks (can lead to XSS in parsed content)
|
|
1335
1335
|
{ method: 'startElement', class: 'ContentHandler', type: 'xss', cwe: 'CWE-79', severity: 'high', arg_positions: [0, 1, 2] },
|
|
1336
1336
|
{ method: 'characters', class: 'ContentHandler', type: 'xss', cwe: 'CWE-79', severity: 'high', arg_positions: [0] },
|
|
1337
|
-
// Template output sinks
|
|
1338
|
-
|
|
1337
|
+
// Template output sinks. `output` is classless (Java template engines /
|
|
1338
|
+
// Velocity), but Rust `std::process::Command::…output()` is process
|
|
1339
|
+
// execution, not HTML — it already fires the CWE-78 command_injection sink,
|
|
1340
|
+
// so exclude Rust here to drop the spurious xss (cognium-dev#146).
|
|
1341
|
+
{ method: 'output', type: 'xss', cwe: 'CWE-79', severity: 'high', arg_positions: [0], exclude_languages: ['rust'] },
|
|
1339
1342
|
{ method: 'setOutput', type: 'xss', cwe: 'CWE-79', severity: 'high', arg_positions: [0] },
|
|
1340
1343
|
{ method: 'writeAttribute', type: 'xss', cwe: 'CWE-79', severity: 'high', arg_positions: [0, 1] },
|
|
1341
1344
|
// AntiSamy specific (SAX filters)
|
|
@@ -2624,7 +2627,10 @@ export const DEFAULT_SINKS = [
|
|
|
2624
2627
|
{ method: 'ExecuteReaderAsync', type: 'sql_injection', cwe: 'CWE-89', severity: 'critical', arg_positions: [0], languages: ['csharp'] },
|
|
2625
2628
|
{ method: 'ExecuteNonQueryAsync', type: 'sql_injection', cwe: 'CWE-89', severity: 'critical', arg_positions: [0], languages: ['csharp'] },
|
|
2626
2629
|
// C# command injection — Process.Start / ProcessStartInfo (CWE-78).
|
|
2627
|
-
|
|
2630
|
+
// Both the single-string overload `Process.Start("sh -c " + x)` and the
|
|
2631
|
+
// `(fileName, arguments)` overload `Process.Start("/bin/sh", "-c " + x)` are
|
|
2632
|
+
// injectable — the second is the argv path where taint rides arg[1] (#276).
|
|
2633
|
+
{ method: 'Start', class: 'Process', type: 'command_injection', cwe: 'CWE-78', severity: 'critical', arg_positions: [0, 1], languages: ['csharp'] },
|
|
2628
2634
|
{ method: 'ProcessStartInfo', type: 'command_injection', cwe: 'CWE-78', severity: 'critical', arg_positions: [0, 1], languages: ['csharp'] },
|
|
2629
2635
|
// C# path traversal — System.IO file APIs (CWE-22). Distinctive method names.
|
|
2630
2636
|
{ method: 'ReadAllText', type: 'path_traversal', cwe: 'CWE-22', severity: 'high', arg_positions: [0], languages: ['csharp'] },
|
|
@@ -2665,6 +2671,22 @@ export const DEFAULT_SINKS = [
|
|
|
2665
2671
|
// filter is the constructor argument.
|
|
2666
2672
|
{ method: 'DirectorySearcher', type: 'ldap_injection', cwe: 'CWE-90', severity: 'high', arg_positions: [0], languages: ['csharp'] },
|
|
2667
2673
|
{ method: 'DirectoryEntry', type: 'ldap_injection', cwe: 'CWE-90', severity: 'high', arg_positions: [0], languages: ['csharp'] },
|
|
2674
|
+
// C# open redirect — ASP.NET MVC / Minimal API redirect helpers (CWE-601,
|
|
2675
|
+
// cognium-dev#273/#275). Classless: `return Redirect(url)` on a controller is
|
|
2676
|
+
// an implicit-`this` call (no receiver), and `Results.Redirect(url)` /
|
|
2677
|
+
// `TypedResults.Redirect(url)` also route through the same method name. Taint-
|
|
2678
|
+
// gated, so a constant URL never fires. `LocalRedirect` is deliberately NOT
|
|
2679
|
+
// registered — it rejects non-local URLs and is the documented mitigation.
|
|
2680
|
+
{ method: 'Redirect', type: 'open_redirect', cwe: 'CWE-601', severity: 'medium', arg_positions: [0], languages: ['csharp'] },
|
|
2681
|
+
{ method: 'RedirectPermanent', type: 'open_redirect', cwe: 'CWE-601', severity: 'medium', arg_positions: [0], languages: ['csharp'] },
|
|
2682
|
+
// C# CRLF / HTTP response-header injection — classic ASP.NET header writers
|
|
2683
|
+
// (CWE-113, cognium-dev#273/#275). The injectable value is the second arg.
|
|
2684
|
+
{ method: 'AddHeader', type: 'crlf', cwe: 'CWE-113', severity: 'medium', arg_positions: [1], languages: ['csharp'] },
|
|
2685
|
+
{ method: 'AppendHeader', type: 'crlf', cwe: 'CWE-113', severity: 'medium', arg_positions: [1], languages: ['csharp'] },
|
|
2686
|
+
// C# NoSQL injection — MongoDB filter built from raw JSON (CWE-943,
|
|
2687
|
+
// cognium-dev#273/#275). `BsonDocument.Parse(userJson)` deserializes an
|
|
2688
|
+
// attacker-controlled query document. Class-scoped (static receiver resolves).
|
|
2689
|
+
{ method: 'Parse', class: 'BsonDocument', type: 'nosql_injection', cwe: 'CWE-943', severity: 'high', arg_positions: [0], languages: ['csharp'] },
|
|
2668
2690
|
// C# XPath injection — System.Xml.XPath (CWE-643). Distinctive selector methods.
|
|
2669
2691
|
{ method: 'SelectSingleNode', type: 'xpath_injection', cwe: 'CWE-643', severity: 'high', arg_positions: [0], languages: ['csharp'] },
|
|
2670
2692
|
{ method: 'SelectNodes', type: 'xpath_injection', cwe: 'CWE-643', severity: 'high', arg_positions: [0], languages: ['csharp'] },
|