xt:commerce 3 Sicherheitslücke bei whos_online.php

Es gibt ja nach wie vor diesen alten und sehr krepeligen Shop namens „xt:commerce 3“. Da er Open Source ist wurde er auch immer mal wieder geforkt. Beispielsweise durch Gambio oder modified
Die aktive Entwicklung wurde allerdings irgendwann 2008 komplett eingestellt. Seitdem gibt es keine wirklichen Patches mehr für diesen Shop.

Nun haben die Entwickler von Gambio eine kleine Lücke entdeckt, die sie als sicherheitskritisch einstufen. Unter ganz speziellen Umständen: Nämlich der Admin ist im Shop eingeloggt und schaut gerade via „Who is online“ die letzten Besucher an und ein Referer hat zufällig eine bösartige Form angenommen, dann könnte der Shop gekapert werden.

Deshalb ist die Lösung auch ganz simpel:
Beim Auslesen des Links aus der Datenbank werden sämtliche HTML Zeichen durch Unicode ersetzt.

    $whos_online['last_page_url'] = htmlentities($whos_online['last_page_url']);

Gut, diese Zeile war im Original noch nicht drin. Deshalb könnte jemand mit dem Anhang „“ tatsächlich versuchen die Session zu übernehmen.
Da allerdings die Who is Online Einträge in der Datenbank nur sehr zeitlich begrenzt gespeichert werden braucht es wirklich sehr großes Glück vom Angreifer, dass er den Admin erwischt und dieser dann auch noch zufällig auf „Who is Online“ vorbeischaut.

Aber deshalb so einen großen Aufschrei zu veranstalten und auf Rückfrage keine genaue Auskunft zu geben ist doch auch lächerlich.

Zitat von Gambio:

wir bitten um Verständnis, dass wir derzeit noch keine Detailinformationen herausgeben können, die möglicherweise zum Ausnutzen der Sicherheitslücke verwendet werden könnten. Wir möchten zunächst allen Shopbetreibern ausreichend Zeit geben, den eigenen Shop gegen mögliche Angriffe zu sichern. Anschließend werden wir gern entsprechende Informationen herausgeben

Jetzt wo Heise Online schon darüber berichtete ist das Kind schon in den Brunnen gefallen.
Manchmal ist es sinnvoller die Lücke offensiver zu berichten, dann können andere Security Nerds die Lücke auch einschätzen.

Allgemein ist zu empfehlen xt:commerce 3 nicht mehr zu verwenden. Der Code macht sowieso nicht allzu viel Spaß und ist sowieso sehr schwer auf aktuellen Servern zu betreiben. Es wird nämlich noch PHP 5.2 benötigt und das wird von großen Anbietern wie 1und1, Strato oder auch Hetzner nicht mehr angeboten.
Aber domainfactory bietet die alte PHP 5.2 noch an und die haben auch in ihrem Blog recht schnell über die „Lücke“ berichtet.

Toffifee Skript Code auf Github

Nachdem ich in den letzten Jahren nicht mehr so richtig zum Coden gekommen bin und auch mal der Welt etwas Gutes tun wollte, gibt es eben den Code auf zum Toffifee-Skript auf Github.
Falls es jemand weiter entwickeln möchte (beispielsweise mit schönem AJAX), kann er das dann gerne tun. Eine spezielle Lizenz habe ich erstmal nicht festgelegt.

Es war auf jeden Fall mal eine gute Übung um Git auszutesten. Die Dateien mit Passwörtern habe ich natürlich herausgelassen, meinen Webspace möchte ich ja noch eine Weile behalten. ;)

Feeds lesen mit der Owncloud News App

Google Reader ist ja nun schon eine Weile tot. Das hat mich anfangs eigentlich gar nicht so mitgenommen. Ich hatte zwar einen Account dort und auch ein paar Feeds drin, aber so so richtig zum Lesen bin ich nie gekommen.
Ca. im Mai kam dann Owncloud mit einer eigenen News App daher. Sie funktionierte eigentlich von Anfang an recht gut. Nur das Update der Feeds war bisher immer die Archillesferse der App. Entweder man musste andauernd in der Weboberfläche herum klicken um damit den AJAX Cron zum Laufen zu bekommen. Oder mittels http://deine-owncloud.com/cron.php mehrmals den Cronjob anschmeißen. Nach 4 Mal wurde dann endlich auch die Feedupdate Funktion angetriggert.

Wer jetzt sowieso immer nur seine News in der Weboberfläche gelesen hat, konnte dann noch mit dem AJAX Cron leben. So wurden dann eben während dem Lesen die Feeds upgedatet. Doch dann kam die Zeit als ein fröhlicher Entwickler die News-iOS-App hervorbrachte. Nämlich iOC-News. Damit musste dann dringend ein vernünftiger Cronjob her. Nun habe ich die letzten Tage mal wieder ins News-App Repository reingeschaut und festgestellt, dass die News App endlich ein kleines Python Update Skript enthält. Also mal via SSH auf meinen Webspace eingeloggt, Python angeworfen und ausprobiert. Und hurra: Das Skript funktioniert und alle Feeds werden zuverlässig upgedatet. Das ist besonders schön um endlich auch mal auf dem iOS Gerät die aktuellen Feeds zu lesen.

Ich bin ja ein bisschen Binärgewitter geprägt und da wird sehr oft mal Python gelobt. Also was lernen wir daraus. Nimm einfach ein bisschen Magie, stecke es in Python und schon funktioniert alles wunderbar.

Seit gestern läuft das Skript als Cronjob auf meinem Webserver und aktualisiert zuverlässig alle Feeds. Je nachdem wie schön euer Cronjob funktioniert muss man den Update Befehl in eine Datei stecken mit folgendem Inhalt (User und Passwort habe ich weggelassen):

#!/bin/sh
python3 /PFAD_VOM_ROOT/owncloud/apps/news/bin/updater.py --user HIER_DEN_OWNCLOUD_USER_EINTRAGEN --password HIER_DAS_OWNCLOUD_PASSWORT_EINTRAGEN https://deine.owncloud.de

Das Ganze dann als Datei „owncloud.sh“ (oder anders, aber die Endung .sh macht Sinn, da es ein Shellskript ist) speichern und im Cronjob Menü eures Hosters eintragen.

Installieren tut man die App ganz einfach über das App-Menü in Owncloud. WICHTIG: Owncloud muss mindestens in Version 5.0.6 oder höher vorliegen.
Da die News App auch öfters mal weiterentwickelt wird, macht es auch Sinn ab und an mal ins App-Menü reinzuschauen und die News App anzuklicken. Wenn dort Update steht, einfach draufklicken. Das Update hat bei mir zumindest die letzten Male reibungslos funktioniert.

Eine genauere Anleitung (auf Englisch, was aber jeder einigermaßen verstehen sollte) gibt es im README. Da sind auch einige Hinweise aufgelistet, die man beachten sollte.

Die iOC News App gibt es im offiziellen Appstore. Die fehlerbereinigte Version aber aktuell auch noch hier. Die Seite des Entwicklers gibt es hier.

ToDo: Toffifee Buchstaben Generator

Vor einigen Jahren war ich noch ziemlich jung und etwas naiv, was die Programmierung angeht. Damals war ich auch ein großer Fan von den Toffifees und habe mal alle Buchstaben und Zahlen des Alphabets aus Toffifees nachgebaut und abfotografiert. Von nun war die Idee geboren und es gab den Toffifee Generator. Der Code ist anno 2006 entstanden und läuft (lief und läuft wieder) seitdem tadellos. 2008 hab ich mir im Anflug an Nostalgie auch meine alte Seite nochmal angepasst und somit auch den Toffifee Code erweitert.
Doch in den letzten Tagen habe ich mich gewundert, warum das Log plötzlich nicht mehr weiterzählt. Grund dafür war, dass die Logfiles vollgelaufen waren. Die Tage hatten die 2MB erreicht und somit konnte das Skript die Files nicht mehr schnell genug lesen und schreibt seit November 2011 keine Eingaben mehr rein. :)
Da ist schon der erste Punkt: Ich hatte damals noch keine Möglichkeit Datenbanken zu verwenden und so habe ich mir mit Textdateien ausgeholfen. Das funktioniert bis 3000 Zeilen auch einwandfrei, aber dann wird es irgendwann zu viel… Schließlich muss die Datei auch immer ausgegeben werden.

Ich hab mir also mal die Dateien vom Server geschnappt und wollte sie mit GEdit (auf Windows würde man Notepad++ sagen) öffnen und dieser ist damit erstmal ins Schnaufen gekommen. Danach mal via Konsole ins Verzeichnis gehüpft und die Datei mit vi geöffnet. Nach langem: „/0x“ und „dd“ und abschließendem „:wq!“ habe ich zuerst einmal die Dateien gekürzt und die sinnlosen 0xE12335 Eingaben herausgelöscht. Da hat vermutlich irgendein Bot in der Vergangenheit gemeint, dass ich hinter dem Skript eine Datenbank habe, die man mal auf Sicherheitslücken abklopfen kann. Stattdessen wurden einfach immer sinnlose Logeinträge fabriziert. Aber nun sind die Logfiles auch wieder entsprechend kleiner und hängen auch wieder Aktuelle Einträge an.

Doch nun mal eine Frage an meine Leser:
– Wie würdet ihr das Toffifee Skript neu machen?
– Macht so eine Log-DB Sinn?

Mir schwebt so mal folgendes vor: Eine Eingabe mit einer Art Suchvorschlägen. So wie Google das zum Beispiel macht. Vielleicht auch das Ergebnis schon während der Eingabe anzeigen. Via Ajax kann man doch die Daten schnell vorladen lassen…
Die Möglichkeit kleine Rechnungen (1*1+2-3/3 = 2) einzutippen und auszugeben wäre auch cool. Mit PHP und meinem Code ist das irgendwie schwierig.

Welche Sprache nimmt man dafür am besten? Momentan ist alles in relativ schmalem PHP Code. Nimmt man dafür am besten Javascript oder geht auch was anderes?