Skip to content

Commit b14b95c

Browse files
committed
Java: Refactor LogInjection
1 parent e8a7139 commit b14b95c

File tree

3 files changed

+26
-11
lines changed

3 files changed

+26
-11
lines changed

java/ql/lib/semmle/code/java/security/LogInjectionQuery.qll

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,11 @@ import semmle.code.java.dataflow.FlowSources
55
import semmle.code.java.security.LogInjection
66

77
/**
8+
* DEPRECATED: Use `LogInjectionFlow` instead.
9+
*
810
* A taint-tracking configuration for tracking untrusted user input used in log entries.
911
*/
10-
class LogInjectionConfiguration extends TaintTracking::Configuration {
12+
deprecated class LogInjectionConfiguration extends TaintTracking::Configuration {
1113
LogInjectionConfiguration() { this = "LogInjectionConfiguration" }
1214

1315
override predicate isSource(DataFlow::Node source) { source instanceof RemoteFlowSource }
@@ -20,3 +22,20 @@ class LogInjectionConfiguration extends TaintTracking::Configuration {
2022
any(LogInjectionAdditionalTaintStep c).step(node1, node2)
2123
}
2224
}
25+
26+
private module LogInjectionConfiguration implements DataFlow::ConfigSig {
27+
predicate isSource(DataFlow::Node source) { source instanceof RemoteFlowSource }
28+
29+
predicate isSink(DataFlow::Node sink) { sink instanceof LogInjectionSink }
30+
31+
predicate isBarrier(DataFlow::Node node) { node instanceof LogInjectionSanitizer }
32+
33+
predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) {
34+
any(LogInjectionAdditionalTaintStep c).step(node1, node2)
35+
}
36+
}
37+
38+
/**
39+
* Taint-tracking flow for tracking untrusted user input used in log entries.
40+
*/
41+
module LogInjectionFlow = TaintTracking::Make<LogInjectionConfiguration>;

java/ql/src/Security/CWE/CWE-117/LogInjection.ql

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@
1313

1414
import java
1515
import semmle.code.java.security.LogInjectionQuery
16-
import DataFlow::PathGraph
16+
import LogInjectionFlow::PathGraph
1717

18-
from LogInjectionConfiguration cfg, DataFlow::PathNode source, DataFlow::PathNode sink
19-
where cfg.hasFlowPath(source, sink)
18+
from LogInjectionFlow::PathNode source, LogInjectionFlow::PathNode sink
19+
where LogInjectionFlow::hasFlowPath(source, sink)
2020
select sink.getNode(), source, sink, "This log entry depends on a $@.", source.getNode(),
2121
"user-provided value"

java/ql/test/query-tests/security/CWE-117/LogInjectionTest.ql

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,16 @@ import java
22
import semmle.code.java.security.LogInjectionQuery
33
import TestUtilities.InlineFlowTest
44

5-
class EnableLegacy extends EnableLegacyConfiguration {
6-
EnableLegacy() { exists(this) }
7-
}
8-
95
private class TestSource extends RemoteFlowSource {
106
TestSource() { this.asExpr().(MethodAccess).getMethod().hasName("source") }
117

128
override string getSourceType() { result = "test source" }
139
}
1410

1511
private class LogInjectionTest extends InlineFlowTest {
16-
override DataFlow::Configuration getValueFlowConfig() { none() }
12+
override predicate hasValueFlow(DataFlow::Node src, DataFlow::Node sink) { none() }
1713

18-
override TaintTracking::Configuration getTaintFlowConfig() {
19-
result instanceof LogInjectionConfiguration
14+
override predicate hasTaintFlow(DataFlow::Node src, DataFlow::Node sink) {
15+
LogInjectionFlow::hasFlow(src, sink)
2016
}
2117
}

0 commit comments

Comments
 (0)