598px-Oauth_logo.svg_

Une vulnérabilité critique a été identifiée au sein de plusieurs bibliothèques JWT (JSON Web Token). Ces bibliothèques sont notamment utilisées pour les échanges de protocoles d’autorisation tels OAuth. Par le biais de celle-ci, un attaquant peut outre-passer les mécanismes de vérification.

Tim McLean, un chercheur en sécurité Canadien spécialisé dans la cryptographie a présenté son constat : plusieurs bibliothèques JWT disposent d’une faiblesse permettant d’abuser l’algorithme de signature asymétrique, notamment dans les implémentations JavaScript et PHP de celle-ci.

JWT est un standard né il y a quelques années, permettant l’échange au format JSON de jeton d’autorisation (token) entre acteurs du web. Pour résumer le mécanisme général, un serveur génère un jeton d’administration, transféré via JSON et signé par la clé du serveur. Les clients peuvent utiliser ce token pour se connecter en tant qu’administrateur.

Tim McLean a débuté son analyse sur son blog en février dernier et a ajouté de nombreux détails cette semaine. Le protocole fortement employé OAuth, standard des échanges d’autorisation, a relayé l’analyse sur le site officiel vis-à-vis de la criticité de la découverte.

OAuth2 représente plus de 85% des authentifications / autorisations sur l’Internet. Il est utilisé par Dropbox, Facebook, Github, Google, LinkedIn, Twitter, Windows live, WordPress, Yahoo…

La vulnérabilité réside dans la confusion de la clé publique entre les acteurs, qui la signent avec la fonction de hachage HMAC et d’autres avec RSA.

If a server is expecting a token signed with RSA, but actually receives a token signed with HMAC, it will think the public key is actually an HMAC key. How is this a disaster? HMAC secret keys are supposed to be kept private, while private keys are well, public.

Dans un tel scénario, un attaquant peut usurper une clé publique et l’employer au travers une API d’une bibliothèque JWT vulnérable, alors il peut l’utiliser au sein d’un token et le serveur acceptera la demande. Oui, la clé publique, celle que “tout le monde peut posséder”.

Les bibliothèques JWT existent sous de nombreuses technologies telles .NET, Node.js, PHP, Python, Java, Ruby, etc. Beaucoup d’entre elles sont vulnérables. Auth0 les recense.

Libraries for Token Signing/Verification
Libraries for Token Signing/Verification

Auth0 a corrigé son implémentation de la bibliothèque Node.js (v4.2.2) et Jose Padilla qui maintient l’implémentation Python également (v1.0.0).

Si vous disposez d’une solution implémentant une bibliothèque de JSON Web Token ou le protocole OAuth, nous vous encourageons à surveiller les patchs correctifs et montées de version de produits de gestion d’autorisations.

L’ensemble de l’analyse des mécanismes concernés par cette vulnérabilité est détaillé sur le blog de Tim McLean.

Sources & ressources :

Yann

Consultant Sécurité