Mitigation Strategy: Strict Permission Control and Data Access Minimization (using SDK methods)
-
Description:
- Identify Essential Functionality: Determine the minimal Facebook features your app requires.
- Permission Audit: Consult the Facebook Permissions Reference (https://developers.facebook.com/docs/permissions/).
- Minimal Permission Request (SDK): Use the
facebook-android-sdk
'sLoginManager
class. Specifically, uselogInWithReadPermissions(Activity activity, Collection<String> permissions)
orlogInWithPublishPermissions(Activity activity, Collection<String> permissions)
. Thepermissions
collection should contain only the absolutely necessary permission strings (e.g.,"public_profile"
,"email"
– but only if truly needed). Do not request all permissions at once. - Runtime Requests (SDK): Use
LoginManager
to request permissions at the time they are needed, not during app startup. This provides better context to the user. The SDK provides callbacks to handle the results of the permission request. - Check Existing Permissions (SDK): Before requesting a permission, use
AccessToken.getCurrentAccessToken().getPermissions().contains("permission_name")
to check if the permission has already been granted. - Handle Denials (SDK): Implement the
FacebookCallback<LoginResult>
interface to handle the results of the login and permission request. This includes handlingonCancel()
(user canceled) andonError(FacebookException error)
(an error occurred). Provide user-friendly messages and alternative flows if a permission is denied. - Regular Reviews: Periodically review the requested permissions, especially after SDK updates.
-
Threats Mitigated:
- Excessive Data Collection (Severity: High): Directly controls the data the SDK can access.
- Data Breach Impact (Severity: High): Limits the scope of potential data breaches.
- Reputational Damage (Severity: Medium): Improves user trust by requesting only necessary permissions.
- App Store Rejection (Severity: Medium): Avoids rejection due to excessive permission requests.
-
Impact:
- Excessive Data Collection: Risk reduced significantly (High impact).
- Data Breach Impact: Risk reduced significantly (High impact).
- Reputational Damage: Risk reduced moderately (Medium impact).
- App Store Rejection: Risk reduced moderately (Medium impact).
-
Currently Implemented:
LoginManager.getInstance().logInWithReadPermissions()
used withpublic_profile
inLoginActivity.java
.- Basic runtime permission check.
-
Missing Implementation:
- No regular permission audit.
- Improved handling of permission denials needed.
- No review after SDK updates.
Mitigation Strategy: Secure Access Token Handling (using SDK features)
-
Description:
- Never Hardcode: Access tokens must never be hardcoded.
- Secure Storage: Use the Android Keystore System (
AndroidKeyStore
) for secure storage. This is separate from the SDK, but crucial for securing the token the SDK provides. - No Logging: Never log access tokens.
- Expiration Handling (SDK): Use
AccessToken.getCurrentAccessToken()
to get the current token. CheckisExpired()
to see if it's still valid. ImplementAccessTokenTracker
to receive notifications about token changes (expiration, refresh). This is a direct SDK feature. OverrideonCurrentAccessTokenChanged(AccessToken oldAccessToken, AccessToken currentAccessToken)
to handle these changes. - Refresh Tokens (if applicable, SDK): If using refresh tokens, handle them securely. The SDK may handle refresh token management automatically, but verify this in the documentation.
- Logout (SDK): When the user logs out, always call
LoginManager.getInstance().logOut()
. This is a critical SDK method that invalidates the Facebook session and clears the access token managed by the SDK.
-
Threats Mitigated:
- Token Theft (Severity: High): Prevents unauthorized access to the user's Facebook account.
- Session Hijacking (Severity: High): Makes session hijacking much more difficult.
- Unauthorized API Access (Severity: High): Prevents unauthorized use of the Facebook API.
-
Impact:
- Token Theft: Risk reduced significantly (High impact).
- Session Hijacking: Risk reduced significantly (High impact).
- Unauthorized API Access: Risk reduced significantly (High impact).
-
Currently Implemented:
AccessToken.getCurrentAccessToken()
is used.LoginManager.getInstance().logOut()
is called on logout.
-
Missing Implementation:
- Access token stored in
SharedPreferences
(unencrypted) – needs migration toAndroidKeyStore
. - No
AccessTokenTracker
implementation for proactive expiration handling.
- Access token stored in
Mitigation Strategy: Keep SDK Updated
-
Description:
- Dependency Management: Use Gradle to manage the
facebook-android-sdk
dependency. - Regular Updates: Check for updates to the
facebook-android-sdk
frequently (e.g., monthly). Update to the latest stable version promptly. This is crucial because Facebook releases security patches through SDK updates. - Security Advisories: Subscribe to Facebook's developer security alerts.
- Rollback Plan: Have a plan to revert to a previous SDK version if necessary.
- Dependency Management: Use Gradle to manage the
-
Threats Mitigated:
- Exploitation of Known SDK Vulnerabilities (Severity: Variable, potentially High): Directly addresses vulnerabilities patched by Facebook in SDK updates.
-
Impact:
- Exploitation of Known SDK Vulnerabilities: Risk reduced significantly (High to Medium impact, depending on the vulnerability).
-
Currently Implemented:
- SDK included as a Gradle dependency.
-
Missing Implementation:
- No automated update checks.
- Not subscribed to security alerts.
- No rollback plan.