Skip to content

Commit 92ee0aa

Browse files
authored
Merge pull request #11367 from atorralba/atorralba/java/add-bitwise-implicit-intents
Java: Consider taint through bitwise operations on PendingIntent flags
2 parents 5866af4 + 1667fba commit 92ee0aa

File tree

3 files changed

+18
-3
lines changed

3 files changed

+18
-3
lines changed

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

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,9 +85,11 @@ private class MutablePendingIntentFlowStep extends ImplicitPendingIntentAddition
8585
// unless it is at least sometimes explicitly marked immutable and never marked mutable.
8686
// Note: for API level < 31, PendingIntents were mutable by default, whereas since then
8787
// they are immutable by default.
88-
not TaintTracking::localExprTaint(any(ImmutablePendingIntentFlag flag).getAnAccess(), flagArg)
88+
not bitwiseLocalTaintStep*(DataFlow::exprNode(any(ImmutablePendingIntentFlag flag)
89+
.getAnAccess()), DataFlow::exprNode(flagArg))
8990
or
90-
TaintTracking::localExprTaint(any(MutablePendingIntentFlag flag).getAnAccess(), flagArg)
91+
bitwiseLocalTaintStep*(DataFlow::exprNode(any(MutablePendingIntentFlag flag).getAnAccess()),
92+
DataFlow::exprNode(flagArg))
9193
)
9294
}
9395
}
@@ -124,3 +126,12 @@ private class PendingIntentSentSinkModels extends SinkModelCsv {
124126
]
125127
}
126128
}
129+
130+
/**
131+
* Holds if taint can flow from `source` to `sink` in one local step,
132+
* including bitwise operations.
133+
*/
134+
private predicate bitwiseLocalTaintStep(DataFlow::Node source, DataFlow::Node sink) {
135+
TaintTracking::localTaintStep(source, sink) or
136+
source.asExpr() = sink.asExpr().(BitwiseExpr).(BinaryExpr).getAnOperand()
137+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
---
2+
category: minorAnalysis
3+
---
4+
* Fixed an issue in the query `java/android/implicit-pendingintents` by which an implicit Pending Intent marked as immutable was not correctly recognized as such.

java/ql/test/query-tests/security/CWE-927/ImplicitPendingIntentsTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ public static void testPendingIntentAsAnExtra(Context ctx)
156156
PendingIntent pi = PendingIntent.getActivity(ctx, 0, baseIntent, flag); // Sanitizer
157157
Intent fwdIntent = new Intent();
158158
fwdIntent.putExtra("fwdIntent", pi);
159-
ctx.startActivity(fwdIntent); // $ SPURIOUS: $ hasImplicitPendingIntent
159+
ctx.startActivity(fwdIntent); // Safe
160160
}
161161
}
162162

0 commit comments

Comments
 (0)