Product: Open-Xchange Guard
Vendor: Open-Xchange GmbH
Internal reference: 42847 (Bug ID)
Vulnerability type: Information exposure (CWE-200)
Vulnerable version: 2.0, 2.2.0
Vulnerable component: backend
Report confidence: Confirmed
Solution status: Fixed by vendor
Fixed version: 2.0.0-rev16, 2.2.0-rev8
Vendor notification: 2015-12-10
Solution date: 2015-12-16
CVE reference: CVE-2015-8542
CVSSv2: 7.0 (AV:N/AC:L/Au:S/C:P/I:N/A:N/E:H/RL:U/RC:C/CDP:MH/TD:H/CR:H/IR:ND/AR:ND)
The "getprivkeybyid" API call is used to download a PGP Private Key for a specific user after providing authentication credentials. Clients provide the "id" and "cid" parameter to specify the current user by its user- and context-ID. The "auth" parameter contains a hashed password string which gets created by the client by asking the user to enter his or her OX Guard password. This parameter is used as single point of authentication when accessing PGP Private Keys. In case a user has set the same password than another user, it is possible to download another users PGP Private Key by iterating the "id" and "cid" parameters. This kind of attack would also be able by brute-forcing login credentials, but since the "id" and "cid" parameters are sequential they are much easier to predict than a users login name. At the same time, there are some obvious insecure standard passwords that are widely used. A attacker could send the hashed representation of typically weak passwords and randomly fetch Private Key of matching accounts. The attack can be executed by both internal users and "guests" which use the external mail reader.
Users PGP Private Keys may get exposed to authenticated users (attackers) in case they were using weak passwords. The chance of a successful attack is higher than guessing a combination of the login name and password.
Proof of concept:
* Make sure User A (ID: 3, CID: 23) and User B (ID: 4, CID: 42) share the same OX Guard password
* Login as User A and request User Bs PGP Private Keyby changing the "id" or "cid" parameter accordingly. Use the same "auth" parameter as User A would use when triggering the "Download Private Key" functionality at "Guard PGP Settings".
* User Bs PGP Private Key is returned
Users shall set a strong password for their PGP Private Keys. In case a account gets compromised, users shall create a new keypair and revoke the compromised one. Users should update to versions 2.0.0-rev16, 2.2.0-rev8, 2.2.1 or later.