@nodesecure/js-x-ray 6.2.0 → 6.3.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/README.md CHANGED
@@ -20,12 +20,10 @@
20
20
  </a>
21
21
  </p>
22
22
 
23
- JavaScript AST analysis. This package has been created to export the [Node-Secure](https://github.com/ES-Community/nsecure) AST Analysis to enable better code evolution and allow better access to developers and researchers.
23
+ JavaScript AST analysis. This package has been created to export the [NodeSecure](https://github.com/NodeSecure/cli) AST Analysis to enable better code evolution and allow better access to developers and researchers.
24
24
 
25
25
  The goal is to quickly identify dangerous code and patterns for developers and Security researchers. Interpreting the results of this tool will still require you to have a set of security notions.
26
26
 
27
- > **Note** I have no particular background in security. I'm simply becoming more and more interested and passionate about static code analysis. But I would be more than happy to learn that my work can help prevent potential future attacks (or leaks).
28
-
29
27
  ## Goals
30
28
  The objective of the project is to successfully detect all potentially suspicious JavaScript codes.. The target is obviously codes that are added or injected for malicious purposes..
31
29
 
@@ -85,7 +83,8 @@ console.log(warnings);
85
83
 
86
84
  The analysis will return: `http` (in try), `crypto`, `util` and `fs`.
87
85
 
88
- > **Warning** There is also a lot of suspicious code example in the `./examples` cases directory. Feel free to try the tool on these files.
86
+ > [!NOTE]
87
+ > There is also a lot of suspicious code example in the `./examples` cases directory. Feel free to try the tool on these files.
89
88
 
90
89
  ## Warnings
91
90
 
@@ -122,8 +121,6 @@ console.log(i18n.getTokenSync(jsxray.warnings["parsing-error"].i18n));
122
121
 
123
122
  ## Warnings Legends
124
123
 
125
- > **Warning** versions of NodeSecure greather than v0.7.0 are no longer compatible with the warnings table below.
126
-
127
124
  This section describe all the possible warnings returned by JSXRay. Click on the warning **name** for additional information and examples.
128
125
 
129
126
  | name | experimental | description |
@@ -194,6 +191,21 @@ export type ReportOnFile = {
194
191
 
195
192
  </details>
196
193
 
194
+ ## Workspaces
195
+
196
+ Click on one of the links to access the documentation of the workspace:
197
+
198
+ | name | package and link |
199
+ | --- | --- |
200
+ | estree-ast-util | [@nodesecure/estree-ast-util](./workspaces/estree-ast-util) |
201
+ | sec-literal | [@nodesecure/sec-literal ](./workspaces/sec-literal) |
202
+
203
+ These packages are available in the Node Package Repository and can be easily installed with [npm](https://docs.npmjs.com/getting-started/what-is-npm) or [yarn](https://yarnpkg.com).
204
+ ```bash
205
+ $ npm i @nodesecure/estree-ast-util
206
+ # or
207
+ $ yarn add @nodesecure/estree-ast-util
208
+ ```
197
209
 
198
210
  ## Contributors ✨
199
211
 
package/index.js CHANGED
@@ -122,15 +122,19 @@ function parseScriptExtended(strToAnalyze, options = {}) {
122
122
  return body;
123
123
  }
124
124
  catch (error) {
125
+ const isIllegalReturn = error.description.includes("Illegal return statement");
126
+
125
127
  if (error.name === "SyntaxError" && (
126
128
  error.description.includes("The import keyword") ||
127
- error.description.includes("The export keyword")
129
+ error.description.includes("The export keyword") ||
130
+ isIllegalReturn
128
131
  )) {
129
132
  const { body } = meriyah.parseScript(
130
133
  cleanedStrToAnalyze,
131
134
  {
132
135
  ...kMeriyahDefaultOptions,
133
- module: true
136
+ module: true,
137
+ globalReturn: isIllegalReturn
134
138
  }
135
139
  );
136
140
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nodesecure/js-x-ray",
3
- "version": "6.2.0",
3
+ "version": "6.3.0",
4
4
  "description": "JavaScript AST XRay analysis",
5
5
  "type": "module",
6
6
  "exports": "./index.js",
@@ -18,6 +18,10 @@
18
18
  "type": "git",
19
19
  "url": "git+https://github.com/NodeSecure/js-x-ray.git"
20
20
  },
21
+ "workspaces": [
22
+ "workspaces/estree-ast-utils",
23
+ "workspaces/sec-literal"
24
+ ],
21
25
  "keywords": [
22
26
  "ast",
23
27
  "nsecure",
@@ -48,10 +52,15 @@
48
52
  },
49
53
  "devDependencies": {
50
54
  "@nodesecure/eslint-config": "^1.6.0",
55
+ "@small-tech/esm-tape-runner": "^2.0.0",
56
+ "@small-tech/tap-monkey": "^1.4.0",
51
57
  "@types/node": "^20.6.2",
52
58
  "c8": "^8.0.1",
59
+ "cross-env": "^7.0.3",
53
60
  "eslint": "^8.31.0",
54
61
  "glob": "^10.3.4",
55
- "pkg-ok": "^3.0.0"
62
+ "iterator-matcher": "^2.1.0",
63
+ "pkg-ok": "^3.0.0",
64
+ "tape": "^5.7.2"
56
65
  }
57
66
  }
@@ -146,7 +146,6 @@ function walkRequireCallExpression(nodeToWalk, tracer) {
146
146
  break;
147
147
  }
148
148
  case "require.resolve": {
149
- console.log("require.resolve!");
150
149
  if (rootArgument.type === "Literal") {
151
150
  dependencies.add(rootArgument.value);
152
151
  }
@@ -26,6 +26,7 @@ declare class ASTDeps {
26
26
  removeByName(name: string): void;
27
27
  add(depName: string): void;
28
28
  getDependenciesInTryStatement(): IterableIterator<string>;
29
+ [Symbol.iterator]: IterableIterator<string>;
29
30
 
30
31
  public isInTryStmt: boolean;
31
32
  public dependencies: Record<string, Dependency>;
@@ -21,15 +21,16 @@ type WarningName = WarningNameWithValue | "unsafe-import";
21
21
 
22
22
  type WarningLocation = [[number, number], [number, number]];
23
23
 
24
- interface WarningDefault {
25
- kind: WarningName;
24
+ interface WarningDefault<T = WarningName> {
25
+ kind: T;
26
26
  file?: string;
27
27
  value: string;
28
- source: string;
29
- location: WarningLocation | WarningLocation[];
28
+ source: string;
29
+ location: null | WarningLocation | WarningLocation[];
30
30
  i18n: string;
31
31
  severity: "Information" | "Warning" | "Critical";
32
32
  experimental?: boolean;
33
33
  }
34
34
 
35
- type Warning<T extends WarningDefault = WarningDefault> = T extends { kind: WarningNameWithValue } ? T : Omit<T, "value">;
35
+ type Warning<T extends WarningDefault = WarningDefault> =
36
+ T extends { kind: WarningNameWithValue } ? T : Omit<T, "value">;