Cette attaque consiste à amener une application à accepter un message frauduleux en le signant au moyen d’un algorithme symétrique alors que l’application s’attend à recevoir un message signé avec un algorithme de signature asymétrique. 

Nous allons illustrer cette situation avec les algorithmes de signature HS256 et RS256.

HS256 est un algorithme symétrique qui utilise un même secret pour à la fois signer les messages et valider la signature des messages. Celui qui signe et celui qui vérifie la signature utilisent le même secret.

RS256 est un algorithme asymétrique qui utilise une clé privée pour signer les messages, et la clé publique correspondante pour valider la signature des messages. Celui qui signe le fait avec la clé privée, celui qui vérifie la signature le fait avec la clé publique. La clé privée est connu uniquement par celui qui signe, tandis que la clé publique est connu de tous.

Déroulement de l’attaque avec des jetons JWT

Une application est protégée avec des jetons JWT. Pour valider la signature du jeton, elle se base sur une clé publique ainsi que l’algorithme de signature contenu dans l’entête du jeton, par exemple RS256.

Un attaquant génère un jeton, utilise HS256 comme algorithme, la clé publique comme secret et signe le jeton.  Il inclut cet algorithme dans l’entête du jeton, puis utilise ce jeton pour contacter l’application.

L’application reçoit le jeton, le jeton, récupère l’algorithme HS256 de l’entête, et utilise sa clé publique comme secret pour vérifier la signature. De ce fait, la signature du jeton sera considérée comme vérifiée, et le jeton comme valide. L’attaque aura réussie.

Comment se protéger de ce type d’attaque

Les mesures suivantes permettent de se prémunir de ce type d’attaque:

Conclusion

La sécurité, c’est complexe, chronophage, et les possibilités de se tromper sont nombreuses.

Il est recommandé d’utiliser des solutions testées et éprouvées pour sécuriser vos applications. Ne construisez pas vous même votre propre solution de sécurité. 

Utilisez un serveur d’autorisation tel que Keycloak comme tiers de confiance, utilisez des librairies open source pour vérifier la signature des jetons JWT.

Ne réinventez pas la roue, au risque de vous retrouver avec des trous dans la raquette.

Leave a Reply