Sicherheitslücke: xt:commerce XSS Exploit

23. September 2008

[MajorSecurity Advisory #54]xt:Commerce - Cross Site Scripting and Session Fixation Issues

Details
=======
Product: xt:Commerce
Security-Risk: moderated
Remote-Exploit: yes
Vendor-URL: http://www.xtcommerce-shop.com/
Vendor-Status: informed
Advisory-Status: published


Credits
============
Discovered by: David Vieira-Kurz
http://www.majorsecurity.de

Affected Products:
----------------------------
xt:Commerce 3.04 and prior

Original Advisory:
============
http://www.majorsecurity.de/index_2.php?major_rls=major_rls54

Introduction
============
xt:Commerce is one of the leading webshop systems based on the eCommerce Engine.

More Details
============

1. Cross Site Scripting:
----------------------
1.1 Input passed directly to the "keywords" parameter in "advanced_search_result.php" is not properly sanitised before being returned to the user.
This can be exploited to execute arbitrary HTML and script code in a user's browser session in context of an affected site.

1.2 PoC:
============
/advanced_search_result.php?keywords=/>"<script>alert(15)</script>&x=1&y=1

1.3 Workaround
=============
Edit the source code to ensure that input is properly sanitised.
You should work with "htmlspecialchars()" or "htmlentities()" php-function to ensure that html tags
and javascript code are not going to be executed.

Example:
$keywords = htmlentities($_POST['keywords']);
$keywords = htmlspecialchars($_GET('keywords'));
?>

2. session fixation:
---------------------
The "XTCsid" parameter can be set to a malicious and arbitrary value.

2.1 Description:
In a session fixation attack, the attacker fixes the user's session ID before the user even logs into the target server.
After a user's session ID has been fixed, the attacker will wait for them to login.
Once the user does so, the attacker uses the predefined session ID value to assume their online identity.

2.2 PoC:
============
https://localhost/xtcommerce304/shopping_cart.php/XTCsid/15031988

2.3 Workaround:
============
1. Do not accept session identifiers from GET / POST variables.
2.Regenerate SID on each request.
3. Accept only server generated SID:
One way to improve security is to not accept session identifiers not generated by server.

if ( !isset( $_SESSION['SERVER_GENERATED_SID'] ) ) {
session_destroy(); // destroy all data in session
}
session_regenerate_id(); // generate a new session identifier
$_SESSION['SERVER_GENERATED_SID'] = true;

MajorSecurity
================
MajorSecurity is a German penetrationtesting and security research company which focuses
on web application security. We offer professional penetrationtestings and reliable proof
of concepts.
You will find more Information about MajorSecurity at
http://www.majorsecurity.de/

4 Responses

  1. Sicherheitslücke: xt:commerce XSS Exploit...

    betrifft alle 3.04 und ältere Versionen....

  2. Das betrifft aber nicht die Version 3.0.4 SP2.1, dort wurde das von xt:Commerce schon lange behoben.

    Da hatte der Tester wohl keine aktuelle version genommen.

  3. Und der zweite Punkt lässt sich imho immer ausnutzen, da hilft auch der generierte Sessionwert nix, den kann der Angreifer ja vorher ebenfalls durch simplen Seitenaufruf generieren. Und das man keine GET/POST-IDs akzeptieren soll, ist ja schön, aber auf Systemen mit deaktivierten Cookies wäre der Shop dann nicht mehr nutzbar...

  4. also nur die älteren Versionen? :-/

  5. Kommentar hinzufügen

    Der Inhalt dieses Feldes wird nicht öffentlich zugänglich angezeigt. Wenn Du eine Gravatar Account hast, wird dieser verwendet.