-
Notifications
You must be signed in to change notification settings - Fork 1.8k
JS: Add ClientSideRemoteFlowSource #5033
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
codeql-ci
merged 11 commits into
github:main
from
asgerf:js/generalized-remote-flow-source
Mar 17, 2021
Merged
JS: Add ClientSideRemoteFlowSource #5033
codeql-ci
merged 11 commits into
github:main
from
asgerf:js/generalized-remote-flow-source
Mar 17, 2021
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
4af453e
to
427fffb
Compare
4438d66
to
2dab25f
Compare
Evaluation finally looks good 🎉 |
2dab25f
to
571fca3
Compare
erik-krogh
reviewed
Mar 16, 2021
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM.
Just a comment about helper predicates on RemoteFlowSource
.
javascript/ql/src/semmle/javascript/security/dataflow/CommandInjectionCustomizations.qll
Show resolved
Hide resolved
1316d91
to
3922c73
Compare
erik-krogh
previously approved these changes
Mar 16, 2021
erik-krogh
approved these changes
Mar 17, 2021
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Labels
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Makes
window.location
-based sources part ofRemoteFlowSource
by introducingClientSideRemoteFlowSource
, with agetKind()
predicate indicating it is (part of) the URL, path, query, fragment, or window name. (see qldoc for full details)It's meant to address a few issues
RemoteFlowSource
is now a reasonable default taint source for a new query; we don't have to teach users aboutDOM::locationRef()
as well.RemoteFlowSource
thus contained some, but not all, client-side URL sources, which was a bit inconsistent.../
sequences (the browser normalizes the path). In particular, request forgery has some FPs where the source is from the path. This PR disables that particular source for request forgery.There are a few downsides to this approach:
new URL(window.location)
is not modelled very precisely.ServerSideRemoteFlowSource
but a truly good name for that class eludes me as we can't generally ensure that a given source occurs in a server (e.g. it could be in a library shared between client and server, or it could just be a CLI app that's not a web server).Evaluation: