Skip to content

Commit 5956341

Browse files
authored
Merge pull request #706 from asger-semmle/jquery-location-sink
Approved by esben-semmle
2 parents b051b75 + 1246de4 commit 5956341

File tree

5 files changed

+31
-2
lines changed

5 files changed

+31
-2
lines changed

change-notes/1.20/analysis-javascript.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424

2525
| **Query** | **Expected impact** | **Change** |
2626
|--------------------------------------------|------------------------------|------------------------------------------------------------------------------|
27-
| Client-side cross-site scripting | More results | This rule now recognizes WinJS functions that are vulnerable to HTML injection. |
27+
| Client-side cross-site scripting | More true-positive results, fewer false-positive results. | This rule now recognizes WinJS functions that are vulnerable to HTML injection, and no longer flags certain safe uses of jQuery. |
2828
| Insecure randomness | More results | This rule now flags insecure uses of `crypto.pseudoRandomBytes`. |
2929
| Unused parameter | Fewer false-positive results | This rule no longer flags parameters with leading underscore. |
3030
| Unused variable, import, function or class | Fewer false-positive results | This rule now flags fewer variables that are implictly used by JSX elements, and no longer flags variables with leading underscore. |

javascript/ql/src/semmle/javascript/security/dataflow/DomBasedXss.qll

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,8 @@ module DomBasedXss {
9191
isPrefixOfJQueryHtmlString(astNode, prefix) and
9292
strval = prefix.asExpr().getStringValue() and
9393
not strval.regexpMatch("\\s*<.*")
94-
)
94+
) and
95+
not isDocumentURL(astNode)
9596
)
9697
or
9798
// call to an Angular method that interprets its argument as HTML

javascript/ql/test/query-tests/Security/CWE-079/StoredXss.expected

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,10 @@ nodes
214214
| tst.js:256:7:256:17 | window.name |
215215
| tst.js:257:7:257:10 | name |
216216
| tst.js:261:11:261:21 | window.name |
217+
| tst.js:272:9:272:32 | loc3 |
218+
| tst.js:272:16:272:32 | document.location |
219+
| tst.js:275:7:275:10 | loc3 |
220+
| tst.js:277:22:277:29 | location |
217221
| winjs.js:2:7:2:53 | tainted |
218222
| winjs.js:2:17:2:33 | document.location |
219223
| winjs.js:2:17:2:40 | documen ... .search |
@@ -396,6 +400,8 @@ edges
396400
| tst.js:238:23:238:29 | tainted | tst.js:228:32:228:49 | prevProps.tainted4 |
397401
| tst.js:244:39:244:55 | props.propTainted | tst.js:248:60:248:82 | this.st ... Tainted |
398402
| tst.js:252:23:252:29 | tainted | tst.js:244:39:244:55 | props.propTainted |
403+
| tst.js:272:9:272:32 | loc3 | tst.js:275:7:275:10 | loc3 |
404+
| tst.js:272:16:272:32 | document.location | tst.js:272:9:272:32 | loc3 |
399405
| winjs.js:2:7:2:53 | tainted | winjs.js:3:43:3:49 | tainted |
400406
| winjs.js:2:7:2:53 | tainted | winjs.js:4:43:4:49 | tainted |
401407
| winjs.js:2:17:2:33 | document.location | winjs.js:2:17:2:40 | documen ... .search |

javascript/ql/test/query-tests/Security/CWE-079/Xss.expected

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,10 @@ nodes
171171
| tst.js:256:7:256:17 | window.name |
172172
| tst.js:257:7:257:10 | name |
173173
| tst.js:261:11:261:21 | window.name |
174+
| tst.js:272:9:272:32 | loc3 |
175+
| tst.js:272:16:272:32 | document.location |
176+
| tst.js:275:7:275:10 | loc3 |
177+
| tst.js:277:22:277:29 | location |
174178
| winjs.js:2:7:2:53 | tainted |
175179
| winjs.js:2:17:2:33 | document.location |
176180
| winjs.js:2:17:2:40 | documen ... .search |
@@ -307,6 +311,8 @@ edges
307311
| tst.js:238:23:238:29 | tainted | tst.js:228:32:228:49 | prevProps.tainted4 |
308312
| tst.js:244:39:244:55 | props.propTainted | tst.js:248:60:248:82 | this.st ... Tainted |
309313
| tst.js:252:23:252:29 | tainted | tst.js:244:39:244:55 | props.propTainted |
314+
| tst.js:272:9:272:32 | loc3 | tst.js:275:7:275:10 | loc3 |
315+
| tst.js:272:16:272:32 | document.location | tst.js:272:9:272:32 | loc3 |
310316
| winjs.js:2:7:2:53 | tainted | winjs.js:3:43:3:49 | tainted |
311317
| winjs.js:2:7:2:53 | tainted | winjs.js:4:43:4:49 | tainted |
312318
| winjs.js:2:17:2:33 | document.location | winjs.js:2:17:2:40 | documen ... .search |
@@ -378,5 +384,7 @@ edges
378384
| tst.js:256:7:256:17 | window.name | tst.js:256:7:256:17 | window.name | tst.js:256:7:256:17 | window.name | Cross-site scripting vulnerability due to $@. | tst.js:256:7:256:17 | window.name | user-provided value |
379385
| tst.js:257:7:257:10 | name | tst.js:257:7:257:10 | name | tst.js:257:7:257:10 | name | Cross-site scripting vulnerability due to $@. | tst.js:257:7:257:10 | name | user-provided value |
380386
| tst.js:261:11:261:21 | window.name | tst.js:261:11:261:21 | window.name | tst.js:261:11:261:21 | window.name | Cross-site scripting vulnerability due to $@. | tst.js:261:11:261:21 | window.name | user-provided value |
387+
| tst.js:275:7:275:10 | loc3 | tst.js:272:16:272:32 | document.location | tst.js:275:7:275:10 | loc3 | Cross-site scripting vulnerability due to $@. | tst.js:272:16:272:32 | document.location | user-provided value |
388+
| tst.js:277:22:277:29 | location | tst.js:277:22:277:29 | location | tst.js:277:22:277:29 | location | Cross-site scripting vulnerability due to $@. | tst.js:277:22:277:29 | location | user-provided value |
381389
| winjs.js:3:43:3:49 | tainted | winjs.js:2:17:2:33 | document.location | winjs.js:3:43:3:49 | tainted | Cross-site scripting vulnerability due to $@. | winjs.js:2:17:2:33 | document.location | user-provided value |
382390
| winjs.js:4:43:4:49 | tainted | winjs.js:2:17:2:33 | document.location | winjs.js:4:43:4:49 | tainted | Cross-site scripting vulnerability due to $@. | winjs.js:2:17:2:33 | document.location | user-provided value |

javascript/ql/test/query-tests/Security/CWE-079/tst.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,3 +262,17 @@ function windowNameAssigned() {
262262
$(name); // OK
263263
}
264264
}
265+
266+
function jqueryLocation() {
267+
$(location); // OK
268+
$(window.location); // OK
269+
$(document.location); // OK
270+
var loc1 = location;
271+
var loc2 = window.location;
272+
var loc3 = document.location;
273+
$(loc1); // OK
274+
$(loc2); // OK
275+
$(loc3); // OK - but still flagged
276+
277+
$("body").append(location); // NOT OK
278+
}

0 commit comments

Comments
 (0)