Skip to content

Commit 6a3c74c

Browse files
authored
Merge pull request #20999 from joefarebrother/java-spring-websocket
Java: Add models for spring WebSocketHandler
2 parents 2d4da80 + 6c291e1 commit 6a3c74c

File tree

17 files changed

+324
-0
lines changed

17 files changed

+324
-0
lines changed
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
---
2+
category: minorAnalysis
3+
---
4+
* Additional remote flow sources from the `org.springframework.web.socket` package have been modeled.
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
extensions:
2+
- addsTo:
3+
pack: codeql/java-all
4+
extensible: sourceModel
5+
data:
6+
- ["org.springframework.web.socket", "WebSocketHandler", True, "afterConnectionClosed", "", "", "Parameter[0]", "remote", "manual"]
7+
- ["org.springframework.web.socket", "WebSocketHandler", True, "afterConnectionEstablished", "", "", "Parameter[0]", "remote", "manual"]
8+
- ["org.springframework.web.socket", "WebSocketHandler", True, "handleMessage", "", "", "Parameter[0]", "remote", "manual"]
9+
- ["org.springframework.web.socket", "WebSocketHandler", True, "handleMessage", "", "", "Parameter[1]", "remote", "manual"]
10+
- ["org.springframework.web.socket", "WebSocketHandler", True, "handleTransportError", "", "", "Parameter[0]", "remote", "manual"]
11+
- ["org.springframework.web.socket.handler", "AbstractWebSocketHandler", True, "handleBinaryMessage", "", "", "Parameter[0..1]", "remote", "manual"]
12+
- ["org.springframework.web.socket.handler", "AbstractWebSocketHandler", True, "handlePongMessage", "", "", "Parameter[0..1]", "remote", "manual"]
13+
- ["org.springframework.web.socket.handler", "AbstractWebSocketHandler", True, "handleTextMessage", "", "", "Parameter[0..1]", "remote", "manual"]
14+
- addsTo:
15+
pack: codeql/java-all
16+
extensible: summaryModel
17+
data:
18+
- ["org.springframework.web.socket", "TextMessage", True, "asBytes", "", "", "Argument[this]", "ReturnValue", "taint", "manual"]
19+
- ["org.springframework.web.socket", "WebSocketMessage", True, "getPayload", "", "", "Argument[this]", "ReturnValue", "taint", "manual"]
20+
- ["org.springframework.web.socket", "WebSocketSession", True, "getAcceptedProtocol", "", "", "Argument[this]", "ReturnValue", "taint", "manual"]
21+
- ["org.springframework.web.socket", "WebSocketSession", True, "getHandshakeHeaders", "", "", "Argument[this]", "ReturnValue", "taint", "manual"]
22+
- ["org.springframework.web.socket", "WebSocketSession", True, "getPrincipal", "", "", "Argument[this]", "ReturnValue", "taint", "manual"]
23+
- ["org.springframework.web.socket", "WebSocketSession", True, "getUri", "", "", "Argument[this]", "ReturnValue", "taint", "manual"]
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
2+
import org.springframework.web.socket.handler.TextWebSocketHandler;
3+
import org.springframework.web.socket.WebSocketSession;
4+
import org.springframework.web.socket.WebSocketMessage;
5+
import org.springframework.web.socket.TextMessage;
6+
import org.springframework.web.socket.BinaryMessage;
7+
import org.springframework.web.socket.PongMessage;
8+
import org.springframework.web.socket.CloseStatus;
9+
10+
11+
public class Test {
12+
void sink(Object o) {}
13+
14+
public class A extends TextWebSocketHandler {
15+
@Override
16+
public void handleMessage(WebSocketSession s, WebSocketMessage<?> m) {
17+
sink(s); // $hasTaintFlow
18+
sink(s.getAcceptedProtocol()); // $hasTaintFlow
19+
sink(s.getHandshakeHeaders()); // $hasTaintFlow
20+
sink(s.getPrincipal()); // $hasTaintFlow
21+
sink(s.getUri()); // $hasTaintFlow
22+
23+
sink(m); // $hasTaintFlow
24+
sink(m.getPayload()); // $hasTaintFlow
25+
26+
}
27+
28+
@Override
29+
protected void handleTextMessage(WebSocketSession s, TextMessage m) {
30+
sink(s); // $hasTaintFlow
31+
sink(m); // $hasTaintFlow
32+
sink(m.asBytes()); // $hasTaintFlow
33+
}
34+
35+
@Override
36+
protected void handleBinaryMessage(WebSocketSession s, BinaryMessage m) {
37+
sink(s); // $hasTaintFlow
38+
sink(m); // $hasTaintFlow
39+
}
40+
41+
@Override
42+
protected void handlePongMessage(WebSocketSession s, PongMessage m) {
43+
sink(s); // $hasTaintFlow
44+
sink(m); // $hasTaintFlow
45+
}
46+
47+
@Override
48+
public void afterConnectionEstablished(WebSocketSession s) {
49+
sink(s); // $hasTaintFlow
50+
}
51+
52+
@Override
53+
public void afterConnectionClosed(WebSocketSession s, CloseStatus c) {
54+
sink(s); // $hasTaintFlow
55+
}
56+
57+
@Override
58+
public void handleTransportError(WebSocketSession s, Throwable exc) {
59+
sink(s); // $hasTaintFlow
60+
}
61+
62+
}
63+
64+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
//semmle-extractor-options: --javac-args -cp ${testdir}/../../../../stubs/springframework-5.8.x:${testdir}/../../../../stubs/javax-servlet-2.5:${testdir}/../../../../stubs/apache-commons-logging-1.2

java/ql/test/library-tests/frameworks/spring/websocket/test.expected

Whitespace-only changes.
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import java
2+
import semmle.code.java.dataflow.DataFlow
3+
import semmle.code.java.dataflow.FlowSources
4+
import utils.test.InlineFlowTest
5+
6+
module Config implements DataFlow::ConfigSig {
7+
predicate isSource(DataFlow::Node node) {
8+
DefaultFlowConfig::isSource(node)
9+
or
10+
node instanceof ActiveThreatModelSource
11+
}
12+
13+
predicate isSink = DefaultFlowConfig::isSink/1;
14+
}
15+
16+
import FlowTest<DefaultFlowConfig, Config>

java/ql/test/stubs/springframework-5.8.x/org/springframework/web/socket/AbstractWebSocketMessage.java

Lines changed: 16 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

java/ql/test/stubs/springframework-5.8.x/org/springframework/web/socket/BinaryMessage.java

Lines changed: 18 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

java/ql/test/stubs/springframework-5.8.x/org/springframework/web/socket/CloseStatus.java

Lines changed: 34 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

java/ql/test/stubs/springframework-5.8.x/org/springframework/web/socket/PongMessage.java

Lines changed: 14 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)