Le Guide API ReST | Marmicode
  • Le Guide API ReST par Marmicode
  • API ReST
    • L'Ecosystème Moderne
    • Le Besoin
    • Re.S.T. : REpresentational State Transfer
    • Les 5 règles et ½ de l’API ReST
    • Le Modèle de Maturité de Richardson
    • H.A.T.E.O.A.S. & Resource Linking
    • Avis Subjectif sur H.A.T.E.O.A.S. et le Semantic Web
    • ReST over HTTP
    • HTTP & CRUD
    • ReSTful donc Stateless
    • Pragmatisme, Idéologie et ReSTafarians
  • Conventions & Bonnes Pratiques
    • Nommage
    • Base URL
    • Media Type
    • Versioning
    • Propriété “id”
    • Polymorphisme
    • Datetime
    • Ressource d'Association
    • Pourquoi Appliquer ces Bonnes Pratiques
    • Zalando ReSTful API Guidelines
  • Les Outils
    • Swagger
    • OpenAPI Visual Editors
    • IDE Plugins
    • Postman
    • Insomnia
    • Fake & Sandbox
    • JSON Generator
    • Pact
  • Sécurité des APIs ReST
    • OWASP Top 10
    • Authentification et Session Management
    • Autorisation et Gestion des Permissions
    • Validation, Canonicalization, Escaping & Sanitization
    • Cookies are EVIL
    • C.O.R.S.
    • C.S.R.F.
    • C.S.R.F. & Media Type
    • C.S.R.F. Mitigation
    • C.S.R.F. & "Resource Linking"
    • J.O.S.E.
      • J.W.K.
      • J.W.S.
      • J.W.E.
    • J.W.T.
      • Description et Fonctionnement de JWT
      • Usages et Avantages
      • Utilisation de JWT pour l’Authentification
      • JWT, Authentification, Sessions et Risques Sécurité
      • Recommandations JWT
    • OAuth 2
      • OAuth 2 Roles
      • OAuth 2 Abstract Flow
      • OAuth 2 Authorization Code Flow
      • OAuth 2 Implicit Flow
      • OAuth 2 Resource Owner Password Credentials Flow
      • OAuth 2 Client Credentials
      • OAuth 2 Registration
      • OAuth 2 Risques & Recommandations
      • OAuth 2 Substitution Attack
    • OpenID Connect
      • Terminologie
      • Quoi de Neuf ?
      • OpenID Connect Flows
      • Que Faire ?
  • Autres Spécifications
    • JSON API
    • H.A.L.
    • JSON LD
    • Les Autres Initiatives
    • So What?
  • Quelques Liens & Ressources
  • Stay Tuned
    • 📝Blog
    • 🐦Twitter
    • 📬Newsletter
Propulsé par GitBook
Sur cette page
  • Politique de sécurité des clés privées TLS
  • Risque d’usurpation des clés privées JWT
  • none alg
  • Alg swapping
  1. Sécurité des APIs ReST
  2. J.W.T.

JWT, Authentification, Sessions et Risques Sécurité

PrécédentUtilisation de JWT pour l’AuthentificationSuivantRecommandations JWT

Dernière mise à jour il y a 6 ans

Avant d’aborder les aspects sécurité, les tokens JWT utilisés pour l’authentification ou la gestion de session sont accompagnés des problèmes suivants :

  • Taille importante (particulièrement en activant le chiffrement).

  • Immutabilité des claims. Il faut générer de nouveaux de tokens JWT pour transmettre les valeurs mises à jours des claims.

  • No key policy. JWT ne définit aucune contrainte de sécurité concernant la gestion des clés (génération des clés symétriques, rotation des clés etc…).

  • HMAC n’est pas un algorithme de signature. De nombreuses documentations et implémentations utilisent le HMAC pour authentifier les tokens JWT en parlant de signature.

  • Pas d’invalidation. Bien que les tokens JWT peuvent contenir une date d’expiration, JWT ne peut définir aucun moyen pour révoquer ou invalider un token JWT.

    • Euh… comment gérer le logout ?

    • La seule solution possible est de stocker une information quelque part (liste des tokens invalidés, heure de logout, etc…)

    • Cela nécessite alors de vérifier cette information à chaque présentation d’un token. On perd alors la plus grande partie de l’intérêt de l’utilisation des tokens JWT.

Politique de sécurité des clés privées TLS

Analysons la politique de sécurité généralement associée aux clés privées TLS.

Il est généralement recommandé (et de plus en plus pratiqué) d’utiliser une machine dédiée au chiffrement/déchiffrement des échanges TLS. Ainsi, si une application est compromise, la clé privée en mémoire n’est pas dévoilée.

Les clés sont renouvelées régulièrement.

Les clés sont protégées par des passphrases qui nécessitent parfois la présence de plusieurs personnes qui détiennent différentes parties de la passphrase.

Que se passe-t-il en cas d’usurpation d’une clé privée TLS ?

  • L’attaquant doit combiner cette attaque avec une attaque de type Man-In-The-Middle (ARP Poisoning, DNS Cache Poisoning…).

  • L’attaquant ne pourra impacter généralement qu’une partie géographique donnée et uniquement les utilisateurs connectés pendant la durée de l’attaque.

  • Dès détection, il est possible de révoquer rapidement le certificat associé et grâce à des protocoles tels que l’OCSP, les clients refuseront ce certificat.

Risque d’usurpation des clés privées JWT

Analysons maintenant une mise en place classique d’une authentification JWT.

La clé privée peut être dévoilée de différentes façons :

  • Accès au Version Control System.

  • Injection SQL.

  • Insecure remote file access.

  • Dump des variables d’environnement en cas d’erreur.

Si l’attaquant récupère la clé privée, il peut simplement forger des tokens JWT avec des claims arbitraires. Il peut alors récupérer les données de tous les utilisateurs dont l’authentification repose sur JWT.

none alg

Malheureusement, un token JWT peut également utiliser un algorithme none qui n’est donc ni chiffré ni signé.

L’attaquant peut donc forger des tokens JWT avec la valeur nonepour la propriété alg.

Si l’implémentation de vérification du token se base sur la propriété alg, elle est alors vulnérable et peut éventuellement accepter des tokens utilisant l'alg none.

Alg swapping

Certaines implémentations peuvent être vulnérables à une attaque qui consiste à utiliser la valeur HS256 pour la propriété alg. L’implémentation utilise alors la clé publique RSA comme clé symétrique pour vérifier le HMAC.

La clé privée du serveur d’authentification est malheureusement souvent stockée dans une variable d’environnement, une base de données ou encore un fichier (en espérant qu’il ne finisse pas sur le Version Control System).

https://tools.ietf.org/html/rfc6960
https://github.com/mitreid-connect/OpenID-Connect-Java-Spring-Server/wiki/Key-generation
http://django-oidc-provider.readthedocs.io/en/v0.4.x/sections/serverkeys.html
https://auth0.com/blog/critical-vulnerabilities-in-json-web-token-libraries/
T.L.S. Security
J.W.T. Security