Skip to content

Commit ca8e013

Browse files
committed
Java: Refactor FragmentInjection.
1 parent 5bd530f commit ca8e013

File tree

3 files changed

+25
-11
lines changed

3 files changed

+25
-11
lines changed

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

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,12 @@ import semmle.code.java.dataflow.TaintTracking
66
import semmle.code.java.security.FragmentInjection
77

88
/**
9+
* DEPRECATED: Use `FragmentInjectionFlow` instead.
10+
*
911
* A taint-tracking configuration for unsafe user input
1012
* that is used to create Android fragments dynamically.
1113
*/
12-
class FragmentInjectionTaintConf extends TaintTracking::Configuration {
14+
deprecated class FragmentInjectionTaintConf extends TaintTracking::Configuration {
1315
FragmentInjectionTaintConf() { this = "FragmentInjectionTaintConf" }
1416

1517
override predicate isSource(DataFlow::Node source) { source instanceof RemoteFlowSource }
@@ -20,3 +22,19 @@ class FragmentInjectionTaintConf extends TaintTracking::Configuration {
2022
any(FragmentInjectionAdditionalTaintStep c).step(n1, n2)
2123
}
2224
}
25+
26+
private module FragmentInjectionTaintConf implements DataFlow::ConfigSig {
27+
predicate isSource(DataFlow::Node source) { source instanceof RemoteFlowSource }
28+
29+
predicate isSink(DataFlow::Node sink) { sink instanceof FragmentInjectionSink }
30+
31+
predicate isAdditionalFlowStep(DataFlow::Node n1, DataFlow::Node n2) {
32+
any(FragmentInjectionAdditionalTaintStep c).step(n1, n2)
33+
}
34+
}
35+
36+
/**
37+
* Taint-tracking flow for unsafe user input
38+
* that is used to create Android fragments dynamically.
39+
*/
40+
module FragmentInjectionTaintFlow = TaintTracking::Make<FragmentInjectionTaintConf>;

java/ql/src/Security/CWE/CWE-470/FragmentInjection.ql

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

1414
import java
1515
import semmle.code.java.security.FragmentInjectionQuery
16-
import DataFlow::PathGraph
16+
import FragmentInjectionTaintFlow::PathGraph
1717

18-
from DataFlow::PathNode source, DataFlow::PathNode sink
19-
where any(FragmentInjectionTaintConf conf).hasFlowPath(source, sink)
18+
from FragmentInjectionTaintFlow::PathNode source, FragmentInjectionTaintFlow::PathNode sink
19+
where FragmentInjectionTaintFlow::hasFlowPath(source, sink)
2020
select sink.getNode(), source, sink,
2121
"Fragment depends on a $@, which may allow a malicious application to bypass access controls.",
2222
source.getNode(), "user-provided value"

java/ql/test/query-tests/security/CWE-470/FragmentInjectionTest.ql

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

5-
class EnableLegacy extends EnableLegacyConfiguration {
6-
EnableLegacy() { exists(this) }
7-
}
8-
95
class Test extends InlineFlowTest {
10-
override DataFlow::Configuration getValueFlowConfig() { none() }
6+
override predicate hasValueFlow(DataFlow::Node src, DataFlow::Node sink) { none() }
117

12-
override TaintTracking::Configuration getTaintFlowConfig() {
13-
result instanceof FragmentInjectionTaintConf
8+
override predicate hasTaintFlow(DataFlow::Node src, DataFlow::Node sink) {
9+
FragmentInjectionTaintFlow::hasFlow(src, sink)
1410
}
1511
}

0 commit comments

Comments
 (0)