Skip to content

Commit 3c85ca9

Browse files
committed
Refactor ThreadResourceAbuse
1 parent da5a719 commit 3c85ca9

File tree

2 files changed

+21
-20
lines changed

2 files changed

+21
-20
lines changed

java/ql/src/experimental/Security/CWE/CWE-400/LocalThreadResourceAbuse.ql

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,9 @@
1111

1212
import java
1313
import ThreadResourceAbuse
14+
import semmle.code.java.dataflow.TaintTracking
1415
import semmle.code.java.dataflow.FlowSources
15-
import DataFlow::PathGraph
16+
import ThreadResourceAbuseFlow::PathGraph
1617

1718
/** The `getInitParameter` method of servlet or JSF. */
1819
class GetInitParameter extends Method {
@@ -41,18 +42,16 @@ class InitParameterInput extends LocalUserInput {
4142
}
4243

4344
/** Taint configuration of uncontrolled thread resource consumption from local user input. */
44-
class ThreadResourceAbuse extends TaintTracking::Configuration {
45-
ThreadResourceAbuse() { this = "ThreadResourceAbuse" }
45+
module ThreadResourceAbuseConfig implements DataFlow::ConfigSig {
46+
predicate isSource(DataFlow::Node source) { source instanceof LocalUserInput }
4647

47-
override predicate isSource(DataFlow::Node source) { source instanceof LocalUserInput }
48+
predicate isSink(DataFlow::Node sink) { sink instanceof PauseThreadSink }
4849

49-
override predicate isSink(DataFlow::Node sink) { sink instanceof PauseThreadSink }
50-
51-
override predicate isAdditionalTaintStep(DataFlow::Node pred, DataFlow::Node succ) {
50+
predicate isAdditionalFlowStep(DataFlow::Node pred, DataFlow::Node succ) {
5251
any(AdditionalValueStep r).step(pred, succ)
5352
}
5453

55-
override predicate isSanitizer(DataFlow::Node node) {
54+
predicate isBarrier(DataFlow::Node node) {
5655
exists(
5756
MethodAccess ma // Math.min(sleepTime, MAX_INTERVAL)
5857
|
@@ -64,7 +63,9 @@ class ThreadResourceAbuse extends TaintTracking::Configuration {
6463
}
6564
}
6665

67-
from DataFlow::PathNode source, DataFlow::PathNode sink, ThreadResourceAbuse conf
68-
where conf.hasFlowPath(source, sink)
66+
module ThreadResourceAbuseFlow = TaintTracking::Global<ThreadResourceAbuseConfig>;
67+
68+
from ThreadResourceAbuseFlow::PathNode source, ThreadResourceAbuseFlow::PathNode sink
69+
where ThreadResourceAbuseFlow::flowPath(source, sink)
6970
select sink.getNode(), source, sink, "Possible uncontrolled resource consumption due to $@.",
7071
source.getNode(), "local user-provided value"

java/ql/src/experimental/Security/CWE/CWE-400/ThreadResourceAbuse.ql

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,21 +13,19 @@
1313
import java
1414
import ThreadResourceAbuse
1515
import semmle.code.java.dataflow.FlowSources
16-
import DataFlow::PathGraph
16+
import ThreadResourceAbuseFlow::PathGraph
1717

1818
/** Taint configuration of uncontrolled thread resource consumption. */
19-
class ThreadResourceAbuse extends TaintTracking::Configuration {
20-
ThreadResourceAbuse() { this = "ThreadResourceAbuse" }
19+
module ThreadResourceAbuseConfig implements DataFlow::ConfigSig {
20+
predicate isSource(DataFlow::Node source) { source instanceof RemoteFlowSource }
2121

22-
override predicate isSource(DataFlow::Node source) { source instanceof RemoteFlowSource }
22+
predicate isSink(DataFlow::Node sink) { sink instanceof PauseThreadSink }
2323

24-
override predicate isSink(DataFlow::Node sink) { sink instanceof PauseThreadSink }
25-
26-
override predicate isAdditionalTaintStep(DataFlow::Node pred, DataFlow::Node succ) {
24+
predicate isAdditionalFlowStep(DataFlow::Node pred, DataFlow::Node succ) {
2725
any(AdditionalValueStep r).step(pred, succ)
2826
}
2927

30-
override predicate isSanitizer(DataFlow::Node node) {
28+
predicate isBarrier(DataFlow::Node node) {
3129
exists(
3230
MethodAccess ma // Math.min(sleepTime, MAX_INTERVAL)
3331
|
@@ -39,8 +37,10 @@ class ThreadResourceAbuse extends TaintTracking::Configuration {
3937
}
4038
}
4139

42-
from DataFlow::PathNode source, DataFlow::PathNode sink, ThreadResourceAbuse conf
43-
where conf.hasFlowPath(source, sink)
40+
module ThreadResourceAbuseFlow = TaintTracking::Global<ThreadResourceAbuseConfig>;
41+
42+
from ThreadResourceAbuseFlow::PathNode source, ThreadResourceAbuseFlow::PathNode sink
43+
where ThreadResourceAbuseFlow::flowPath(source, sink)
4444
select sink.getNode(), source, sink,
4545
"Vulnerability of uncontrolled resource consumption due to $@.", source.getNode(),
4646
"user-provided value"

0 commit comments

Comments
 (0)