Closed skolarianer closed 6 years ago
Wie im Mumble am 5. Juli besprochen, wird @aschempp ein Ticket bei Symfony erstellen und die Problematik schildern, um herauszufinden, ob Symfony dieses Problem ebenfalls hat.
Das Problem würde dann auch alle anderen Tokens betreffen (activation, subscription etc.).
Symfony scheint das RememberMe-Token bereits zu hashen, somit müssen wir uns ab Contao 4.5 nur noch um unsere eigenen Token kümmern.
@contao/developers Was hatten wir nochmal besprochen bezüglich Hashing mit dem Secret?
Ich würde das Secret zusätzlich zum Hash hinzufügen. Einfach weil das nochmal einen Sicherheitsfaktor mehr gibt. Also wenn man die DB und die Hashes hat, könnte man theoretisch ja (z.B. durch zugegeben ziemlich aufwändigem Rainbow-Table-Gedöns) das gültige Token finden. Mit dem Secret hätte man eine 2. Unbekannte und es wäre daher eigentlich unmöglich.
Also so:
$tokenHash = hash('sha256', $token . $secret);
Anstatt das Secret anzuhängen sollten wir wahrscheinlich besser eine hash Funktion verwenden die dafür vorbereitet ist wie hash_hmac()
.
Z. B. so wie wir es im Captcha-Cookie gemacht haben: https://github.com/contao/core-bundle/blob/d43ecb77af384633334a6c296d3f3db3e502df18/src/Resources/contao/forms/FormCaptcha.php#L173
Yes 👍
Wie im Mumble am 5. Juli besprochen, wird @aschempp ein Ticket bei Symfony erstellen und die Problematik schildern, um herauszufinden, ob Symfony dieses Problem ebenfalls hat.
Symfony scheint das RememberMe-Token bereits zu hashen, somit müssen wir uns ab Contao 4.5 nur noch um unsere eigenen Token kümmern.
Diese Aussage ist übrigens nicht korrekt, das Token wird aus einem Hash generiert, aber das Cookie und die DB enthalten denselben Hash (bzw. random bytes).
das Cookie und die DB enthalten denselben Hash
Bei mir nicht?
Das Cookie enthält eine Kombination von Series und Token (https://github.com/symfony/symfony/blob/master/src/Symfony/Component/Security/Http/RememberMe/PersistentTokenBasedRememberMeServices.php#L115), aber der Token-Wert ist derselbe wie in der DB.
Nein, bei mir nicht.
Cookie-Wert: dStXenBqKzdMOFZXbk5BWUxLSkJyMDFUZjNNb1BiVkRIUnJ2T2k…
DB-Series: u+Wzpj+7L8VWnNAYLKJBr01Tf3MoPbVDHRrvOi4c…
DB-Value: qzI+Ia9lMYBtt08gkFmI778OYaVyHjcaUBkjnHL
Hast du meinen Kommentar bzw. den Code gelesen? Cookie-Wert = base64 implode von series + token
Ja, bei mir auch. 😄
Das autologin-Token wird derzeit (Contao 3.5.35) im Klartext in tl_member gespeichert. Da mit diesem Token der Zugriff auf Nutzerkonten möglich ist, ist es IMHO als passwort-ähnlich einzustufen und sollte auch entsprechend behandelt werden.
Folgende PRs habe ich zu dem Thema gefunden: https://github.com/contao/core-bundle/pull/481 https://github.com/contao/core-bundle/pull/685
Als Zwischenlösung sollte doch auch Contao 3 durch das Hashen des autologin-Tokens besser abgesichert werden können.
Gemäß den folgenden Links kann hierzu unter bestimmten Voraussetzungen auch ein schwacher Hash-Algorithmus ausreichend sein. Ich bin mir allerdings nicht sicher, ob man dieser Empfehlung folgen sollte.
Mehr Infos zum Hashen von Tokens: https://stackoverflow.com/a/477578/7999799 (PART II) https://security.stackexchange.com/a/63438