[waraxe-2010-SA#079] - Reflected XSS in Coppermine 1.5.10 ============================================================================== Author: Janek Vind "waraxe" Date: 28. December 2010 Location: Estonia, Tartu Web: http://www.waraxe.us/advisory-79.html Affected Software: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Coppermine is a multi-purpose fully-featured and integrated web picture gallery script written in PHP using GD or ImageMagick as image library with a MySQL backend. http://coppermine-gallery.net/ Affected versions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Tests were conducted against Coppermine version 1.5.10. Research showed, that all versions in 1.5.x branch, including 1.5.1_alpha, are vulnerable as well. ############################################################################### 1. Reflected XSS in "help.php" ############################################################################### Reason: failure to sufficiently sanitize user-supplied input data Attack vector: user submitted GET parameters "h" and "t" Preconditions: none Source code snippet from vulnerable script "help.php": -----------------[ source code start ]--------------------------------- if ($superCage->get->keyExists('base')) { $base = $superCage->get->getInt('base'); .. if ($superCage->get->keyExists('h')) { $header = $superCage->get->getEscaped('h'); .. if ($superCage->get->keyExists('t')) { $text = $superCage->get->getEscaped('t'); .. if ($base != '') { // content of header and text have been base64-encoded - decode it now $header = @unserialize(@base64_decode($header)); $text = @unserialize(@base64_decode($text)); } .. if ($header != '') { $content = '

'.$header.'

'; $content .= $text; .. echo <<< EOT $string $content -----------------[ source code end ]----------------------------------- As seen above, user-provided data is base64 decoded and then used for html output. No sanitization of potentially dangerous data, therefore Reflected XSS security vulnerability exists in specific php script. Example exploit: http://localhost/cpg.1.5.10/help.php?base=1 &h=czozMzoiPHNjcmlwdD5hbGVydCgnaGVhZGVyJyk7PC9zY3JpcHQ%2bIjs &t=czozMToiPHNjcmlwdD5hbGVydCgndGV4dCcpOzwvc2NyaXB0PiI7 ############################################################################### 2. Reflected XSS in "searchnew.php" ############################################################################### Reason: failure to sufficiently sanitize user-supplied input data Attack vector: user submitted POST parameter "picfile_*" Preconditions: 1. user must be logged in as Coppermine admin 2. XSS payload charset is somewhat limited, little bit of creativity needed Source code snippet from vulnerable script "searchnew.php": -----------------[ source code start ]--------------------------------- if (!GALLERY_ADMIN_MODE) { cpg_die(ERROR, $lang_errors['access_denied'], __FILE__, __LINE__); .. if ($superCage->post->keyExists('insert')) { if ($superCage->post->keyExists('pics')){ $pics = $superCage->post->getAlnum('pics'); .. foreach ($pics as $pic_id) { .. $picfile = $superCage->post->getAlnum('picfile_'.$pic_id); $pic_file = base64_decode($picfile); .. $file_name = basename($pic_file); .. echo ''.$file_name.'' -----------------[ source code end ]----------------------------------- As seen above, user-provided POST parameter "pics_*" is base64 decoded and then processed by php function basename(). Finally it is used for html output. As in previous vulnerability, attacker is able to use base64 encoding for XSS payload obfuscation. What differs from previous case, is the use of basename() function. Thanks to this function, XSS payload charset is somewhat limited. Still, specific Reflected XSS vulnerabilty is exploitable. Example exploit (Coppermine admin privileges needed): -----------------------------------------------------------------------
----------------------------------------------------------------------- Greetings: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Greets to ToXiC, y3dips, Sm0ke, Heintz, slimjim100, pexli, zerobytes, Chb, vince213333, to all active waraxe.us forum members and to anyone else who know me! Contact: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ come2waraxe@yahoo.com Janek Vind "waraxe" Waraxe forum: http://www.waraxe.us/forums.html Personal homepage: http://www.janekvind.com/ Random project: http://albumnow.com/ ---------------------------------- [ EOF ] ------------------------------------