Skip to content

Commit a9c292e

Browse files
authored
Merge pull request github#5391 from erik-krogh/additionalXss
Approved by asgerf
2 parents e37ba75 + d7b0f62 commit a9c292e

File tree

3 files changed

+32
-1
lines changed

3 files changed

+32
-1
lines changed

javascript/ql/src/semmle/javascript/heuristics/AdditionalSources.qll

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,8 @@ class RemoteServerResponse extends HeuristicSource, RemoteFlowSource {
4444
// exclude URLs to the current host
4545
r.getUrl().mayHaveStringValue(url) and
4646
protocolPattern = "(?[a-z+]{3,10}:)" and
47-
not url.regexpMatch(protocolPattern + "?//.*")
47+
not url.regexpMatch(protocolPattern + "?//.*") and
48+
not url.prefix(2) = ["{{", "{%"] // look like templating
4849
)
4950
)
5051
}

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -726,6 +726,13 @@ nodes
726726
| winjs.js:3:43:3:49 | tainted |
727727
| winjs.js:4:43:4:49 | tainted |
728728
| winjs.js:4:43:4:49 | tainted |
729+
| xmlRequest.js:8:13:8:47 | json |
730+
| xmlRequest.js:8:20:8:47 | JSON.pa ... seText) |
731+
| xmlRequest.js:8:31:8:46 | xhr.responseText |
732+
| xmlRequest.js:8:31:8:46 | xhr.responseText |
733+
| xmlRequest.js:9:28:9:31 | json |
734+
| xmlRequest.js:9:28:9:39 | json.message |
735+
| xmlRequest.js:9:28:9:39 | json.message |
729736
edges
730737
| addEventListener.js:1:43:1:47 | event | addEventListener.js:2:20:2:24 | event |
731738
| addEventListener.js:1:43:1:47 | event | addEventListener.js:2:20:2:24 | event |
@@ -1361,6 +1368,13 @@ edges
13611368
| winjs.js:2:17:2:33 | document.location | winjs.js:2:17:2:40 | documen ... .search |
13621369
| winjs.js:2:17:2:40 | documen ... .search | winjs.js:2:17:2:53 | documen ... ring(1) |
13631370
| winjs.js:2:17:2:53 | documen ... ring(1) | winjs.js:2:7:2:53 | tainted |
1371+
| xmlRequest.js:8:13:8:47 | json | xmlRequest.js:9:28:9:31 | json |
1372+
| xmlRequest.js:8:20:8:47 | JSON.pa ... seText) | xmlRequest.js:8:13:8:47 | json |
1373+
| xmlRequest.js:8:31:8:46 | xhr.responseText | xmlRequest.js:8:20:8:47 | JSON.pa ... seText) |
1374+
| xmlRequest.js:8:31:8:46 | xhr.responseText | xmlRequest.js:8:20:8:47 | JSON.pa ... seText) |
1375+
| xmlRequest.js:9:28:9:31 | json | xmlRequest.js:9:28:9:39 | json.message |
1376+
| xmlRequest.js:9:28:9:31 | json | xmlRequest.js:9:28:9:39 | json.message |
13641377
#select
13651378
| jwt.js:6:14:6:20 | decoded | jwt.js:4:36:4:39 | data | jwt.js:6:14:6:20 | decoded | Cross-site scripting vulnerability due to $@. | jwt.js:4:36:4:39 | data | user-provided value |
13661379
| typeahead.js:10:16:10:18 | loc | typeahead.js:9:28:9:30 | loc | typeahead.js:10:16:10:18 | loc | Cross-site scripting vulnerability due to $@. | typeahead.js:9:28:9:30 | loc | user-provided value |
1380+
| xmlRequest.js:9:28:9:39 | json.message | xmlRequest.js:8:31:8:46 | xhr.responseText | xmlRequest.js:9:28:9:39 | json.message | Cross-site scripting vulnerability due to $@. | xmlRequest.js:8:31:8:46 | xhr.responseText | user-provided value |
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
$(document).ready(function () {
2+
var xhr = new XMLHttpRequest();
3+
var url = "{{ some_url }}"
4+
xhr.open("GET", url, true)
5+
xhr.setRequestHeader("Content-Type", "application/json")
6+
xhr.onreadystatechange = function () {
7+
if (xhr.readyState !== 4) { return }
8+
var json = JSON.parse(xhr.responseText)
9+
$("#myThing").html(json.message);
10+
}
11+
try {
12+
xhr.send()
13+
} catch (error) {
14+
console.log(error)
15+
}
16+
})

0 commit comments

Comments
 (0)