-
Notifications
You must be signed in to change notification settings - Fork 2
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
MeinKonto: Linkangabe #341
Comments
Hm, schwierig. Der Link wird tatsächlich so von Decidim angeboten, aber man kann ihn nicht einfach mit dem Browser besuchen (GET Request) sondern muss via einen Button (eigentlich via das Absenden eines kleinen Formulars, resultiert in einem POST Request) ausgelöst werden. Grund dafür ist ein Security Feature. Wir könnten GET Requests via
|
@carlobeltrame hierzu eine Nachfrage: Wenn die Stadt also im MeinKonto einen POST-Request abschickt, statt nur einen Link zu hinterlegen, würde dies funktionieren? |
Weitere Beobachtung, die ich mir nicht ganz erklären kann: Wenn ich auf der Sign-In Maske auf "Mit «Mein Konto» anmelden" klicke, führt dies auf folgenden Link: https://mitwirken.stadt-zuerich.ch/users/auth/oidc –> Funktioniert, ich werde weitergeleitet Auf Mein Konto ist derzeit folgender Link hinterlegt: https://mitwirken.stadt-zuerich.ch/users/auth/oidc –> Dieser führt auf eine 404-Seite. Die Links sind doch identisch, oder? |
Der Button auf der Sign-In Maske ist eben nicht einfach ein Link. Dieser Button macht intern dann eben einen POST Request. Es sieht nur im Browser beim draufzeigen wie ein Link aus, aber der Klick wird abgefangen und ein POST Request wird ausgelöst. Es wäre auch nicht möglich, von Mein Konto aus einen POST Request abzusetzen. Grund ist auch wieder die CSRF-Protection. Jedes Mal wenn die Decidim-Seite geladen wird, wird ein kleines temporäres "Secret", das sogenannte CSRF Token generiert, und dieses wird dann beim POST Request mitgeschickt. Rails überprüft dann, ob das CSRF Token vor kurzem so ausgestellt wurde. Dieses CSRF Token ist genau der Grund, warum ein GET Request als vulnerable und ein POST Request (mit dem ein vor kurzem ausgestelltes CSRF Token mitgesendet wird) als sicher angesehen wird. Im Mail habe ich noch gelesen "es kann doch nicht sein dass ein GET Request nicht möglich ist". Ich kenne es von anderen OAuth Logins auch so dass es einen direkten GET-zugänglichen Link gibt, mit dem man den User direkt einloggen kann. Aber bei Omniauth wurde 2015 exakt das als Security Vulnerability gemeldet, und ist daher seit dann standardmässig nicht mehr aktiviert. Ich würde allen bei der Stadt die daran Zweifel haben sehr empfehlen, den CVE sehr genau durchzulesen und zu begründen, warum das in unserem Fall (Omniauth + Rails + Decidim + Mein Konto) kein Problem sein dürfte. Ich selber habe mich nicht genügend vertieft dass ich mit Zuversicht sagen könnte, der CVE betrifft uns nicht.
Was eine CSRF Attacke genau ist, ist hier beschrieben: https://owasp.org/www-community/attacks/csrf |
@carlobeltrame danke! Wie per Mail erwähnt leite ich das weiter. Wenn wir nun auf eine aktuelle Version des Gems wären (weiss nicht, was derzeit bei uns installiert ist), wäre es dann möglich GET-Requests zu aktivieren? Der CVE gilt ja nur bis zur Gem Version 1.9.1. und früher. |
Wir haben aktuell omniauth in der Version 2.1.1 installiert. omniauth/omniauth#960 (comment)
Die Versionen 2.0.0 und später sind nur nicht mehr vulnerable, weil sie die GET Requests per default ausgeschaltet haben. Der Fix nach 1.9.1 war also nicht, dass GET Requests auf magische Weise sicher gemacht wurden, sondern dass GET Requests standardmässig deaktiviert wurden und eine grosse Warnung ausgespuckt wird, wenn man sie wieder zu aktivieren versucht. Würden wir GET Requests wieder aktivieren, dann wäre es wieder vulnerable (soweit ich verstehe). |
Weitere Rückfrage. @carlobeltrame, was denkst du?
|
Das käme nicht nur vom Verhalten her sondern auch technisch gleich mit einer Umgehung des forcierten POST-Requests und der CSRF Protection. Dagegen spricht wie gesagt, dass der CVE exakt diese Operation als gefährlich gemeldet hat. Bisher habe ich noch nicht genügend Hintergrundwissen, um den CVE so grundlegend zu hinterfragen und zu beurteilen ob der uns nicht betrifft. Soll ich da Zeit investieren um ein fundierteres Wissen in diesem Bereich aufzubauen, und wie viel Zeit habe ich? (Das könnte einige Stunden bis wenige Tage dauern.) Solange ich das nicht mache, ist diese Anfrage gleichzusetzen mit der Anfrage, ganz bewusst eine Sicherheitslücke in die Mitwirken-Plattform einzuführen. Das Problem ist nicht, dass wir dieses Verhalten von Omniauth nicht anpassen könnten, Omniauth bietet auch eine offizielle Option (siehe hier im Kapitel GET) um wieder zum alten, verwundbaren Verhalten von 1.9.1 zurückzugehen. Es bringt nichts, hier eine separate Seite aufzubauen. Grundsätzlich ist laut CVE verwundbar, wer auf seiner Seite einen OAuth/OIDC Login hat welcher via einen GET Request automatisiert ausgelöst werden kann. Siehe auch:
https://github.com/omniauth/omniauth/wiki/Resolving-CVE-2015-9284 Auch OWASP empfiehlt explizit, das nicht zu tun:
Eine GET-zugängliche Seite welche automatisiert eine state changing operation (Login mit Mein Konto) auslöst, ist selber eine state changing operation. |
Die Stadt Zürich betreibt MeinKonto einerseits als OIDC Anbindung, andererseits auch als gesamthaftes E-Services-Portal.
Dort ist z.B. «Mitwirken an Zürichs Zukunft» auch verlinkt, allerdings mit einem fehlerhaften Link (Hinterlegt ist: https://mitwirken.stadt-zuerich.ch/users/auth/oidc?locale=de und man landet auf einer Ups-Seite (ohne Redirect auf eine schöne Seite). Es soll auf Decidim so weitergeleitet werden, dass man gleich eingeloggt ist (und weil man bereits bei MeinKonto eingeloggt ist, sollte dies auch funktionieren). Welchen Link müssen sie angeben, um direkt angemeldet zu sein?
The text was updated successfully, but these errors were encountered: