Multiple vulnerabilities in phpMyVisites Application : phpMyVisites prior to 2.2 stable Release Date : 11 February 2007 Author : Nicob Abstract : ========== Several vulnerabilities were identified in phpMyVisites. This software is "a free and powerful open source (GNU/GPL) software for websites statistics and audience measurements" : http://www.phpmyvisites.net/ Impacted versions : =================== Versions 2.2 stable (released on November 10, 2006) and newer are not impacted by these vulnerabilities. Notes : ======= - only one PHP file (phpmyvisites.php) need to be remotely accessed by visitors. A paranoid installation will allow remote access only to this file (for example via htaccess). So my brief code audit focused on this very file. - external libraries (smarty, phpMailer, PEAR, ...) are embedded in any phpMyVisites install. Some vulnerabilities in these libraries were patched in version 2.2 stable too. Vulnerabilities : ================= - "HTTP Response Splitting" via the "url" parameter (triggered when the "pagename" parameter begins by "FILE:") - "Cross Site Scripting" in function GetCurrentCompletePath() : http://your_site/your_dir/phpmyvistes.php/AAA/BB/CCC - "Local file include" via the "pmv_ck_view" cookie parameter. Part of this cookie is used to construct a file path, which is then used in a require() call : if( !isset($this->file) || !strpos( $this->file, 'utf-8.php') || strpos( $this->file, '..') ) { $this->file = $this->getNearestLang(); } require LANGS_PATH . "/" . $this->file; In this code, the third check is "FALSE" if the strpos() call returns "FALSE" _or_ "0". So "../../../../../tmp/utf-8.php" would be accepted. Nicob