Skip to content

Commit d34dbbc

Browse files
committed
Refactor Security.CWE.CWE-134.ExternallyControlledFormatString
1 parent ac223ea commit d34dbbc

File tree

2 files changed

+27
-21
lines changed

2 files changed

+27
-21
lines changed

java/ql/src/Security/CWE/CWE-134/ExternallyControlledFormatString.ql

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,25 +13,29 @@
1313
import java
1414
import semmle.code.java.dataflow.FlowSources
1515
import semmle.code.java.StringFormat
16-
import DataFlow::PathGraph
1716

18-
class ExternallyControlledFormatStringConfig extends TaintTracking::Configuration {
19-
ExternallyControlledFormatStringConfig() { this = "ExternallyControlledFormatStringConfig" }
17+
module ExternallyControlledFormatStringConfig implements DataFlow::ConfigSig {
18+
predicate isSource(DataFlow::Node source) { source instanceof RemoteFlowSource }
2019

21-
override predicate isSource(DataFlow::Node source) { source instanceof RemoteFlowSource }
22-
23-
override predicate isSink(DataFlow::Node sink) {
20+
predicate isSink(DataFlow::Node sink) {
2421
sink.asExpr() = any(StringFormat formatCall).getFormatArgument()
2522
}
2623

27-
override predicate isSanitizer(DataFlow::Node node) {
24+
predicate isBarrier(DataFlow::Node node) {
2825
node.getType() instanceof NumericType or node.getType() instanceof BooleanType
2926
}
3027
}
3128

29+
module ExternallyControlledFormatStringFlow =
30+
TaintTracking::Make<ExternallyControlledFormatStringConfig>;
31+
32+
import ExternallyControlledFormatStringFlow::PathGraph
33+
3234
from
33-
DataFlow::PathNode source, DataFlow::PathNode sink, StringFormat formatCall,
34-
ExternallyControlledFormatStringConfig conf
35-
where conf.hasFlowPath(source, sink) and sink.getNode().asExpr() = formatCall.getFormatArgument()
35+
ExternallyControlledFormatStringFlow::PathNode source,
36+
ExternallyControlledFormatStringFlow::PathNode sink, StringFormat formatCall
37+
where
38+
ExternallyControlledFormatStringFlow::hasFlowPath(source, sink) and
39+
sink.getNode().asExpr() = formatCall.getFormatArgument()
3640
select formatCall.getFormatArgument(), source, sink, "Format string depends on a $@.",
3741
source.getNode(), "user-provided value"

java/ql/src/Security/CWE/CWE-134/ExternallyControlledFormatStringLocal.ql

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -13,23 +13,25 @@
1313
import java
1414
import semmle.code.java.dataflow.FlowSources
1515
import semmle.code.java.StringFormat
16-
import DataFlow::PathGraph
1716

18-
class ExternallyControlledFormatStringLocalConfig extends TaintTracking::Configuration {
19-
ExternallyControlledFormatStringLocalConfig() {
20-
this = "ExternallyControlledFormatStringLocalConfig"
21-
}
22-
23-
override predicate isSource(DataFlow::Node source) { source instanceof LocalUserInput }
17+
private module ExternallyControlledFormatStringLocalConfig implements DataFlow::ConfigSig {
18+
predicate isSource(DataFlow::Node source) { source instanceof LocalUserInput }
2419

25-
override predicate isSink(DataFlow::Node sink) {
20+
predicate isSink(DataFlow::Node sink) {
2621
sink.asExpr() = any(StringFormat formatCall).getFormatArgument()
2722
}
2823
}
2924

25+
module ExternallyControlledFormatStringLocalFlow =
26+
TaintTracking::Make<ExternallyControlledFormatStringLocalConfig>;
27+
28+
import ExternallyControlledFormatStringLocalFlow::PathGraph
29+
3030
from
31-
DataFlow::PathNode source, DataFlow::PathNode sink, StringFormat formatCall,
32-
ExternallyControlledFormatStringLocalConfig conf
33-
where conf.hasFlowPath(source, sink) and sink.getNode().asExpr() = formatCall.getFormatArgument()
31+
ExternallyControlledFormatStringLocalFlow::PathNode source,
32+
ExternallyControlledFormatStringLocalFlow::PathNode sink, StringFormat formatCall
33+
where
34+
ExternallyControlledFormatStringLocalFlow::hasFlowPath(source, sink) and
35+
sink.getNode().asExpr() = formatCall.getFormatArgument()
3436
select formatCall.getFormatArgument(), source, sink, "Format string depends on a $@.",
3537
source.getNode(), "user-provided value"

0 commit comments

Comments
 (0)