Durch die Meldungen über Lücken in ICQ habe ich mich an meinen Account erinnert, den ich seit ein paar Jahre nicht mehr genutzt habe. Deswegen dachte ich, dass es jetzt wohl ein guter Zeitpunkt dafür wäre, meinen Account zu löschen. Da ich mein Passwort nicht mehr kannte, habe ich die Passwort-vergessen-Funktion bemüht und konnte so ein neues Passwort wählen.
Ärgerlicherweise konnte ich hier lediglich ein 6 bis 8-stelliges Passwort eingeben. Da dieses restriktive Obergrenze der Passwortlänge aus meiner Sicht keinerlei Sinn macht, habe ich mir die Passwort-vergessen-Funktion einmal genauer angesehen und bin auf eine Möglichkeit gestoßen, bei ICQ ganz einfach ein Passwort mit beliebig vielen Stellen anzugeben.
In aller Kürze
(Ich halte mich mit der Anleitung bewusst zurück. Wer nicht weiß, worum es hier geht, muss es auch nicht näher wissen.)
Bei Benutzung der Passwort-vergessen-Funktion wird dem User per Email ein Link zugeschickt, auf der er ein neues Passwort bestimmen kann.
Die URL aus der Email lautet zB.
https://www.icq.com/password/reset/00DD662B4CFDB086CC1CD9A8741727540E610892D61C9A67D4EA2972C744C3CE/de
Die Bedingungen an das neue Passwort sind:
- 6-8 Zeichen (Groß-/Kleinschreibung, Zahlen)
- darf nicht den Spitznamen, Vornamen, Nachnamen oder Email-Adresse enthalten
- darf nicht „1q2w3e“, „qwertz“ oder „password“ lauten und darf diese Angaben auch nicht enthalten
Ob die Bedingungen an das Passwort erfüllt wurden, prüft ein JavaScript-Code nach. Wenn ja, werden die Daten an den Server gesendet. Dieser erwartet diese vier POST-Parameter:
- password
- retype_password
- code
- karmaSyncKey
Die Parameter password und retype_password enthalten das neu gewählte Passwort. Die Parameter code und karmaSyncKey enthalten je eine bestimmte Zeichenkette, die im Quellcode in versteckten Eingabenfeldern enthalten sind.
Sendet man diese 4 Parameter direkt an die URL (zB mit HackBar), so wird die Überprüfung durch JavaScript umgangen und der Server nimmt das neue Passwort ohne zu meckern entgegen. Ich habe damit ein funktionierendes 10-stelliges, aus Kleinbuchstaben und Zahlen bestehendes, Passwort abspeichern können.
Fazit
Ich schätze diesen „Bug“ als nicht gefährlich ein, da man hierdurch nur sein eigenes Passwort ändern kann und das auch vorher durch eine Email an die eigene Adresse verifiziert wird. Jedoch ist es interessant zu wissen, dass ICQ die Nutzer-Angaben nur per JavaScript prüft und deshalb die gesendeten Daten in die Datenbank schreibt. Vielleicht ist damit auch SQL-Injection möglich, was ich aber nicht überprüft habe.
Außerdem ist es möglich, dass ICQ die Benutzereingaben auch auf weiteren Bereichen der Seite ähnlich schlecht überprüft.