Permissions are justified and minimized
Why it matters
App stores actively audit permission declarations for proportionality — a notes app requesting ACCESS_FINE_LOCATION or NSCameraUsageDescription without a plausible justification triggers manual review and frequently results in rejection or removal. Under GDPR Art. 5(1)(c) (data minimisation) and CWE-272 (least privilege violation), requesting permissions beyond what your app's core function requires constitutes a legal compliance failure, not just a policy violation. Apple's privacy nutrition label (apple-privacy-permission-usage) surfaces every declared permission to users before install; overly broad permission sets reduce install conversion and increase uninstalls. iOS rejects binaries that declare a permission in Info.plist without a corresponding NS*UsageDescription string — this is an automated binary validation failure.
Severity rationale
Medium because missing `NS*UsageDescription` strings trigger automated iOS binary rejection, and overly broad permission sets expose the app to GDPR Art. 5(1)(c) violations and store reviewer scrutiny.
Remediation
Audit app.json for every declared permission and add a precise usage description for iOS. Remove any permissions your app does not actually invoke at runtime.
// app.json
{
"expo": {
"ios": {
"infoPlist": {
"NSCameraUsageDescription": "Used to scan QR codes for event check-in.",
"NSPhotoLibraryUsageDescription": "Used to attach photos to your reports."
}
},
"android": {
"permissions": [
"android.permission.CAMERA"
]
}
}
}
For each permission, verify with a code search that it is actually called (Camera.requestCameraPermissionsAsync(), etc.) — remove any that aren't. Cross-reference with the App Store Privacy & Data audit (app-store-privacy-data) for the full ATT and data collection declaration requirements.
DetectionPro
The detection method for this pattern is part of AuditBuffet Pro.
The full method (what to look for, pass and fail conditions, and how results get reported) ships inside the App Store Readiness Audit. The pattern definition, severity rationale, and remediation remain openly licensed under CC-BY-4.0.
External references
- cwe · CWE-272 — Least Privilege Violation
- gdpr · Art. 5(1)(c) — GDPR — Data minimisation principle
- external · apple-privacy-permission-usage — Apple Developer — Requesting access to protected resources
- external · android-permissions-overview — Android Developer — Permissions on Android
Taxons
History
- 2026-04-18·v1.0.0·Initial import from mobile-store-readiness·automated