Cybersecurity research podcast
Android Permissions Demystified
By instrumenting Android 2.2 and comparing compiled app calls with manifest requests, the researchers estimated that 30.4 percent of 795 fully handled Android Market apps requested unnecessary permissions. For mobile security teams, that supports better permission mapping and documentation, but the corpus was a 2011 snapshot, complex reflection was unresolved, and the analysis never quantified how many overprivileged apps it missed.
Episode 25 Aug 2026 · Paper 16 Oct 2011 · Proceedings of the 18th ACM Conference on Computer and Communications Security (CCS '11) · VERSION of RECORD
Research summary
A technical explanation of the paper's research question, method, reported findings and limitations. The platform testing reached about 85 percent of the Android API and identified permission requirements for 1,259 methods. Android documentation listed only 78 methods, and the tests also uncovered documentation errors. That gap supports the researchers’…
The 2011 paper showed that Android overprivilege was often an engineering-information failure, not reckless intent. Runtime grants, scoped storage, narrower selectors and target-SDK policy reduced standing access, but SDKs, dynamic code, purpose and cloud behavior keep least privilege unresolved. A 2026 successor should infer per-component capabilities, validate them dynamically across device variants and enforce them gradually through real isolation boundaries.
Paper details
Authors: Adrienne Porter Felt , Erika Chin , Steve Hanna , Dawn Song , David Wagner
Transcript
Highlighting follows the podcast. Select any word to seek.
Android Permissions Demystified. Adrienne Porter Felt and colleagues presented this work at the Conference on Computer and Communications Security in 2011. They asked whether Android apps followed least privilege—requesting only the authority needed by their reachable functionality—and whether incomplete documentation caused unnecessary requests.
Android 2.2 did not enforce permissions through one central policy table. Some checks occurred in system services reached through Binder. Others relied on Linux groups for selected resources, Content Providers, or Intent delivery, where one component could ask another to act. The version defined 134 platform permissions. The researchers therefore needed a permission map: a lookup connecting protected operations to the permissions required to perform them.
The comparison was narrow. An app counted as overprivileged when it requested a permission that its reachable functionality did not require. That tests declared capability against code, not privacy behavior: it cannot tell whether sensitive data was actually used, transmitted, or justified by the feature shown to the user. The related question was whether confusing names, incomplete guidance, delegation to another app, or leftover test and deprecated permissions explained the mismatches.
To build the permission map, the researchers modified Android 2.2 to record permission checks. They created automated and manual tests for public, private, and hidden APIs, as well as Content Providers and Intents. Stowaway then used static analysis, meaning it examined compiled applications without running them. It extracted API calls, looked up the permissions those calls could require, and compared that maximum-needed set with each app’s manifest declarations.
The platform testing reached about 85 percent of the Android API and identified permission requirements for 1,259 methods. Android documentation listed only 78 methods, and the tests also uncovered documentation errors. That gap supports the researchers’ diagnosis that developers lacked reliable, method-level guidance. It also exposed the structural difficulty: permission checks lived behind several enforcement mechanisms rather than in a single policy list.
Next came the application measurements. Among the 795 apps Stowaway fully handled, the adjusted estimate was that roughly a third were truly overprivileged. The adjustment used manual review to account for false alerts. The observed error patterns often looked like engineering confusion. Some apps requested permissions even when they handed protected work to another app. Others copied inaccurate advice or retained obsolete and test permissions. The distribution of excess permissions likewise suggested narrow mistakes rather than indiscriminate requests.
The estimate has firm boundaries. Stowaway was tied to Android 2.2, and the apps came from a 2011 Android Market snapshot. The analysis could count dead code—code present but never executed—and it overestimated some Content Provider needs. It also could not resolve complex reflection. The study did not quantify its false-negative rate, so the number of overprivileged apps it missed remains unknown. Manifest-to-code matching also did not determine actual data use, transmission, or purpose.
For present-day Android reviews, do not carry that historical estimate forward as a baseline. Runtime grants and automatic permission reset can reduce standing access in the paths they cover. Scoped storage and selectors that avoid broad permissions can do the same. But the available platform record does not provide a like-for-like modern replication proving that manifest overprivilege fell by a specific percentage. Mapping remains version- and path-dependent. Native code and interprocess calls can escape a simple API list. So can reflection, dynamically loaded SDKs, and server-controlled behavior. Mobile detection teams should treat manifest analysis as one layer. They should compare it with observed runtime access and off-device data disclosures, then check network and server evidence.
Android Permissions Demystified contributed a tested mapping from protected Android operations to permissions and a static checker that exposed mismatches between reachable code and manifest requests. For mobile security and app-review teams, the useful move is to keep those mappings version-specific, improve method-level permission guidance, and pair code analysis with runtime and purpose checks. They should not read a mismatch as proof that sensitive data was used, or read the historical percentage as a measurement of today’s Android ecosystem.