auth: don't expose full set of permissions into channelstream payload.

This leads to resource discovery security vulnerability
This commit is contained in:
Marcin Lulek 2017-10-08 23:31:45 +02:00
parent c0c5fd5af8
commit 3df3815e09
2 changed files with 20 additions and 1 deletions

View file

@ -71,6 +71,7 @@ class ChannelstreamView(object):
except Exception:
log.exception('Failed to decode json from request')
raise HTTPBadRequest()
try:
channels = check_channel_permissions(
json_body.get('channels'),
@ -92,7 +93,7 @@ class ChannelstreamView(object):
'display_name': None,
'display_link': None,
}
user_data['permissions'] = self._rhodecode_user.permissions
user_data['permissions'] = self._rhodecode_user.permissions_safe
payload = {
'username': user.username,
'user_state': user_data,

View file

@ -824,6 +824,24 @@ class AuthUser(object):
def permissions(self):
return self.get_perms(user=self, cache=False)
@LazyProperty
def permissions_safe(self):
"""
Filtered permissions excluding not allowed repositories
"""
perms = self.get_perms(user=self, cache=False)
perms['repositories'] = {
k: v for k, v in perms['repositories'].iteritems()
if v != 'repository.none'}
perms['repositories_groups'] = {
k: v for k, v in perms['repositories_groups'].iteritems()
if v != 'group.none'}
perms['user_groups'] = {
k: v for k, v in perms['user_groups'].iteritems()
if v != 'usergroup.none'}
return perms
def permissions_with_scope(self, scope):
"""
Call the get_perms function with scoped data. The scope in that function