I wonder if more fine-grained permissions would make more sense for this sort of feature. Perhaps it would be better if Android had support for "This app may read text messages from 1-800-XXX-XXXX" or something similar instead.
With it, I have extremely fine-grained access control to a wide variety of "system calls", including access to contacts, text messages and to the device phone number.
In this case, I can permit access temporarily during the 2FA, and then return garbage values the rest of the time. Easy. (Though obviously if they harvest my text messages for other purposes during 2FA, that is a problem - but one can that can be technically solved within XPrivacy imo.)
In other cases, such as running Skype, I deny access to everything always (phone number, my location, contacts, Google accounts are the things Skype makes system calls for) and Skype continue to works fine, so I think this is a viable strategy.
Wait, how does that work?
Doesn't that kind of break 2 form authentication?
If no input is required by the user then it's pointless. If I hack your account and Facebook sends your phone an SMS to authenticate but the Facebook App automatically "intercepts" and reads the SMS message and says "Yup! It's good!" What's the point in sending the SMS message? Think about that for a moment. Why not just send a request to my smart toaster and have my smart toaster just reply "Yup, I got your message!"
Am I missing something?
A Facebook engineer explained this permission on Reddit when the story first broke. They are using SMS access to speed up two-factor authentication. (They send an SMS to your phone, and then read it automatically.)
Full explanation here: http://www.reddit.com/r/WTF/comments/1t5z45/facebook_why_the...
Should this information comfort you? It depends on if you trust Facebook.