File tree Expand file tree Collapse file tree 3 files changed +57
-0
lines changed
test/query-tests/security/CWE-079/semmle/tests Expand file tree Collapse file tree 3 files changed +57
-0
lines changed Original file line number Diff line number Diff line change @@ -15,6 +15,7 @@ import semmle.code.java.frameworks.ApacheHttp
1515import semmle.code.java.frameworks.android.XmlParsing
1616import semmle.code.java.frameworks.android.WebView
1717import semmle.code.java.frameworks.JaxWS
18+ import semmle.code.java.frameworks.javase.WebSocket
1819import semmle.code.java.frameworks.android.Intent
1920import semmle.code.java.frameworks.spring.SpringWeb
2021import semmle.code.java.frameworks.spring.SpringController
@@ -155,6 +156,14 @@ private class ThriftIfaceParameterSource extends RemoteFlowSource {
155156 override string getSourceType ( ) { result = "Thrift Iface parameter" }
156157}
157158
159+ private class WebSocketMessageParameterSource extends RemoteFlowSource {
160+ WebSocketMessageParameterSource ( ) {
161+ exists ( WebsocketOnText t | t .getParameter ( 1 ) = this .asParameter ( ) )
162+ }
163+
164+ override string getSourceType ( ) { result = "Websocket onText parameter" }
165+ }
166+
158167/** Class for `tainted` user input. */
159168abstract class UserInput extends DataFlow:: Node { }
160169
Original file line number Diff line number Diff line change 1+ /**
2+ * Provides classes for identifying methods called by the Java SE WebSocket package.
3+ */
4+
5+ import java
6+
7+ /** The `java.net.http.Websocket.Listener` interface. */
8+ class WebsocketListener extends Interface {
9+ WebsocketListener ( ) { this .hasQualifiedName ( "java.net.http" , "WebSocket$Listener" ) }
10+ }
11+
12+ /** The method `onText` on a type that implements the `java.net.http.Websocket.Listener` interface. */
13+ class WebsocketOnText extends Method {
14+ WebsocketOnText ( ) {
15+ exists ( WebsocketListener l |
16+ this .getDeclaringType ( ) .extendsOrImplements ( l ) and
17+ // onText(WebSocket webSocket, CharSequence data, boolean last)
18+ this .hasName ( "onText" )
19+ )
20+ }
21+ }
Original file line number Diff line number Diff line change 1+ // package test.cwe079.cwe.examples;
2+
3+ // import java.net.http.HttpClient;
4+ // import java.net.http.WebSocket;
5+ // import java.net.URI;
6+ // import java.util.*;
7+ // import java.util.concurrent.*;
8+
9+ // public class WebsocketXss {
10+ // public static void main(String[] args) throws Exception {
11+ // WebSocket.Listener listener = new WebSocket.Listener() {
12+ // public CompletionStage<?> onText(WebSocket webSocket, CharSequence message, boolean last) {
13+ // try {
14+ // HttpClient client = HttpClient.newBuilder().build();
15+ // CompletableFuture<WebSocket> ws = client.newWebSocketBuilder()
16+ // .buildAsync(URI.create("ws://websocket.example.com"), null);
17+ // ws.get().sendText(message, false);
18+ // } catch (Exception e) {
19+ // // TODO: handle exception
20+ // }
21+
22+ // return null;
23+ // };
24+ // };
25+
26+ // }
27+ // }
You can’t perform that action at this time.
0 commit comments