[NEWS] OpenBOR Multiple Format String

SecuriTeam <[email protected]> 21 May 2006 11:52:11 +0200
Newsgroups gmane.comp.security.securiteam
Message-ID <[email protected]>
The following security advisory is sent to the securiteam mailing list, and can be found at the SecuriTeam web site: http://www.securiteam.com
- - promotion

The SecuriTeam alerts list - Free, Accurate, Independent.

Get your security news from a reliable source.
http://www.securiteam.com/mailinglist.html 

- - - - - - - - -



  OpenBOR Multiple Format String
------------------------------------------------------------------------


SUMMARY

Beats of Rage (BOR) is a very nice open source beat'em up engine developed 
by  <http://www.senileteam.com> Senile Team and inspired by games like 
"Streets of Rage" and "the King of Fighters". It works on many platforms 
and supports mods:
 <http://borrevolution.vg-network.com> http://borrevolution.vg-network.com
 <http://www.borhosting.com> http://www.borhosting.com

Some format string vulnerabilities exist in BOR which can be exploited 
through malicious mod files.

DETAILS

The following are the pieces of code containing the bugs, anyway the most 
used functions are just shutdown (used to kill the game at its end or when 
an error is occurred) and update (for showing the text on the screen 
through the font_printf function):

void shutdown(char *msg, ...){
    static char buf[2048];
    va_list arglist;
    
    va_start(arglist, msg);
    vsprintf(buf, msg, arglist);
    va_end(arglist);

    ...

    printf("Done.\n\n\n\n");
    printf(buf);

    exit(0);
}

From predrawstatus():

                font_printf(21+xo, savedata.windowpos+19, 0, 
player[i].opponent->name);
        ...
        else if(player[i].joining && player[i].model){
            font_printf(21+xo, savedata.windowpos+2, 0, 
player[i].model->name);
        ...

From update():

        font_printf(0,230, 0, debug_msg);

From choose_difficulty:

            if(savedata.times_completed >= ifcomplete[i]) 
font_printf(120,160+i*10, (selector==i), set_names[i]);


Take an existing mod and:
- add the following line in data/scenes/intro.txt:
    music %08x.%08x.%08x.%08x 0

- add the following line in data/easy/1aeasy.txt:
    background %08x.%08x.%08x.%08x

The first operation exploits the format string in the update function when 
the game starts and the intro is automatically launched. The second one 
instead exploits the bug located in the shutdown function when the Easy 
level is selected and the character is chosen.

For extracting and rebuilding the PAK files is possible to use the 
following tool:
  <http://aluigi.org/papers/borpak.zip> 
http://aluigi.org/papers/borpak.zip

Fix:
No fix.
BOR is no longer supported while OpenBOR yes but I have received no 
replies from its developers.


ADDITIONAL INFORMATION

The information has been provided by  <mailto:[email protected]> Luigi 
Auriemma.



======================================== 


This bulletin is sent to members of the SecuriTeam mailing list. 
To unsubscribe from the list, send mail with an empty subject line and body to: [email protected] 
In order to subscribe to the mailing list, simply forward this email to: [email protected] 


==================== 
==================== 

DISCLAIMER: 
The information in this bulletin is provided "AS IS" without warranty of any kind. 
In no event shall we be liable for any damages whatsoever including direct, indirect, incidental, consequential, loss of business profits or special damages.