Projet

Général

Profil

Development #34115

Le ?next= se perd à la création de compte

Ajouté par Frédéric Péters il y a presque 5 ans. Mis à jour il y a presque 5 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Catégorie:
-
Version cible:
-
Début:
18 juin 2019
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

Création d'un compte via l'API, avec send_registration_email_next_url = xxx; ce xxx se trouve bien repris dans l'URL mentionnée dans le message, https://.../accounts/password/reset/confirm/...?next=xxx. Mais à la validation de ce formulaire, je ne me trouve pas envoyé vers xxx.


Fichiers

Révisions associées

Révision 26be52b4 (diff)
Ajouté par Benjamin Dauvergne il y a presque 5 ans

whitelist send_registration_email_next_url using HMAC signature (#34115)

Historique

#1

Mis à jour par Benjamin Dauvergne il y a presque 5 ans

  • Assigné à mis à Benjamin Dauvergne
#2

Mis à jour par Benjamin Dauvergne il y a presque 5 ans

Déjà un test pour montrer que ça marche mais il faut que l'URL qui est passé soit whitelistée.

#3

Mis à jour par Frédéric Péters il y a presque 5 ans

On peut envisager quelque chose au niveau de l'API, répondre en erreur quand send_registration_email_next_url contient une URL qui ne sera pas prise en compte ? Ou logguer le fait que ? (ou bien sûr qu'une URL transmise par l'API soit prise en compte, même si elle n'a pas été explicitement déclarée).

#5

Mis à jour par Paul Marillonnet il y a presque 5 ans

@@ -894,6 +899,11 @@ def good_next_url(request, next_url):
         return True
     if same_origin(request.build_absolute_uri(), next_url):
         return True
+    signature = request.POST.get(constants.NEXT_URL_SIGNATURE) or request.GET.get(constants.NEXT_URL_SIGNATURE)
+
+    if signature:
+        return crypto.check_hmac_url(settings.SECRET_KEY, next_url, signature)

Question de principe j'aurais bien vu cet ajout de code remonter plus haut la fonction good_next_url : s'il y a une signature, il faut la vérifier. Si la signature ne colle pas, même pour un next sur une ressource de même origine, c'est qu'il y a une embrouille.

#6

Mis à jour par Benjamin Dauvergne il y a presque 5 ans

Paul Marillonnet a écrit :

[...]

Question de principe j'aurais bien vu cet ajout de code remonter plus haut la fonction good_next_url : s'il y a une signature, il faut la vérifier. Si la signature ne colle pas, même pour un next sur une ressource de même origine, c'est qu'il y a une embrouille.

Si on était la NSA je te dirai oui, mais l'avantage que j'y vois c'est que les cas qui marchent déjà ne sont pas impactés et comme le bloquage des URLs de redirection n'est pas non plus une énorme avancée dans la sécurité ça me parait suffisant de dire que les signatures c'est en option du système actuel.

#7

Mis à jour par Paul Marillonnet il y a presque 5 ans

  • Statut changé de Solution proposée à Solution validée

Benjamin Dauvergne a écrit :

Si on était la NSA je te dirai oui

Quand ils nous commanderont une GRU il faudra penser à revenir sur ce ticket.

#8

Mis à jour par Benjamin Dauvergne il y a presque 5 ans

  • Statut changé de Solution validée à Résolu (à déployer)
commit 26be52b49f64fb1a67677b2def1bc962a96f0226
Author: Benjamin Dauvergne <bdauvergne@entrouvert.com>
Date:   Tue Jun 18 20:36:26 2019 +0200

    whitelist send_registration_email_next_url using HMAC signature (#34115)
#9

Mis à jour par Frédéric Péters il y a presque 5 ans

  • Statut changé de Résolu (à déployer) à Solution déployée

Formats disponibles : Atom PDF