Skip to content

Commit 1a98079

Browse files
authored
Merge pull request #7139 from erik-krogh/gotGet
JS: improve the got model
2 parents f01b900 + 12c24c0 commit 1a98079

File tree

3 files changed

+35
-8
lines changed

3 files changed

+35
-8
lines changed

javascript/ql/lib/semmle/javascript/frameworks/ClientRequests.qll

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -406,12 +406,9 @@ module ClientRequest {
406406
*/
407407
class GotUrlRequest extends ClientRequest::Range {
408408
GotUrlRequest() {
409-
exists(string moduleName, DataFlow::SourceNode callee | this = callee.getACall() |
410-
moduleName = "got" and
411-
(
412-
callee = DataFlow::moduleImport(moduleName) or
413-
callee = DataFlow::moduleMember(moduleName, "stream")
414-
)
409+
exists(API::Node callee, API::Node got | this = callee.getACall() |
410+
got = [API::moduleImport("got"), API::moduleImport("got").getMember("extend").getReturn()] and
411+
callee = [got, got.getMember(["stream", "get", "post", "put", "patch", "head", "delete"])]
415412
)
416413
}
417414

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

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -825,6 +825,17 @@ nodes
825825
| xmlRequest.js:9:28:9:31 | json |
826826
| xmlRequest.js:9:28:9:39 | json.message |
827827
| xmlRequest.js:9:28:9:39 | json.message |
828+
| xmlRequest.js:20:11:20:48 | resp |
829+
| xmlRequest.js:20:18:20:48 | await g ... rl }}") |
830+
| xmlRequest.js:20:24:20:48 | got.get ... rl }}") |
831+
| xmlRequest.js:20:24:20:48 | got.get ... rl }}") |
832+
| xmlRequest.js:21:11:21:38 | json |
833+
| xmlRequest.js:21:18:21:38 | JSON.pa ... p.body) |
834+
| xmlRequest.js:21:29:21:32 | resp |
835+
| xmlRequest.js:21:29:21:37 | resp.body |
836+
| xmlRequest.js:22:24:22:27 | json |
837+
| xmlRequest.js:22:24:22:35 | json.message |
838+
| xmlRequest.js:22:24:22:35 | json.message |
828839
edges
829840
| addEventListener.js:1:43:1:47 | event | addEventListener.js:2:20:2:24 | event |
830841
| addEventListener.js:1:43:1:47 | event | addEventListener.js:2:20:2:24 | event |
@@ -1545,7 +1556,18 @@ edges
15451556
| xmlRequest.js:8:31:8:46 | xhr.responseText | xmlRequest.js:8:20:8:47 | JSON.pa ... seText) |
15461557
| xmlRequest.js:9:28:9:31 | json | xmlRequest.js:9:28:9:39 | json.message |
15471558
| xmlRequest.js:9:28:9:31 | json | xmlRequest.js:9:28:9:39 | json.message |
1559+
| xmlRequest.js:20:11:20:48 | resp | xmlRequest.js:21:29:21:32 | resp |
1560+
| xmlRequest.js:20:18:20:48 | await g ... rl }}") | xmlRequest.js:20:11:20:48 | resp |
1561+
| xmlRequest.js:20:24:20:48 | got.get ... rl }}") | xmlRequest.js:20:18:20:48 | await g ... rl }}") |
1562+
| xmlRequest.js:20:24:20:48 | got.get ... rl }}") | xmlRequest.js:20:18:20:48 | await g ... rl }}") |
1563+
| xmlRequest.js:21:11:21:38 | json | xmlRequest.js:22:24:22:27 | json |
1564+
| xmlRequest.js:21:18:21:38 | JSON.pa ... p.body) | xmlRequest.js:21:11:21:38 | json |
1565+
| xmlRequest.js:21:29:21:32 | resp | xmlRequest.js:21:29:21:37 | resp.body |
1566+
| xmlRequest.js:21:29:21:37 | resp.body | xmlRequest.js:21:18:21:38 | JSON.pa ... p.body) |
1567+
| xmlRequest.js:22:24:22:27 | json | xmlRequest.js:22:24:22:35 | json.message |
1568+
| xmlRequest.js:22:24:22:27 | json | xmlRequest.js:22:24:22:35 | json.message |
15481569
#select
15491570
| 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 |
15501571
| 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 |
15511572
| 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 |
1573+
| xmlRequest.js:22:24:22:35 | json.message | xmlRequest.js:20:24:20:48 | got.get ... rl }}") | xmlRequest.js:22:24:22:35 | json.message | Cross-site scripting vulnerability due to $@. | xmlRequest.js:20:24:20:48 | got.get ... rl }}") | user-provided value |

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

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,19 @@ $(document).ready(function () {
66
xhr.onreadystatechange = function () {
77
if (xhr.readyState !== 4) { return }
88
var json = JSON.parse(xhr.responseText)
9-
$("#myThing").html(json.message);
9+
$("#myThing").html(json.message); // caught with additional sources
1010
}
1111
try {
1212
xhr.send()
1313
} catch (error) {
1414
console.log(error)
1515
}
16-
})
16+
});
17+
18+
$(document).ready(async function () {
19+
const got = require('got');
20+
const resp = await got.get("{{ some_url }}");
21+
const json = JSON.parse(resp.body);
22+
$("#myThing").html(json.message); // caught with additional sources
23+
24+
});

0 commit comments

Comments
 (0)