|
3 | 3 | ## General improvements |
4 | 4 |
|
5 | 5 | * Support for the following frameworks and libraries has been improved: |
| 6 | + - [Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise) |
| 7 | + - [bluebird](http://bluebirdjs.com/) |
6 | 8 | - [express](https://www.npmjs.com/package/express) |
| 9 | + - [fancy-log](https://www.npmjs.com/package/fancy-log) |
| 10 | + - [fastify](https://www.npmjs.com/package/fastify) |
7 | 11 | - [fstream](https://www.npmjs.com/package/fstream) |
8 | 12 | - [jGrowl](https://github.com/stanlemon/jGrowl) |
9 | 13 | - [jQuery](https://jquery.com/) |
10 | 14 | - [marsdb](https://www.npmjs.com/package/marsdb) |
| 15 | + - [micro](https://www.npmjs.com/package/micro/) |
11 | 16 | - [minimongo](https://www.npmjs.com/package/minimongo/) |
| 17 | + - [mssql](https://www.npmjs.com/package/mssql) |
| 18 | + - [mysql](https://www.npmjs.com/package/mysql) |
| 19 | + - [npmlog](https://www.npmjs.com/package/npmlog) |
| 20 | + - [pg](https://www.npmjs.com/package/pg) |
| 21 | + - [sequelize](https://www.npmjs.com/package/sequelize) |
| 22 | + - [spanner](https://www.npmjs.com/package/spanner) |
| 23 | + - [sqlite](https://www.npmjs.com/package/sqlite) |
| 24 | + - [ssh2-streams](https://www.npmjs.com/package/ssh2-streams) |
| 25 | + - [ssh2](https://www.npmjs.com/package/ssh2) |
| 26 | + - [vue](https://www.npmjs.com/package/vue) |
| 27 | + - [yargs](https://www.npmjs.com/package/yargs) |
| 28 | + - [webpack-dev-server](https://www.npmjs.com/package/webpack-dev-server) |
| 29 | + |
| 30 | +* TypeScript 3.9 is now supported. |
| 31 | + |
| 32 | +* TypeScript code embedded in HTML and Vue files is now extracted and analyzed. |
| 33 | + |
| 34 | +* The analysis of sanitizers has improved, leading to more accurate |
| 35 | + results from the security queries. |
12 | 36 |
|
13 | 37 | ## New queries |
14 | 38 |
|
15 | 39 | | **Query** | **Tags** | **Purpose** | |
16 | 40 | |---------------------------------------------------------------------------------|-------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| |
17 | | -| Cross-site scripting through DOM (`js/xss-through-dom`) | security, external/cwe/cwe-079, external/cwe/cwe-116 | Highlights potential XSS vulnerabilities where existing text from the DOM is used as HTML. Results are not shown on LGTM by default. | |
| 41 | +| DOM text reinterpreted as HTML (`js/xss-through-dom`) | security, external/cwe/cwe-079, external/cwe/cwe-116 | Highlights potential XSS vulnerabilities where existing text from the DOM is used as HTML. Results are shown on LGTM by default. | |
18 | 42 | | Incomplete HTML attribute sanitization (`js/incomplete-html-attribute-sanitization`) | security, external/cwe/cwe-20, external/cwe/cwe-079, external/cwe/cwe-116 | Highlights potential XSS vulnerabilities due to incomplete sanitization of HTML meta-characters. Results are shown on LGTM by default. | |
19 | 43 | | Unsafe expansion of self-closing HTML tag (`js/unsafe-html-expansion`) | security, external/cwe/cwe-079, external/cwe/cwe-116 | Highlights potential XSS vulnerabilities caused by unsafe expansion of self-closing HTML tags. | |
| 44 | +| Unsafe shell command constructed from library input (`js/shell-command-constructed-from-input`) | correctness, security, external/cwe/cwe-078, external/cwe/cwe-088 | Highlights potential command injections due to a shell command being constructed from library inputs. Results are shown on LGTM by default. | |
| 45 | +| Download of sensitive file through insecure connection (`js/insecure-download`) | security, external/cwe/cwe-829 | Highlights downloads of sensitive files through an unencrypted protocol. Results are shown on LGTM by default. | |
| 46 | +| Exposure of private files (`js/exposure-of-private-files`) | security, external/cwe/cwe-200 | Highlights servers that serve private files. Results are shown on LGTM by default. | |
| 47 | +| Creating biased random numbers from a cryptographically secure source (`js/biased-cryptographic-random`) | security, external/cwe/cwe-327 | Highlights mathematical operations on cryptographically secure numbers that can create biased results. Results are shown on LGTM by default. | |
| 48 | +| Storage of sensitive information in build artifact (`js/build-artifact-leak`) | security, external/cwe/cwe-312 | Highlights storage of sensitive information in build artifacts. Results are shown on LGTM by default. | |
| 49 | +| Improper code sanitization (`js/bad-code-sanitization`) | security, external/cwe/cwe-094, external/cwe/cwe-079, external/cwe/cwe-116 | Highlights string concatenation where code is constructed without proper sanitization. Results are shown on LGTM by default. | |
| 50 | +| Disabling certificate validation (`js/disabling-certificate-validation`) | security, external/cwe-295 | Highlights locations where SSL certificate validation is disabled. Results are shown on LGTM by default. | |
| 51 | +| Incomplete multi-character sanitization (`js/incomplete-multi-character-sanitization`) | correctness, security, external/cwe/cwe-20, external/cwe/cwe-116 | Highlights sanitizers that fail to remove dangerous substrings completely. Results are shown on LGTM by default. | |
20 | 52 |
|
21 | 53 | ## Changes to existing queries |
22 | 54 |
|
23 | 55 | | **Query** | **Expected impact** | **Change** | |
24 | 56 | |--------------------------------|------------------------------|---------------------------------------------------------------------------| |
25 | | -| Misspelled variable name (`js/misspelled-variable-name`) | Message changed | The message for this query now correctly identifies the misspelled variable in additional cases. | |
26 | | -| Uncontrolled data used in path expression (`js/path-injection`) | More results | This query now recognizes additional file system calls. | |
27 | | -| Uncontrolled command line (`js/command-line-injection`) | More results | This query now recognizes additional command execution calls. | |
28 | | -| Client-side URL redirect (`js/client-side-unvalidated-url-redirection`) | Less results | This query now recognizes additional safe patterns of doing URL redirects. | |
29 | | -| Client-side cross-site scripting (`js/xss`) | Less results | This query now recognizes additional safe strings based on URLs. | |
| 57 | +| Client-side cross-site scripting (`js/xss`) | Fewer results | This query now recognizes additional safe patterns of constructing HTML. | |
| 58 | +| Client-side URL redirect (`js/client-side-unvalidated-url-redirection`) | Fewer results | This query now recognizes additional safe patterns of doing URL redirects. | |
| 59 | +| Code injection (`js/code-injection`) | More results | More potential vulnerabilities involving NoSQL code operators are now recognized. | |
| 60 | +| Exception text reinterpreted as HTML (`js/exception-xss`) | Rephrased and changed visibility | Rephrased name and alert message. Severity lowered from error to warning. Results are now shown on LGTM by default. | |
| 61 | +| Expression has no effect (`js/useless-expression`) | Fewer results | This query no longer flags an expression when that expression is the only content of the containing file. | |
| 62 | +| Hard-coded credentials (`js/hardcoded-credentials`) | More results | This query now recognizes hard-coded credentials sent via HTTP authorization headers. | |
30 | 63 | | Incomplete URL scheme check (`js/incomplete-url-scheme-check`) | More results | This query now recognizes additional url scheme checks. | |
| 64 | +| Insecure randomness (`js/insecure-randomness`) | Fewer results | This query now recognizes when an insecure random value is used as a fallback when secure random values are unsupported. | |
| 65 | +| Misspelled variable name (`js/misspelled-variable-name`) | Message changed | The message for this query now correctly identifies the misspelled variable in additional cases. | |
| 66 | +| Non-linear pattern (`js/non-linear-pattern`) | Fewer duplicates and message changed | This query now generates fewer duplicate alerts and has a clearer explanation in case of type annotations used in a pattern. | |
31 | 67 | | Prototype pollution in utility function (`js/prototype-pollution-utility`) | More results | This query now recognizes additional utility functions as vulnerable to prototype polution. | |
32 | | -| Expression has no effect (`js/useless-expression`) | Less results | This query no longer flags an expression when that expression is the only content of the containing file. | |
33 | | -| Unknown directive (`js/unknown-directive`) | Less results | This query no longer flags directives generated by the Babel compiler. | |
34 | | -| Code injection (`js/code-injection`) | More results | More potential vulnerabilities involving NoSQL code operators are now recognized. | |
| 68 | +| Uncontrolled command line (`js/command-line-injection`) | More results | This query now recognizes additional command execution calls. | |
| 69 | +| Uncontrolled data used in path expression (`js/path-injection`) | More results | This query now recognizes additional file system calls. | |
| 70 | +| Uncontrolled data used in path expression (`js/path-injection`) | Fewer results | This query no longer flags paths that have been checked to be part of a collection. | |
| 71 | +| Unknown directive (`js/unknown-directive`) | Fewer results | This query no longer flags directives generated by the Babel compiler. | |
| 72 | +| Unneeded defensive code (`js/unneeded-defensive-code`) | Fewer false-positive results | This query now recognizes checks meant to handle the `document.all` object. | |
| 73 | +| Unused property (`js/unused-property`) | Fewer results | This query no longer flags properties of objects that are operands of `yield` expressions. | |
35 | 74 | | Zip Slip (`js/zipslip`) | More results | This query now recognizes additional vulnerabilities. | |
36 | 75 |
|
| 76 | +The following low-precision queries are no longer run by default on LGTM (their results already were not displayed): |
| 77 | + |
| 78 | + - `js/angular/dead-event-listener` |
| 79 | + - `js/angular/unused-dependency` |
| 80 | + - `js/bitwise-sign-check` |
| 81 | + - `js/comparison-of-identical-expressions` |
| 82 | + - `js/conflicting-html-attribute` |
| 83 | + - `js/ignored-setter-parameter` |
| 84 | + - `js/jsdoc/malformed-param-tag` |
| 85 | + - `js/jsdoc/missing-parameter` |
| 86 | + - `js/jsdoc/unknown-parameter` |
| 87 | + - `js/json-in-javascript-file` |
| 88 | + - `js/misspelled-identifier` |
| 89 | + - `js/nested-loops-with-same-variable` |
| 90 | + - `js/node/cyclic-import` |
| 91 | + - `js/node/unused-npm-dependency` |
| 92 | + - `js/omitted-array-element` |
| 93 | + - `js/return-outside-function` |
| 94 | + - `js/single-run-loop` |
| 95 | + - `js/too-many-parameters` |
| 96 | + - `js/unused-property` |
| 97 | + - `js/useless-assignment-to-global` |
| 98 | + |
37 | 99 | ## Changes to libraries |
38 | 100 |
|
39 | 101 | * A library `semmle.javascript.explore.CallGraph` has been added to help write queries for exploring the call graph. |
40 | 102 | * Added data flow for `Map` and `Set`, and added matching type-tracking steps that can accessed using the `CollectionsTypeTracking` module. |
| 103 | +* The data-flow node representing a parameter or destructuring pattern is now always the `ValueNode` corresponding to that AST node. This has a few consequences: |
| 104 | + - `Parameter.flow()` now gets the correct data flow node for a parameter. Previously this had a result, but the node was disconnected from the data flow graph. |
| 105 | + - `ParameterNode.asExpr()` and `.getAstNode()` now gets the parameter's AST node, whereas previously it had no result. |
| 106 | + - `Expr.flow()` now has a more meaningful result for destructuring patterns. Previously this node was disconnected from the data flow graph. Now it represents the values being destructured by the pattern. |
| 107 | +* The global data-flow and taint-tracking libraries now model indirect parameter accesses through the `arguments` object in some cases, which may lead to additional results from some of the security queries, particularly "Prototype pollution in utility function". |
| 108 | +* The predicates `Type.getProperty()` and variants of `Type.getMethod()` have been deprecated due to lack of use-cases. Looking up a named property of a static type is no longer supported, favoring faster extraction times instead. |
0 commit comments