SYSTEM_ALERT_WINDOW: Now More Hidden Than Ever
SYSTEM_ALERT_WINDOW
has been a long-standing concern of mine, due to
its relationship to tapjacking attacks. And, due to some changes that
Google has made, now apps can get that permission, without user knowledge.
SYSTEM_ALERT_WINDOW
is the permission that allows apps to draw over top
of other apps from the background. It’s what powers things like
the Facebook “chatheads”, for example.
For a long time, SYSTEM_ALERT_WINDOW
was dangerous
. The user would
be informed, at install time, that the app was requesting the ability to
draw over other apps. In Android 6.0, it was upgraded to
signature|system|appop
, requiring the user to go into Settings and
manually grant this right to apps requesting it, if your targetSdkVersion
is 23 or higher — you could not
request it even using the new runtime permission system.
However, a few weeks ago, this Stack Overflow question appeared,
pointing out that apps like Evernote were getting SYSTEM_ALERT_WINDOW
without telling the user.
Mattia Maestrini responded
that Android 6.0.1 further modified SYSTEM_ALERT_WINDOW
. Apps
with targetSdkVersion
of 23 or higher that request SYSTEM_ALERT_WINDOW
get it without telling the user… if the user installs
the app from the Play Store. If the user installs the app by other
means, the previous Android 6.0 rules apply, and the user has to
manually grant the right to draw over other apps.
Users of Android 6.0.1+ device should go into Settings > Apps > (gear icon) > “Draw over other apps” and see what all shows up. The answer may surprise you. You may want to revoke that right for some apps.
I tossed together a “SAW Monitor” sample app
that watches app installs and upgrades and raises a Notification
if the app in question has requested SYSTEM_ALERT_WINDOW
and is
not on a whitelist. I’ll keep that app on my
own device, so that at least I find out when some app decides to
obtain this permission behind my back, with Google’s approval.
Of course, where possible, I get my apps from
F-Droid, rather than the
Play Store.