diff --git a/javascript/ql/src/semmle/javascript/security/dataflow/ClientSideUrlRedirect.qll b/javascript/ql/src/semmle/javascript/security/dataflow/ClientSideUrlRedirect.qll index 58f59d1316d5..fe8265284d3b 100644 --- a/javascript/ql/src/semmle/javascript/security/dataflow/ClientSideUrlRedirect.qll +++ b/javascript/ql/src/semmle/javascript/security/dataflow/ClientSideUrlRedirect.qll @@ -60,4 +60,15 @@ module ClientSideUrlRedirect { guard instanceof HostnameSanitizerGuard } } + + /** + * Improper use of openExternal can be leveraged to compromise the user's host. + * When openExternal is used with untrusted content, it can be leveraged to execute arbitrary commands. + */ + class ElectronShellOpenExternalSink extends Sink { + ElectronShellOpenExternalSink() { + this = + DataFlow::moduleMember("electron", "shell").getAMemberCall("openExternal").getArgument(0) + } + } }