Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 319ee2c

Browse files
committed
JS: Track deep flow through qs.stringify
1 parent c593853 commit 319ee2c

2 files changed

Lines changed: 21 additions & 2 deletions

File tree

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

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -421,3 +421,22 @@ private module ClosureLibraryUri {
421421
}
422422
}
423423
}
424+
425+
private class QueryStringStringification extends DataFlow::SummarizedCallable {
426+
QueryStringStringification() { this = "query-string stringification" }
427+
428+
override DataFlow::InvokeNode getACall() {
429+
result =
430+
API::moduleImport(["querystring", "query-string", "querystringify", "qs"])
431+
.getMember("stringify")
432+
.getACall() or
433+
result = API::moduleImport("url-parse").getMember("qs").getMember("stringify").getACall() or
434+
result = API::moduleImport("parseqs").getMember("encode").getACall()
435+
}
436+
437+
override predicate propagatesFlow(string input, string output, boolean preservesValue) {
438+
preservesValue = false and
439+
input = ["Argument[0]", "Argument[0].AnyMemberDeep"] and
440+
output = "ReturnValue"
441+
}
442+
}

javascript/ql/test/query-tests/Security/CWE-200/googlecompiler.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ function PostCode(codestring) {
3434
});
3535
});
3636

37-
post_req.write(post_data); // $ MISSING: Alert - post the data from file to request body
37+
post_req.write(post_data); // $ Alert - post the data from file to request body
3838
post_req.end();
3939

4040
}
@@ -58,4 +58,4 @@ fs.readFile('LinkedList.js', 'utf-8', function (err, data) {
5858
console.log("No data to post");
5959
process.exit(-1);
6060
}
61-
});
61+
});

0 commit comments

Comments
 (0)