XSS in Custom Variables


#1

Hi
Ich hab gerade ein ernsthaftes Problem und hoffe ihr könnt mir meine Sorgen nehmen. Ich arbeite seit einigen Wochen mit Piwik und habe inzwischen ein eigenes PlugIn erstellt. Dieses PlugIn liest aus den Custom Variables bestimmte Werte aus und zeigt verschiedene Tabellen/Daten dazu an. Unter anderem werden auch die Werte aus den Custom Variables angezeigt.
Da ich mich seit zwei Tagen mit dem Thema Sicherheit beschäftige kam ich eben spontan auf die Idee in meinem Tracking Code mal was anderes reinzuschreiben:
try {
var piwikTracker = Piwik.getTracker(pkBaseURL + “piwik.php”, 1);
piwikTracker.setCustomVariable(1, “abt”, “alert()” );
piwikTracker.setCustomVariable(2, “abv”, “Variant2” );
piwikTracker.trackPageView();
piwikTracker.enableLinkTracking();
piwikTracker.trackGoal(1);

} catch( err ) {…}
Ergebnis: In der später angezeigten HTML Tabelle steht auf einmal ein ausführbarer Code!
Wie bitte? Hab ich etwas übersehen? Ein PlugIn nicht aktiviert? Oder hab ich eben echt ein Cross-Side-Script in 30 Sekunden eingebaut?!
Ihr würdet mir echt helfen, wenn ihr mir sagen könnt das das nicht normal ist. Denn ansonsten kann ich die arbeit der letzten Wochen wegschmeißen und mir ein neues Tool suchen…
Gruß Nana


(Peterbo) #2

Die Datatable Mechanik von Piwik escaped alle Felder bei der Ausgabe. Es handelt sich also nicht um ausführbaren Code. Dies muss bei eigenen Plugins, die z.B. direkt auf die DB zugreifen (und nicht die internen Datatable-Wrapper verwenden) manuell gemacht werden.

Wenn Hilfe nötig ist, bitte einfach hier melden.

Grüße
~Peter


#3

Danke für die Antwort.
In meinem Script holte ich per select Anweisung die Custom Variables von der Piwik Datenbank. Diese zeigt ich dann in einer Dropbox an. Dabei gab es natürlich Fehler, wenn zuvor im Javascript piwikTracker.setCustomVariable(1, “abt”, “alert()” ); steht. Mittels der PHP Funktion htmlentities ( PHP: htmlentities - Manual ) konnte ich das Problem bei der Ausgabe beseitigen.
Gruß


(Peterbo) #4

Hallo,

genau das ist das richtige Vorgehen. Sollte eine Template-Engine am Werke sein, kann natürlich auch die Engine eigene Escape-Mechanik verwendet werden.

Viele Grüße