Linberto v1.0.2 (Q-Bert linux clone) can overwrite any file on the system, via insecure use of /tmp.
6c7927b9fd086ea0c82ab43be5519e598d06858818773d8713d6cdf708f9508a
Vulnerability: Any user can overwrite any file in the system.
title=Linberto v1.0.2 (Q-Bert clone)
author=diego@grigna.com (Diego Javier Grigna)
system=Linux, svgalib
foundby=grampae@netwurx.net (Grampa Elite)
Overview: Linberto under default installation creates screenshots under
the /tmp directory when the user presses F1. Take a look at this snippet from
the installation docs.
-------------------------------begin-screenshot.txt----------------------------
When you press F1 anywhere when running the game, a screen shot
of the current screen will be saved to the directory LINBERTO_SCREENSDIR
which is (by default in the Makefile) /tmp/.
The program makes two files:
LINBERTO_SCREENSDIR/linbertossXXXX.raw ---> Which contains the image data
(the byte of each pixel).
and
LINBERTO_SCREENSDIR/linbertossXXXX.pal ---> Which contains the palette in
the format:
"Color index, Red, Green, Blue\n"
The "XXXX" in the filename is a number from 0000 to 9999. Each time a
screen shot is made, the program will try to use the lowest possible
number (0000 by default) if that file exists that number will be incre-
mented by one, until a non existing filename is found.
-------------------------------end-screenshot.txt------------------------------
The problem is that it does not check to see if the file linbertossXXXX.pal
is currently there as Diego says it does, and follows symlinks. Linberto is not
root suid which actually does not matter, since this is a console game for X
that installs executable only by root.
So as an example we would do a "ln -s /etc/passwd /tmp/linbertoss0000.pal"
or any other file you would like to overwrite, and wait for root to play
linberto and take a screen capture. If the linbertossXXXX.pal and .raw
files are already in /tmp, just use the next number.