JS: Treat browser message events as client-side sources

This commit is contained in:
Asger F
2024-08-16 11:02:12 +02:00
parent c1d03acd45
commit 2d264052b3
2 changed files with 12 additions and 2 deletions

View File

@@ -207,12 +207,14 @@ class PostMessageEventHandler extends Function {
* An event parameter for a `postMessage` event handler, considered as an untrusted
* source of data.
*/
private class PostMessageEventParameter extends RemoteFlowSource {
private class PostMessageEventParameter extends ClientSideRemoteFlowSource {
PostMessageEventParameter() {
this = DataFlow::parameterNode(any(PostMessageEventHandler pmeh).getEventParameter())
}
override string getSourceType() { result = "postMessage event" }
override ClientSideRemoteFlowKind getKind() { result.isMessageEvent() }
}
/**

View File

@@ -40,7 +40,9 @@ import Cached
* A type of remote flow source that is specific to the browser environment.
*/
class ClientSideRemoteFlowKind extends string {
ClientSideRemoteFlowKind() { this = ["query", "fragment", "path", "url", "name"] }
ClientSideRemoteFlowKind() {
this = ["query", "fragment", "path", "url", "name", "message-event"]
}
/**
* Holds if this is the `query` kind, describing sources derived from the query parameters of the browser URL,
@@ -77,6 +79,12 @@ class ClientSideRemoteFlowKind extends string {
/** Holds if this is the `name` kind, describing sources derived from the window name, such as `window.name`. */
predicate isWindowName() { this = "name" }
/**
* Holds if this is the `message-event` kind, describing sources derived from cross-window message passing,
* such as `event` in `window.onmessage = event => {...}`.
*/
predicate isMessageEvent() { this = "message-event" }
}
/**