Add sensitive text flow query

This commit is contained in:
Joe Farebrother
2024-01-19 15:44:28 +00:00
parent aeae208dc3
commit 5dd0addfc2
2 changed files with 55 additions and 0 deletions

View File

@@ -20,3 +20,38 @@ private module NotificationTrackingConfig implements DataFlow::ConfigSig {
/** Taint tracking flow for sensitive data flowing to system notifications. */
module NotificationTracking = TaintTracking::Global<NotificationTrackingConfig>;
/** A call to a method that sets the text of a `TextView`. */
private class SetTextCall extends MethodCall {
SetTextCall() {
this.getMethod()
.getAnOverride*()
.hasQualifiedName("android.widget", "TextView", ["append", "setText", "setHint"]) and
(
this.getMethod()
.getParameter(0)
.getType()
.(RefType)
.hasQualifiedName("java.lang", "CharSequence")
or
this.getMethod().getParameter(0).getType().(Array).getElementType() instanceof CharacterType
)
}
/** Gets the string argument of this call. */
Expr getStringArgument() { result = this.getArgument(0) }
}
/** A configuration for tracking sensitive information to text fields. */
private module TextFieldTrackingConfig implements DataFlow::ConfigSig {
predicate isSource(DataFlow::Node src) { src.asExpr() instanceof SensitiveExpr }
predicate isSink(DataFlow::Node sink) { sink.asExpr() = any(SetTextCall s).getStringArgument() }
predicate isBarrier(DataFlow::Node node) {
node.getType() instanceof PrimitiveType or node.getType() instanceof BoxedType
}
}
/** Taint tracking flow for sensitive data flowing to text fields. */
module TextFieldTracking = TaintTracking::Global<NotificationTrackingConfig>;