In Android applications, receiving intents is security-sensitive. For example, it has led in the past to the following vulnerability:
Once a receiver is registered, any app can broadcast potentially malicious intents to your application.
This rule raises an issue when a receiver is registered without specifying any "broadcast permission".
There is a risk if you answered yes to any of those questions.
Restrict the access to broadcasted intents. See Android documentation for more information.
import android.content.BroadcastReceiver
import android.content.Context
import android.content.IntentFilter
import android.os.Build
import android.os.Handler
import androidx.annotation.RequiresApi
class MyIntentReceiver {
@RequiresApi(api = Build.VERSION_CODES.O)
fun register(
context: Context, receiver: BroadcastReceiver?,
filter: IntentFilter?,
scheduler: Handler?,
flags: Int
) {
context.registerReceiver(receiver, filter) // Sensitive
context.registerReceiver(receiver, filter, flags) // Sensitive
// Broadcasting intent with "null" for broadcastPermission
context.registerReceiver(receiver, filter, null, scheduler) // Sensitive
context.registerReceiver(receiver, filter, null, scheduler, flags) // Sensitive
}
}
import android.content.BroadcastReceiver
import android.content.Context
import android.content.IntentFilter
import android.os.Build
import android.os.Handler
import androidx.annotation.RequiresApi
class MyIntentReceiver {
@RequiresApi(api = Build.VERSION_CODES.O)
fun register(
context: Context, receiver: BroadcastReceiver?,
filter: IntentFilter?,
broadcastPermission: String?,
scheduler: Handler?,
flags: Int
) {
context.registerReceiver(receiver, filter, broadcastPermission, scheduler)
context.registerReceiver(receiver, filter, broadcastPermission, scheduler, flags)
}
}