Package: xshisen
Version: 1.51-1-1.1
Severity: grave
Tags: security

I've noticed a few more interesting things in xsheisen that might let it
be exploited to get gid games and similar fun. I haven't exploited all
of these and I don't know if they all really _are_ exploitable. This is
just the result of a little 10 minute audit I did to get some idea of
whether xshisen is likely to have more unfixed security holes besides
the most recent set of three.


1. Unsafe resource file reading.

    rcfile = new char [strlen(home) + 12];
    sprintf(rcfile, "%s/.xshisenrc", home);
    rdb2 = XrmGetFileDatabase(rcfile);

Here it loads up ~/..xshisenrc using XrmGetFileDatabase. Since this file
is in the user's home directory, it can be replaced by the user with
arbitrary content. According to the man page for XrmGetFileDatabase,
"the database that results from reading a file with incorrect syntax is
implementation- dependent." Since this function's behavior on corrupted
resource files is undefined, it seems likely that one might be able to
at least crash xsheisen with such a file, and possibly run shellcode.

Partial proof of concept:

[EMAIL PROTECTED]:~>cp =ls .xshisen
[EMAIL PROTECTED]:~>xshisen
Warning: Missing charsets in String to FontSet conversion
zsh: segmentation fault  xshisen

Whether this is truely exploitable, I don't know.

2. Unsafe XSHISENLIB environment variable.

    if ((lib_directory = getenv("XSHISENLIB")) == NULL)
            lib_directory = globRes.libDir;
            
Here it lets an envionment variable control the lib directory that
xpm files are read from. These files are read by XpmReadFileToPixmap.
I don't know if that library function can be exploited by broken xpm
files, but any bug in it has the potential to be exploited via xshisen.

3. Unsafe XSHISENDAT environment variable.

    if ((dat_directory = getenv("XSHISENDAT")) == NULL)
          dat_directory = debscoredir;

Here it lets an envionment variable control the directory it uses to write
the global high score file. So you just point a symlink to a file you'd
like to overwrite and redirect the XSHISENDAT to that directory:

[EMAIL PROTECTED]:~>echo hi > file           
[EMAIL PROTECTED]:~>ls -l xshisen.scores 
lrwxrwxrwx  1 joey joey 4 Jan 24 16:05 xshisen.scores -> file
[EMAIL PROTECTED]:~>XSHISENDAT=. xshisen
Warning: Missing charsets in String to FontSet conversion
[here I finished a game in click trial mode]
[EMAIL PROTECTED]:~>head file
hi
joey     (Joey Hess)         X1.51 00:01:45 05-01-24 16:07:40 
                             X1.51 99:99:99 00-00-00 00:00:00 
                             X1.51 99:99:99 00-00-00 00:00:00 
                             X1.51 99:99:99 00-00-00 00:00:00 
                             X1.51 99:99:99 00-00-00 00:00:00 
                             X1.51 99:99:99 00-00-00 00:00:00 
                             X1.51 99:99:99 00-00-00 00:00:00 
                             X1.51 99:99:99 00-00-00 00:00:00 
                             X1.51 99:99:99 00-00-00 00:00:00 

Like bug #291613 this symlink attack allows (over)writing files owned by
group games.

There's also the possiility of providing a xshisen.scores file
that overflows a buffer or something in the code that reads the high score
file. I don't see any overflows in that code offhand, but I didn't look very
hard.


My gut feeling after this little audit is that xshisen is not written
securely and should not be made setgid on a modern unix system. The
easiest fix seems to me to be removong the global high score file and
removing the sgid bit.

-- System Information:
Debian Release: 3.1
  APT prefers unstable
  APT policy: (500, 'unstable')
Architecture: i386 (i686)
Kernel: Linux 2.4.27
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8)

Versions of packages xshisen depends on:
ii  libc6                    2.3.2.ds1-20    GNU C Library: Shared libraries an
ii  libgcc1                  1:3.4.3-7       GCC support library
ii  libice6                  4.3.0.dfsg.1-10 Inter-Client Exchange library
ii  libsm6                   4.3.0.dfsg.1-10 X Window System Session Management
ii  libstdc++5               1:3.3.5-6       The GNU Standard C++ Library v3
ii  libx11-6                 4.3.0.dfsg.1-10 X Window System protocol client li
ii  libxaw7                  4.3.0.dfsg.1-10 X Athena widget set library
ii  libxmu6                  4.3.0.dfsg.1-10 X Window System miscellaneous util
ii  libxpm4                  4.3.0.dfsg.1-10 X pixmap library
ii  libxt6                   4.3.0.dfsg.1-10 X Toolkit Intrinsics
ii  xlibs                    4.3.0.dfsg.1-10 X Keyboard Extension (XKB) configu

-- no debconf information

-- 
see shy jo

Attachment: signature.asc
Description: Digital signature

Reply via email to