cognium-dev 3.66.0 → 3.68.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.
Files changed (2) hide show
  1. package/dist/cli.js +63 -4
  2. package/package.json +2 -2
package/dist/cli.js CHANGED
@@ -6279,6 +6279,12 @@ function extractPythonLiteral(node) {
6279
6279
  if (literalTypes.includes(node.type)) {
6280
6280
  const text = getNodeText(node);
6281
6281
  if (node.type === "string") {
6282
+ for (let i2 = 0;i2 < node.childCount; i2++) {
6283
+ const child = node.child(i2);
6284
+ if (child && child.type === "interpolation") {
6285
+ return null;
6286
+ }
6287
+ }
6282
6288
  return text.replace(/^['"]|['"]$/g, "").replace(/^f['"]|['"]$/g, "");
6283
6289
  }
6284
6290
  return text;
@@ -11038,9 +11044,11 @@ var DEFAULT_SINKS = [
11038
11044
  { method: "rmdir", class: "fs", type: "path_traversal", cwe: "CWE-22", severity: "critical", arg_positions: [0] },
11039
11045
  { method: "createReadStream", class: "fs", type: "path_traversal", cwe: "CWE-22", severity: "critical", arg_positions: [0] },
11040
11046
  { method: "createWriteStream", class: "fs", type: "path_traversal", cwe: "CWE-22", severity: "critical", arg_positions: [0] },
11041
- { method: "query", class: "Connection", type: "sql_injection", cwe: "CWE-89", severity: "critical", arg_positions: [0], languages: ["javascript", "typescript"] },
11042
- { method: "query", class: "Pool", type: "sql_injection", cwe: "CWE-89", severity: "critical", arg_positions: [0], languages: ["javascript", "typescript"] },
11043
- { method: "query", class: "Client", type: "sql_injection", cwe: "CWE-89", severity: "critical", arg_positions: [0], languages: ["javascript", "typescript"] },
11047
+ { method: "query", class: "Connection", type: "sql_injection", cwe: "CWE-89", severity: "critical", arg_positions: [0], languages: ["javascript", "typescript"], allow_unresolved_receiver: true },
11048
+ { method: "query", class: "Pool", type: "sql_injection", cwe: "CWE-89", severity: "critical", arg_positions: [0], languages: ["javascript", "typescript"], allow_unresolved_receiver: true },
11049
+ { method: "query", class: "Client", type: "sql_injection", cwe: "CWE-89", severity: "critical", arg_positions: [0], languages: ["javascript", "typescript"], allow_unresolved_receiver: true },
11050
+ { method: "execute", class: "Pool", type: "sql_injection", cwe: "CWE-89", severity: "critical", arg_positions: [0], languages: ["javascript", "typescript"], allow_unresolved_receiver: true },
11051
+ { method: "execute", class: "Connection", type: "sql_injection", cwe: "CWE-89", severity: "critical", arg_positions: [0], languages: ["javascript", "typescript"], allow_unresolved_receiver: true },
11044
11052
  { method: "raw", type: "sql_injection", cwe: "CWE-89", severity: "high", arg_positions: [0], languages: ["javascript", "typescript"] },
11045
11053
  { method: "setAttribute", type: "xss", cwe: "CWE-79", severity: "high", arg_positions: [1] },
11046
11054
  { method: "send", class: "Response", type: "xss", cwe: "CWE-79", severity: "high", arg_positions: [0] },
@@ -11053,6 +11061,9 @@ var DEFAULT_SINKS = [
11053
11061
  { method: "runInContext", class: "vm", type: "code_injection", cwe: "CWE-94", severity: "critical", arg_positions: [0] },
11054
11062
  { method: "runInNewContext", class: "vm", type: "code_injection", cwe: "CWE-94", severity: "critical", arg_positions: [0] },
11055
11063
  { method: "runInThisContext", class: "vm", type: "code_injection", cwe: "CWE-94", severity: "critical", arg_positions: [0] },
11064
+ { method: "parse", class: "protobuf", type: "code_injection", cwe: "CWE-94", severity: "critical", arg_positions: [0], languages: ["javascript", "typescript"] },
11065
+ { method: "parse", class: "protobufjs", type: "code_injection", cwe: "CWE-94", severity: "critical", arg_positions: [0], languages: ["javascript", "typescript"] },
11066
+ { method: "parse", class: "Root", type: "code_injection", cwe: "CWE-94", severity: "critical", arg_positions: [0], languages: ["javascript", "typescript"] },
11056
11067
  { method: "find", class: "Collection", type: "nosql_injection", cwe: "CWE-943", severity: "high", arg_positions: [0] },
11057
11068
  { method: "findOne", class: "Collection", type: "nosql_injection", cwe: "CWE-943", severity: "high", arg_positions: [0] },
11058
11069
  { method: "updateOne", class: "Collection", type: "nosql_injection", cwe: "CWE-943", severity: "high", arg_positions: [0] },
@@ -12249,6 +12260,9 @@ function matchesSinkPattern(call, pattern, typeHierarchy, language) {
12249
12260
  if (typeHierarchy && typeHierarchy.couldBeType(call.receiver, pattern.class)) {
12250
12261
  return true;
12251
12262
  }
12263
+ if (pattern.allow_unresolved_receiver && !call.receiver_type && !call.receiver_type_fqn && call.receiver.includes(".")) {
12264
+ return true;
12265
+ }
12252
12266
  return false;
12253
12267
  } else if (!call.receiver && !call.receiver_type) {
12254
12268
  const target = call.resolution?.target;
@@ -15265,6 +15279,9 @@ class DefaultLanguageRegistry {
15265
15279
  if (language === "tsx") {
15266
15280
  return this.plugins.get("javascript");
15267
15281
  }
15282
+ if (language === "typescript") {
15283
+ return this.plugins.get("javascript");
15284
+ }
15268
15285
  return this.plugins.get(language);
15269
15286
  }
15270
15287
  getForFile(filePath) {
@@ -16853,6 +16870,22 @@ class PythonPlugin extends BaseLanguagePlugin {
16853
16870
  severity: "high",
16854
16871
  argPositions: [0]
16855
16872
  },
16873
+ {
16874
+ method: "urlretrieve",
16875
+ class: "urllib.request",
16876
+ type: "ssrf",
16877
+ cwe: "CWE-918",
16878
+ severity: "high",
16879
+ argPositions: [0]
16880
+ },
16881
+ {
16882
+ method: "urlretrieve",
16883
+ class: "urllib.request",
16884
+ type: "path_traversal",
16885
+ cwe: "CWE-22",
16886
+ severity: "high",
16887
+ argPositions: [1]
16888
+ },
16856
16889
  {
16857
16890
  method: "loads",
16858
16891
  class: "pickle",
@@ -22122,6 +22155,32 @@ class SinkFilterPass {
22122
22155
  return true;
22123
22156
  });
22124
22157
  }
22158
+ if (["javascript", "typescript"].includes(language)) {
22159
+ const sourceLines = ctx.code.split(`
22160
+ `);
22161
+ const guardPatterns = /\b(?:includes|startsWith|endsWith|indexOf|test|match)\s*\(/;
22162
+ filtered = filtered.filter((sink) => {
22163
+ if (sink.type !== "open_redirect" && sink.type !== "crlf") {
22164
+ return true;
22165
+ }
22166
+ const sinkLineText = sourceLines[sink.line - 1] ?? "";
22167
+ const startLine = Math.max(0, sink.line - 7);
22168
+ for (let i2 = startLine;i2 < sink.line - 1; i2++) {
22169
+ const line = sourceLines[i2] ?? "";
22170
+ if (/\bif\s*\(/.test(line) && guardPatterns.test(line)) {
22171
+ return false;
22172
+ }
22173
+ }
22174
+ if (/\bencodeURIComponent\s*\(|\bencodeURI\s*\(/.test(sinkLineText)) {
22175
+ return false;
22176
+ }
22177
+ const setHeaderMatch = sinkLineText.match(/setHeader\s*\(\s*[^,]+,\s*(['"`])([^'"`]*)\1\s*\)/);
22178
+ if (setHeaderMatch) {
22179
+ return false;
22180
+ }
22181
+ return true;
22182
+ });
22183
+ }
22125
22184
  return { sources, sinks: filtered, sanitizers };
22126
22185
  }
22127
22186
  }
@@ -31317,7 +31376,7 @@ var colors = {
31317
31376
  };
31318
31377
 
31319
31378
  // src/version.ts
31320
- var version = "3.66.0";
31379
+ var version = "3.68.0";
31321
31380
 
31322
31381
  // src/formatters.ts
31323
31382
  var SINK_SEVERITY = {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cognium-dev",
3
- "version": "3.66.0",
3
+ "version": "3.68.0",
4
4
  "description": "Static Application Security Testing CLI for detecting security vulnerabilities via taint tracking",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -65,7 +65,7 @@
65
65
  "registry": "https://registry.npmjs.org/"
66
66
  },
67
67
  "dependencies": {
68
- "circle-ir": "^3.66.0"
68
+ "circle-ir": "^3.68.0"
69
69
  },
70
70
  "devDependencies": {
71
71
  "@types/node": "^25.5.0",