Martins key.matique-Blog

>> Zurück zum Artikelverzeichnis >>


Autocomplete: Blinder Eifer schadet nur!

Geschrieben: 25.03.2017
Letzte Überarbeitung: 24.09.2020

Die einen missbrauchen den Standard, die anderen ignorieren ihn. Die einen wollen die Abspeicherung von Kennwörter ihrer Web-App im Browser partout verhindern, die anderen den Gebrauch ihres Passwortmanagers immer und überall ermöglichen. Die Sicherheit, für die beide Seiten in blindem Eifer zu kämpfen meinen, nimmt dabei jedoch Schaden.

Was ist passiert?

Einige Web-App-Entwickler, insbesondere solche, die mit Online-Banking befasst sind, beäugen Passwortmanager von Browsern kritisch. In Unkenntnis deren Vorteile für die Sicherheit, haben sie kurzerhand das Autocomplete-Attribute missbraucht, um den Kunden das Abspeichern von Kennwörtern zu verbieten.

Die Entwickler des Firefox®* haben darauf reagiert, indem sie kurzerhand das Autocomplete-Attribute ignorieren und immer das Kennwort auf Wunsch des Benutzers abspeichern und dann auch immer in Login-Formularen vorausfüllen. (Es sind nicht die Firefox-Entwickler alleine. Z. B. sehen wir beim Chrome™* ein ähnliches Verhalten.)

Daraufhin kursierten Rezepte, wie man mit Trickprogrammierung das ausgefüllte Kennwort in einem unsichtbaren Passwort-Feld abfangen kann.

Die Firefox-Entwickler veränderten den Erkennungsalgorithmus. Doch die Rezepte für die Umgehung wurden ebenso verfeinert.

Da ja der Firefox schlecht sämtliche Passwort-Felder einer Seite vorausfüllen kann (man stelle sich das mal für ein Formular zur Änderung des Kennworts vor), schienen die Autocompletion-Bremser den Kampf gewonnen zu haben.

Schließlich landete jedoch Firefox mit Version 52 einen Coup: Unter jedem Kennwortfeld wird eine Drop-Down-Box mit allen gespeicherten Kennwörtern angeboten.

Verlierer auf allen Seiten

Leider wurde damit das Kind mit dem Bad ausgeschüttet: Es gibt nämlich durchaus Fälle in denen eine Unterdrückung der Autovervollständigung sinnvoll ist, insbesondere nach einem Timeout oder der Sperrung einer Sitzung. Dann nämlich ist das Risiko schon etwas zu hoch, dass vor dem Bildschirm nicht mehr der rechtmäßige Benutzer, sondern ein Angreifer sitzt.

Auch bei Änderung des Anmeldekennworts ist es aus guter Risikoabwägung üblich, das bisherige Kennwort mit abzufragen, auch wenn der Benutzer schon angemeldet ist. Denn: Schafft es ein Angreifer in einer kurzen unbewachten Pause an den Computer zu gehen und das Kennwort einer Web-App zu ändern, so hat er ab sofort vollen Zugriff auf das Konto. Der rechtmäßige Eigentümer aber wird sich beim nächsten Login zunächst nur wundern, warum er sich nicht mehr anmelden kann, wodurch wertvolle Zeit verstreicht, in der der Schaden sonst noch begrenzt werden könnte.

Deshalb sollte beim Kennwortwechsel die Abfrage nach dem alten Kennwort mit "autocomplete='off'" von der Autovervollständigung ausgeschlossen sein. Wenn jedoch der Browser dieses Feld dennoch automatisch ausfüllt, ist die Vorsichtsmaßnahme konterkariert.

Wir lernen daraus: Die Browser-Entwickler können eben nicht so einfach wissen, ob es konkret gut oder schlecht ist, ein Passwort-Feld automatisch auszufüllen.

Natürlich kann man einwenden, dass es ja in der Verantwortung des Benutzers liegt, seinen PC zu sperren, wenn er den Arbeitsplatz verlässt. Doch das wäre IMHO eine bürokratische Sichtweise. In der Praxis spielen für den Erfolg des Angreifers eben viele Komponenten eine Rolle: Das Verhalten des Benutzers, aber auch das der Web-App und des Browsers. Da sollte sich keiner aus der Verantwortung stehlen. Wenn die Web-App oder der Browser den Angriff erschweren können, ohne den Benutzer wesentlich zu drangsalieren, sollten sie es tun.

Die Browser-Entwickler bedenken das beschriebene Risiko an anderer (von Ihnen selbst programmierter) Stelle sehr wohl: Wenn man sich z. B. über die Einstellungen die von einem Hauptpasswort geschützten Kennwörter anzeigen lassen will, geht das nur, wenn man das Hauptpasswort dafür nochmals eingibt.

Was passieren wird: Wenn ein Web-App-Entwickler eine Autovervollständigung partout verhindern will, wird es ihm auch gelingen. Er braucht ja nur an Stelle eines Passwort-Feldes ein Textfeld anzubieten. Auch dort lässt sich eine blinde Eingabe erreichen, wenn auch mit mehr Aufwand und vermutlich meist mit einigen Unschönheiten. Irgendwann steht der Code dafür im Internet und steht auch denjenigen zur Verfügung, die den Wert von Passwortmanagern überhaupt nicht zu schätzen wissen und sie nicht nur ausnahmsweise, sondern immer ausbremsen wollen.

Da die Browser-Entwickler ja wohl kaum (jedenfalls nicht ohne einen Shitstorm zu riskieren) Text-Felder mit gespeicherten Kennwörtern ausfüllen können, werden Sie also schließlich den Kampf doch noch verlieren.

Und: Solange sie die sinnvolle Behandlung von Ausnahmesituationen nicht zulassen, munitionieren Sie diejenigen, die Passwortmanager komplett ablehnen.

Die Umgehung

Unsere Lösung: Wir bieten für den Fall, dass die Autovervollständigung nicht sinnvoll ist, in key.matique nun ein durchsichtiges Textfeld an, in dem das Kennwort eingegeben wird. Darunter liegt ein sichtbares Feld mit "Bullets", das wie ein Passwort-Feld ausschaut und je nach Eingabe modifiziert wird.

Dummerweise wird bei durchsichtiger Schrift auch der Text-Cursor durchsichtig, was den Benutzer irritieren könnte, da er nicht weiß, dass er in das Feld hineinschreiben kann. Doch ein an die Bullets angehängtes '|'-Symbol (nur wen der Focus im Feld liegt) kann dieses Manko einigermaßen kitten.

Eine ziemlich umständliche Lösung, die leider auch immer noch einige kleine Unschönheiten aufweist, für deren Beseitigung uns aber der Aufwand derzeit zu hoch erscheint.

Der Ausweg

Vielleicht haben die Browser-Entwickler ja irgendwann ein Einsehen und verstehen, dass es den HTML-Standard nicht ohne Grund gibt, sondern es sinnvoll ist, sich an diesen zu halten.

Die Abweichung von Standards besteht meines Erachtens nicht darin, dass überhaupt das Autocomplete-Attribut ignoriert wird. Ein Ignorieren ist vom Standard durchaus gedeckt, wenn es in Absprache mit dem Benutzer geschieht. Jedoch wird der Benutzer nur bezüglich der Speicherung des Kennworts befragt. Ihm ist zu diesem Zeitpunkt meist nicht klar, dass damit nicht nur für die normale Anmeldemaske das Kennwort eingefügt wird, sondern auch zum Ändern seines Passworts, zum erneuten Anmelden nach einem Sitzungs-Timeout oder auch in anderen Masken, in denen die Web-App eindeutig darauf hinweist, dass hier eine automatische Einfügung des Kennworts nicht sinnvoll ist. Und ich behaupte, dass der Benutzer das in der Regel auch nicht will, sondern es ihm einfach nur um die schnelle Anmeldung im Normalfall geht.

Eine wirkliche Lösung sollte drei Punkte berücksichtigen:

  • Der Schutz darf nicht aufgeweicht werden.
  • Der Benutzer soll sich einzig das Hauptpasswort des Browsers merken müssen. Das ist wichtig, weil nur dann der Benutzer sehr komplexe und unterschiedliche Kennwörter verwenden kann.
  • Im Normalfall sollte eine Anmeldung ohne Tastatureingabe des Benutzers möglich sein. (Wichtig, weil ohne diese Zeitersparnis der Benutzer eher geneigt sein wird, kurze Kennwörter zu verwenden. Wichtig aber auch, um den allgegenwärtigen Kameras auf öffentlichen Plätzen und in öffentlichen Verkehrsmitteln bei der Kennwort-Eingabe zu entgehen.)

Unser Vorschlag:

  • Grundsätzlich sollte ein Browser das "autocomplete='off'" respektieren, aber den Benutzer eine Liste von Ausnahmen eintragen lassen, deren Erweiterung aber mit dem Hauptpasswort bestätigt werden muss. (Damit wäre der Missbrauch des "autocomplete='off'" für den Normalfall ausgebremst.)
  • Dem Benutzer sollte zusätzlich zur Ausnahmenliste die Möglichkeit gegeben werden, im konkreten Fall unter Eingabe des Hauptpassworts das Feld ausfüllen zu lassen. Das gäbe dem Benutzer die Sicherheit, dass er immer mit dem Hauptpasswort des Browsers auskommt und erlaubt ihm, den Eintrag in die Ausnahmenliste auch wirklich nur ausnahmsweise vorzunehmen.

*) Hinweise zu Marken Drit­ter:

"Google Chrome" ist eine Marke der Google Inc.

"Firefox" ist eine eingetragene Marke der Mozilla Foundation.


>> Zurück zum Artikelverzeichnis >>