Hello -
I definitely don't like the Android model. We'll have to figure out exactly how to communicate permissions requests to users. On the other hand, an appropriately vetted and signed app could be given permissions implicitly in a permissions manifest, so the user doesn't need to deal with it. Also, some kind of heuristics may make it possible for the permissions manager to deal with things internally, again not bothering the user. These are areas that need thought and experimentation. We will definitely need some sort of identification for web apps and sites. Origin was the first thought, but if you have further suggestions, please post. Maybe for network loaded apps/sites, permissions will need to be re-goten from the user each time they are loaded (helps with, but doesn't completely cure hacked sites). Maybe locally cached apps could keep their permissions until they are re-installed.
-Jim Straus

On 3/5/12 1:25 PM, Lucas Adamski wrote:
I like this proposal at a high level, it provides for a lot of flexibility.  
What I like about a permission model that can prompt at runtime is that is 
makes some permissions optional.  On Android many free apps require geolocation 
purely for advertising targeting, requiring the user to trade their privacy for 
functionality.  Those same apps, on iPhone, run just fine if the user denies 
them geolocation privileges.  These decisions could be remembered for some 
finite amount of time (30 days), or indefinitely if you provide the user with 
the ability to manage them directly.

The downside of prompting at runtime is that it does need to map to permissions an 
average user could hope to understand (hello user research?)  Asking for location, 
contacts, etc seems like a reasonable question to ask the user.  Asking the user to 
change the network proxy settings or fiddle with your email settings, maybe less so.  The 
latter might be better bundled into a general "scary system access" category.

The origin problem is still a tricky one.  Browsers overall still rely on same origin as 
the only meaningful security boundary (including work on iframe sandbox, CSP, etc.). I'm 
still skeptical though that alone is sufficient to authenticate apps that would have 
"system access".  A web server is generally a much easier thing to compromise 
than a code signature.

Adding dev-security for more brains.
   Lucas.



On Mar 3, 2012, at 2:44 PM, Jim Straus wrote:

Redirecting to the public list and to the webapps team, with some additions...

Hello all -
  I've been thinking about what the permissions model of b2g might look like, 
so I'm putting down my ideas to solicit feedback and see if we can get this 
going.  A lot of the components and services we've been building are all 
waiting on a permissions design.

Permissions in b2g are needed for access to services and data that is the user 
might not want to allow an app to access.  Examples include the users current 
location (geolocation), contacts, making phone calls, maybe even cellular data 
connections (if the user wants to control their costs), large storage areas, 
etc.  We'll have to decide the entire list as we go along.

I envision two user interfaces needed, the dialog/bar/whatever that asks the 
user for permission, and a permissions manager app where the user can revoke 
permissions, a priori grant a permission to all apps for a component (like 
always allow cellular data connections if the user has unlimited data), and to 
see what permissions exist and what apps have been granted permission. The 
permission request user interface would allow for the user to grant/deny 
permission once or permanently.  If permission is not granted permanent, the 
next time the service/component is invoked permission would be asked for again. 
 I also would like to make at least the permissions manager be able to be 
changed to a non-built in app, if we feel we can maintain security.

The generally discussed model is that permissions are requested as a feature is 
used, on a feature by feature basis (unlike Android's permission model).  
However, there is nothing in particular about this design that would prevent us 
from adding a permission manifest to the webapp manifest that could do it 
wholesale when the app is loaded or launched, if that was desired.  It is also 
possible (but I'm not sure desirable) we could allow for apps to have 
per-asserted permissions for appropriately signed and validated webapps.

My idea is that there is a permissions component that handles all the internal 
work.  The permissions component is also protected by a permission, so that 
apps can't change the permissions without the user knowing.  The permissions 
component stores webapp signatures (originating url?, is this un-spoofable?) 
along with the permissions permanently granted/denied in a protected indexedDB. 
 Components would query the permission component when the component starts for 
a particular context and permission is returned about whether permission is 
granted (by user interaction or previously stored permission).  Apps could 
possibly also explicitly ask the permission component about the state of their 
granted/denied permissions so they could handle denials in a graceful manner 
(this would not have to be protected).

The permissions component can (and will) become more intelligent as we figure 
out the right things to do.  We can try to infer permissions in some cases.  
Apps signed as having come from a site known to validate it's apps and signed 
as having come from a known developer can have per-autherized permissions in 
their webapp manifest (an extension to the webapp manifest will be needed).  
Webapp manifests could be used to request permission once when the app is 
installed.  Or some combination of any or all of these.  Or something else.  If 
the components are all using the the permissions component, it doesn't matter 
to the rest of the system how the permission is obtained, just that it is 
either granted or not.

My thought is that the permission manager app would be internally restricted to 
only being able to get the permission granting permission (is that confusing 
enough), so that a  third party permission manager would not be able to 
secretly subvert other parts of the system.  That still may not be secure 
enough, so it is possible that we would not be able to allow the permission 
manager app to be replaced.  The permission granting to the permissions app 
should not be able to be denied permanently so that the user can't be locked 
out of controlling permissions.  A full threat model and consideration needs to 
be done here to figure out what is possible.

I'm hoping that we can provide the ability to query the permission component in 
a simple way in the .idl files so that every component doesn't need to add in 
explicit code all over the place.  This might either be done in the .idl 
compiler or through an include in the .idl files.

Note, this same architecture should be available for webapps in general, and 
even non-app web sites in all other Mozilla browsers that need it.  It should 
also be proposed as a standard along with the webapp standard.

To progress with this, we need several things.  Someone with expertise in 
webapps that can answer questions about whether webapps can interact with other 
webapps, what should be used as a signature for a webapp/sites.   Someone to do 
a threat model and look at security considerations to make sure we're covering 
all the bases of where a malicious webapp/site might bypass the permissions 
model, and to see if the permissions manager app can be replaced by a third 
party app.  We need UI design and implementation for the 
notification/dialog/etc. for asking the users permission.  We need UI design 
and implementation for the permissions manager app.  We need implementation of 
the permission component.  We need .idl extension/include for easily adding 
permission requests to components.

Thoghts?  Comments?
-Jim Straus
_______________________________________________
dev-b2g mailing list
dev-...@lists.mozilla.org
https://lists.mozilla.org/listinfo/dev-b2g

_______________________________________________
dev-security mailing list
dev-security@lists.mozilla.org
https://lists.mozilla.org/listinfo/dev-security

Reply via email to