Archive for the ‘Programmierung’ Category

XSS vulnerability on vimeo.com

Last week I discovered a cross-site scripting vulnerability on the famous video platform vimeo.com. It is based in the search-module, which uses some kind of CSRF-protection (which doesn’t work pretty well, by the way). The problem is that search-links are only valid once and when you try to request the page a second time, an error will be raised. So, what’s the problem? Vimeo outputs the search term unfiltered – I guess you know how that story goes…

The sad thing about this bug is that I reported it seven days ago to the vimeo-team but didn’t get any response yet (except for an email-address via their team’s twitter-account). I’ve also recorded a screencast demonstrating the problem. Maybe some publicity will get the team to fix the bug.

Vimeo XSS vulnerability from Lukas Klein on Vimeo.

Note: The “feature” doesn’t handle old URLs like I said in the video, it’s basically something like a CSRF-protection (whyever), so that the link only works one time.

XSS in Etherpad

Es ist wieder soweit, es gibt von einer XSS-Lücke zu berichten. Diesesmal aber keine spezielle Website, sondern gleich ganz viele. Nämlich alle, die Etherpad einsetzen. Das Team ist informiert, nur reagieren tut keiner. Die offizielle Seite schliesst ja eh bald.

Entdeckt wurde der Bug übrigens von @NineBerry im Piratenpad. Also, machen wir es kurz, die Lücke befindet sich in der Datei /src/static/js/broadcast_slider.js in Zeile 145. Dieser Codebereich sorgt für die Ausgabe der Autorenliste im Timeslider. Unter anderem wird dort für Autoren, die ihren Namen angegeben haben, folgender Code ausgeführt:

        var nametd = $('<td></td>');
        nametd.html(author.name || "unnamed");

Wie man in der zweiten Zeile sehen kann, wird der author.name unescaped als HTML in das Element gepackt.

An alle, die einen Etherpad Server betreiben: Ihr müsst nur diese Zeile ändern in

        nametd.text(author.name || "unnamed");

, also aus dem .html ein .text machen! Dann wird der Name nicht mehr ungefiltert ausgegeben.

Google Checkout und dubiose iPhonianer

Hui, es ist da, das iPhone OS 4! Also zumindest die Featurelist und die Developer-Version. Um letztere dreht sich auch dieser Blogpost, zumindest als Einleitung. Ach whatever, jedenfalls hat gerade @michelb einen Link auf Twitter getweetet, der zu einem “UDID activation service” für das erwähnte iPhone OS 4 führt. Laut der Seite kann man sich bei denen sein iPhone für die OS4-Beta freischalten lassen und so die $79 Developer-Account-Gebühr bei Apple sparen. Aber nur auf den ersten Blick.

Auf den zweiten springt einem nämlich folgender Textausschnitt ins Auge:

An Example UDID is: SXQncyB0aW1lIGZvciBJViB0byB1bmxlYXNoIGl0J3MgcG93ZXJzLg==

was daran so auffällig ist? Die =-Zeichen, die auf eine Base64-Verschlüsselung hindeuten. Entschlüsselt steht dort dann

It’s time for IV to unleash it’s powers.

wer oder was auch immer diese[r/s] “IV” ist. Und auch auf der FAQ-Seite gibt es so einige komische Sachen. Als erstes stellt man fest, dass der auf den ersten Blick kostenlos aussehende Service garnicht so kostenlos ist:

We do all this for a one-time fee of $10.

Tjoa, aus der Traum vom unkomplizierten kostenlosen iPhone OS 4. Weiterhin steht dort noch

Q. I live in the U.S. Do I have to use ATT to use Beta 4.0?
A. Absolutely. Failure to do so will give you a $500 paperweight.

äh ja, wünschen wir uns nicht alle einen $500 Briefbeschwerer?

Ok, von der Seite lassen wir dann mal besser die Finger. Aber etwas anderes ist doch noch ganz interessant: Die Seite nutzt Google Checkout. Ich hab das noch nie benutzt und weiß auch recht wenig darüber, allerdings ist mir folgender Codeschnippsel ins Auge gesprungen:

<input name="item_price_1" value="10.00" type="hidden">
<input name="item_currency_1" value="USD" type="hidden">

Moment, kann man da nicht, mit Firebug… Ja, kann man:

Secure checkout with Google

(klick zum größer machen)

Und schon wär’ man Millionär oder wie? Ich kenn mich wie gesagt mit Google Checkout nicht so wirklich aus, hat da einer Erfahrungen? Beim Heise Live-Hacking auf der CeBit hab’ ich mal erfahren, dass jeder weitere Schritt jetzt nicht mehr so ganz legal wäre, also lass ich das mit dem Ausprobieren mal lieber.

Django auf dem iPod touch

Einige von euch werden wohl einen iPod touch bzw. ein iPod besitzen. Und einige werden ihn/es gejailbreaked haben. Dann kann man nämlich so einige lustige Sachen machen. Die beiden nützlichsten Programme sind – wir ich finde – Terminal und openSSH. Beide jeweils über Cydia installierbar. Nachdem ich das “virtuelle Innenleben” meines iPods gründlich untersucht hatte, dachte ich: “Hey, was ist mit Django?”. Gedacht, getan. Als erstes habe ich über Cydia Python installiert. Dann habe ich mir den Django Tarball heruntergeladen und auf dem Touch extrahiert. Danach habe ich einfach “python setup.py install” aufgerufen – wie gewohnt. Gegen meine Erwartungen verlief alles reibungslos ohne Fehler. Als danach auch noch das Anlegen eines Projekts und das Starten des Dev Servers geklappt hat, wusste ich echt nicht mehr ob ich nun träume oder nicht.

Meine Session dokumentiert:

Lukas–iPod:~ root# pwd
/var/root
Lukas–iPod:~ root# cd Django-1.0.2-final/
Lukas–iPod:~/Django-1.0.2-final root# ls
AUTHORS  INSTALL  LICENSE  MANIFEST.in  PKG-INFO  README  django/  docs/  examples/  extras/  scripts/  setup.cfg  setup.py
Lukas–iPod:~/Django-1.0.2-final root# python setup.py install
running install
running build
running build_py
creating build
[..]
running install_egg_info
Writing /usr/lib/python2.5/site-packages/Django-1.0.2_final-py2.5.egg-info
Lukas–iPod:~/Django-1.0.2-final root# python
Python 2.5.1 (r251:54863, xx/xx/xx, xx:xx:xx)
[GCC 4.2.1 (Based on Apple Inc. build 5555)] on darwin
Type “help”, “copyright”, “credits” or “license” for more information.
>>> import django
>>> django.VERSION
(1, 0, 2, ‘final’, 0)
>>> exit()
Lukas–iPod:~/Django-1.0.2-final root# cd ..
Lukas–iPod:~ root# ls
Django-1.0.2-final/  Library/  Media/
Lukas–iPod:~ root# mkdir djangoprojects
Lukas–iPod:~ root# cd djangoprojects
Lukas–iPod:~/djangoprojects root# django-admin.py startproject firsttest
Lukas–iPod:~/djangoprojects root# cd firsttest/
Lukas–iPod:~/djangoprojects/firsttest root# ls
__init__.py  manage.py  settings.py  urls.py
Lukas–iPod:~/djangoprojects/firsttest root# ./manage.py runserver 0.0.0.0:8000
-sh: ./manage.py: Permission denied
Lukas–iPod:~/djangoprojects/firsttest root# chmod +x manage.py
Lukas–iPod:~/djangoprojects/firsttest root# ./manage.py runserver 0.0.0.0:8000
Validating models…
0 errors found

Django version 1.0.2 final, using settings ‘firsttest.settings’
Development server is running at http://0.0.0.0:8000/
Quit the server with CONTROL-C.
[21/Feb/2009 20:24:05] “GET / HTTP/1.1″ 200 2059

Und ein “Beweisbild” gibt es auch noch:

EinsLive Ticker Dashboard Widget

ELTDW. Geile Abkürzung. Nein, die ist unpraktisch. Jedenfalls habe ich heute erste Gehversuche mit Dashcode gemacht und herausgekommen ist ein EinsLive Dashboard Widget, welches den Ticker der Website anzeigt. Dadrin stehen so gut wie immer die aktuell spielenden Titel.

Machen wir es kurz, und Bilder sagen eh mehr als 1000 Worte.

Eine schöne Rückseite um die Einstellungen vorzunehmen gibt es natürlich auch:

Aber denkt dran: Die Aktualisierungsrate sollte so hoch wie möglich gewählt sein, um die 1Live Server zu entlasten. 55 Sekunden sind sowohl bei dem Widget als auch auf einslive.de Standard.

Fast hätte ich ihn vergessen: Der Download-Link!

Mein Weg zum Mac

Mh, womit soll ich anfangen? Also erstmal: ich bin nicht mit Apple gross geworden. Angefangen hat alle damals, als ich noch seehr jung war. Ich hatte einen Windows 98 PC, mit dem ich allerlei Spiele gespielt hatte. Mit der Zeit fand ich dies jedoch langweilig und wollte mehr. Also habe ich angefangen, eigene Spiele zu programmieren. Nachdem ich von der Spiele- zur Webprogrammierung gekommen war, sagte ich Windows für immer goodbye und bin auf Ubuntu Linux umgestiegen. Ich war sehr beeindruckt von den vielfältigen Möglichkeiten der Shell und UNIX allgemein. Ich fand das ganze sogar so toll, dass ich nie wieder etwas anderes wollte.

Schon immer war ich jedoch von der Apple-Welt fasziniert. Diese perfekten Formen und diese intuitive Bedienung, doch leider schien dies mangels finanzieller Mittel nie erreichbar.

Als das iPhone raus kam, war ich mehr als fasziniert. Nur leider gab/dibt es da ja diesen verzwickten Vertrag. Meine Verzweifelung löste sich, als Apple den iPod touch vorstellte. Ich war mir nie so sicher. Der iPod touch sollte mein erstes Apple Produkt werden. Jedoch sind 300€ auch nicht gerade wenig und “mal eben” kann ich mir das auch nicht leisten. Also musste ich die paar Monate bis Weihnachten warten. Und dann war es so weit: Unter dem Tannenbaum lag ein brandneuer iPod touch mit 8GB. Ich war wirklich fasziniert von diesem Bedienkonzept, und ich wusste sofort: Ich will mehr!

Meine Wahl viel auf den Mac Mini. Warum? Ganz einfach: Weil er der günstigste Mac ist, und weil er für meine Ansprüche voll und ganz reicht. Das einzige Problem: Auch 500€ sind für Schüler nicht so einfach verfügbar. Doch nach langem sparen war es so weit: An meinem 15ten Geburtstag war er da: Mein erster Mac!

Alle meine Erwartungen wurden erfüllt, und auch die “Parallelität” (mir fällt das Wort nicht ein…) zu Linux war durch das Terminal gegeben. Ich habe mich sehr schnell heimisch gefühlt und kam mit allem sofort klar.

Der nächste Meilenstein in meiner Apple-Geschichte wird wohl zu Weihnachten das MacBook.

Warum schreibe ich das hier? Ganz einfach: Ich würde mich freuen, wenn ich den iPod nano von der Apfelblog.ch Verlosung gewinnen würde :)

Der Bundestag und XSS

“Gesucht, gefunden!” – so lautet das Motto der Suchfunktion von mitmischen.de – einem Webportal von dem deutschen Bundestag.

Vor ein paar Tagen bin ich mal wieder auf XSS-Suche gegangen – und, wie im Motto – bin ich schnell fündig geworden. Es handelte sich um eine Schwachstelle in der angesprochenen Suchfunktion. Aber da ich ja ein Whitehat bin, habe ich die Lücke zuerst gemeldet und wollte auf eine Reaktion abwarten, bevor ich sie veröffentliche.

Vor 3 Tagen dann erhielt ich eine Antwort: Die Lücke wurde an die Programmierer weitergeleitet. Oha, solch eine Reaktion habe ich von einem Portal in der Größe nicht erwartet. Im Juni diesen Jahres habe ich z.B. eine Lücke im Sat1.de Communitybereich gefunden und gemeldet – bis heute keine Reaktion.

Jedenfalls habe ich gestern nochmal auf mitmischen.de geguckt – und voilá, die Lücke ist zu.

Im Detail handelte es sich z.B. um folgende URL: http://www.mitmischen.de/index.php/Common/Suche/?s_s=formular&s_ss=<script>alert(”XSS!”);</script>

Lang lang ists her…

…Da

  • schrieb ich den letzten Blogpost
  • kündigte Google AdSense for Games an
Und beides wird sich heute ändern.
Vor ungefähr 18 Monaten wurde die Übernahme vom ingame Werbeanbieter adscape durch Google offiziell. Lange Zeit hörte man nicht viel ausser ein paar angeblichen geheimen Tests. Doch vorgestern ging Google an die Öffentlichkeit.

Wie man in dem Video sehen kann erscheint die Werbung nicht “richtig ingame”, sondern während einer Spielpause. Und mit dem Spiel selber hat sie auch nicht viel zu tun. Wo wir gerade beim meckern sind: Wer verlässt schon das Spiel nur um eine Werbewebsite zu sehen?

Im Moment sucht Google noch nach Beta-Testern. “Einzige” Bedingung: Am Tag muss es mindestens 500.000 Spieler geben und mindestens 80% von denen müssen aus den USA kommen.

Mein Fazit: Ich hätte nach 18 Monaten Entwicklungszeit von Google eindeutig mehr erwartet. Da muss Google eindeutig nochmal dran arbeiten. Und wenn ein Spielehersteller überhaupt Werbung in sein Spiel einbindet, sollte er dieses wenigstens kostenlos anbieten.

[via GoogleWatchBlog]

Und täglich grüßt die Alert-Box

Damit meine ich natürlich die JavaScript Alert Box. Verursacht durch eine Cross-Site-Scripting Lücke, versteht sich. Sonst wär’s ja langweilig.

Heute im Angebot: www.stellenanzeigen.de. Von einer so seriös klingenden URL hätte ich irgendwie mehr erwartet. Aber sehr selbst:

http://www.stellenanzeigen.de/stellenangebote/list_unternehmen.asp?unternehmen=%3Cscript%3Ealert(%22XSS!%22);%3C/script%3E

Dies ist besonders gefährlich, da es auf dieser Domain auch einen Login-Bereich gibt, der höchstwahrscheinlich mit Cookies arbeitet. Und selbige kann man eben mit dieser Technik klauen. Nicht gut.

Neues Design der privaten Homepage

So, heute habe ich mich mal wieder kreativ betätigt. Und zwar habe ich mir eine neue private Website gebastelt. Einfach so. Ohne Grund.

Nunja, es ist ziemlich Grün geworden. Kaum Kontraste. Größtenteils Barrierefrei. Wobei doch nicht. Sie hat eine Imagemap. Ah! Aber egal. Die werde ich in den nächsten Tagen austauschen. Screenreader sollten den Text, der auf den Grafiken steht auch schön vorlesen. Hä? Ham die OCR? Ne. Ich habe alle wichtigen Grafiken mit einem longdesc Attribut ausgestattet.

Inhaltlich ist auch nicht viel zu sehen/lesen/wieauchimmer. Aber egal, seht selbst:

http://blitzchecker.xairro.com/

Nachtrag: “This Page Is Valid XHTML 1.0 Strict!” und “Dieses Dokument wurde als CSS level 2.1 validiert!” :)