Kontakt

Kontaktieren Sie uns gerne

+49 241 510081-0
kontakt@redteam-pentesting.de
Kontaktformular
RedTeam Pentesting HeaderRedTeam Pentesting HeaderRedTeam Pentesting HeaderRedTeam Pentesting HeaderRedTeam Pentesting HeaderRedTeam Pentesting HeaderRedTeam Pentesting HeaderRedTeam Pentesting Header

Cross-site Scripting in Securimage 3.6.2

RedTeam Pentesting discovered a cross-site scripting (XSS) vulnerability in the Securimage CAPTCHA software, which allows attackers to inject arbitrary JavaScript code via a crafted URL.

Details

  • Product: Securimage
  • Affected Versions: >= 3.2RC1
  • Fixed Versions: 3.6.4
  • Vulnerability Type: Cross-site Scripting
  • Security Risk: high
  • Vendor URL: https://www.phpcaptcha.org/
  • Vendor Status: fixed version released
  • Advisory URL: https://www.redteam-pentesting.de/advisories/rt-sa-2016-002
  • Advisory Status: published
  • CVE: GENERIC-MAP-NOMATCH
  • CVE URL: https://cve.mitre.org/cgi-bin/cvename.cgi?name=GENERIC-MAP-NOMATCH

Introduction

“Securimage is an open-source free PHP CAPTCHA script for generating complex images and CAPTCHA codes to protect forms from spam and abuse. It can be easily added into existing forms on your website to provide protection from spam bots. It can run on most any web server as long as you have PHP installed, and GD support within PHP. Securimage does everything from generating the CAPTCHA images to validating the typed code. Audible codes can be streamed to the browser with Flash for the vision impaired.”

(from the project’s homepage)

More Details

The Securimage download package and GitHub repository include several example scripts to demonstrate the usage of the library. Among these scripts is the file example_form.ajax.php. It returns JavaScript code that includes an unencoded value from the variable $_SERVER[‘PHP_SELF’] directly embedded into the website.

In Securimage versions from 3.2RC1 to 3.5 the following code is vulnerable:

function processForm()
{
    new Ajax.Request('<?php echo $_SERVER['PHP_SELF'] ?>', {
        method: 'post',
        parameters: $('contact_form').serialize(),
        onSuccess: function(transport) {

In Securimage versions from 3.5.2 to 3.6.2 the following code is vulnerable:

function processForm()
{
        jQuery.ajax({
                url: '<?php echo $_SERVER['PHP_SELF'] ?>',
                type: 'POST',
                data: jQuery('#contact_form').serialize(),
                dataType: 'json',
        }).done(function(data) {

The problem here is that the value of the variable $_SERVER[‘PHP_SELF’] can, depending on the configuration of the web server, often be manipulated by an attacker to include special characters like apostrophes.

Proof of Concept

The following URL can be used to demonstrate the vulnerability for Securimage versions from 3.2RC1 to 3.5 on with a vulnerable web server configuration:

http://www.example.com/example_form.ajax.php/’);}alert(‘RedTeam Pentesting’);a=function(){a(’

Securimage versions from 3.5.2 to 3.6.2 can be exploited with the following URL:

http://www.example.com/example_form.ajax.php/’});}alert(‘RedTeam Pentesting’);a=function(){a({x:’

The result is a notification showing the text “RedTeam Pentesting”. The value of the variable $_SERVER[‘PHP_SELF’] is embedded in verbatim into the HTML source code of the resulting web page.

Workaround

The file example_form.ajax.php should be deleted from the Securimage directory on a web server.

Fix

Update to version 3.6.4.

Security Risk

This security vulnerability is rated as a high risk. It allows executing arbitrary JavaScript code in users’ browsers if they access URLs prepared by attackers. This provides many possibilities for further attacks against these users. Since Securimage is usually used as a software library to provide CAPTCHA functionality for web applications, the vulnerability could be used to exploit all web applications hosted on the same domain.

Timeline

  • 2016-02-03 Vulnerability identified
  • 2016-02-12 Customer approved disclosure to vendor
  • 2016-02-23 CVE number requested
  • 2016-02-24 CVE number not assigned, “non-prioritized product”
  • 2016-03-02 Vendor contacted
  • 2016-03-03 Vendor releases fixed version
  • 2016-03-22 Advisory released

References

RedTeam Pentesting GmbH

RedTeam Pentesting offers individual penetration tests performed by a team of specialised IT-security experts. Hereby, security weaknesses in company networks or products are uncovered and can be fixed immediately.

As there are only few experts in this field, RedTeam Pentesting wants to share its knowledge and enhance the public knowledge with research in security-related areas. The results are made available as public security advisories.

More information about RedTeam Pentesting can be found at: https://www.redteam-pentesting.de/