Skip to content

Commit 5bd530f

Browse files
committed
Java: Refactor IntentUriPermissionManipulation.
1 parent b14b95c commit 5bd530f

File tree

3 files changed

+31
-11
lines changed

3 files changed

+31
-11
lines changed

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

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,11 @@ private import semmle.code.java.dataflow.DataFlow
99
private import IntentUriPermissionManipulation
1010

1111
/**
12+
* DEPRECATED: Use `IntentUriPermissionManipulationFlow` instead.
13+
*
1214
* A taint tracking configuration for user-provided Intents being returned to third party apps.
1315
*/
14-
class IntentUriPermissionManipulationConf extends TaintTracking::Configuration {
16+
deprecated class IntentUriPermissionManipulationConf extends TaintTracking::Configuration {
1517
IntentUriPermissionManipulationConf() { this = "UriPermissionManipulationConf" }
1618

1719
override predicate isSource(DataFlow::Node source) { source instanceof RemoteFlowSource }
@@ -32,3 +34,23 @@ class IntentUriPermissionManipulationConf extends TaintTracking::Configuration {
3234
any(IntentUriPermissionManipulationAdditionalTaintStep c).step(node1, node2)
3335
}
3436
}
37+
38+
private module IntentUriPermissionManipulationConf implements DataFlow::ConfigSig {
39+
predicate isSource(DataFlow::Node source) { source instanceof RemoteFlowSource }
40+
41+
predicate isSink(DataFlow::Node sink) { sink instanceof IntentUriPermissionManipulationSink }
42+
43+
predicate isBarrier(DataFlow::Node barrier) {
44+
barrier instanceof IntentUriPermissionManipulationSanitizer
45+
}
46+
47+
predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) {
48+
any(IntentUriPermissionManipulationAdditionalTaintStep c).step(node1, node2)
49+
}
50+
}
51+
52+
/**
53+
* Taint tracking flow for user-provided Intents being returned to third party apps.
54+
*/
55+
module IntentUriPermissionManipulationFlow =
56+
TaintTracking::Make<IntentUriPermissionManipulationConf>;

java/ql/src/Security/CWE/CWE-266/IntentUriPermissionManipulation.ql

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,12 @@
1515
import java
1616
import semmle.code.java.security.IntentUriPermissionManipulationQuery
1717
import semmle.code.java.dataflow.DataFlow
18-
import DataFlow::PathGraph
18+
import IntentUriPermissionManipulationFlow::PathGraph
1919

20-
from DataFlow::PathNode source, DataFlow::PathNode sink
21-
where any(IntentUriPermissionManipulationConf c).hasFlowPath(source, sink)
20+
from
21+
IntentUriPermissionManipulationFlow::PathNode source,
22+
IntentUriPermissionManipulationFlow::PathNode sink
23+
where IntentUriPermissionManipulationFlow::hasFlowPath(source, sink)
2224
select sink.getNode(), source, sink,
2325
"This Intent can be set with arbitrary flags from a $@, " +
2426
"and used to give access to internal content providers.", source.getNode(),

java/ql/test/query-tests/security/CWE-266/IntentUriPermissionManipulationTest.ql

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

5-
class EnableLegacy extends EnableLegacyConfiguration {
6-
EnableLegacy() { exists(this) }
7-
}
8-
95
class IntentUriPermissionManipulationTest 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 IntentUriPermissionManipulationConf
8+
override predicate hasTaintFlow(DataFlow::Node src, DataFlow::Node sink) {
9+
IntentUriPermissionManipulationFlow::hasFlow(src, sink)
1410
}
1511
}

0 commit comments

Comments
 (0)