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.