JWT::EncodedToken raises TypeError for a non-object header
Les mainteneurs répondent en général sous 1 jour
Une pull request liée a déjà été fusionnée.
- #783 par @anakinj — fusionnée
Évaluation
- Difficulté
- 2/5
- Temps estimé
- 1-3 heures
- Accessibilité débutants
- 78/100
- Type d'issue
- Bug
- Clarté
- Clairement spécifiée
- Activité
- Active
- Stack technique
- ruby
- Domaine
- authentication, security
Piste de recherche
Commence dans lib/jwt/encoded_token.rb, où valid_signature? lit header['alg'] sans vérifier que le header décodé est un Hash. Compare avec la vérification dans JWT::Decode#verify_algo et reproduis le problème avec l'extrait de l'issue pour voir le TypeError brut. C'est terminé lorsqu'un header qui n'est pas un objet déclenche JWT::MalformedTokenError depuis verify_signature!, avec un test de régression ajouté à côté des tests existants sur les tokens encodés.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
If a token's header is valid JSON but not an object, JWT::EncodedToken#verify_signature! raises a raw TypeError instead of a JWT error. Applications that rescue JWT errors won't catch it, so untrusted input could produce a 500 rather than a 401. JWT.decode handles the same token correctly.
rsa = OpenSSL::PKey::RSA.generate(2048)
b64 = ->(value) { JWT::Base64.url_encode(value) }
token = "#{b64.call('[]')}.#{b64.call('{}')}.#{b64.call('x')}"
JWT::EncodedToken.new(token).verify_signature!(algorithm: 'RS256', key: rsa.public_key)
# => TypeError: no implicit conversion of String into Integer
JWT.decode(token, rsa.public_key, true, algorithm: 'RS256')
# => JWT::MalformedTokenError: Token header not a JSON object
Reproduced on 3.3.1. lib/jwt/encoded_token.rb is unchanged on main.
Cause: EncodedToken#valid_signature? reads header['alg'] without checking that the header is a Hash. JWT::Decode#verify_algo has that check.
Suggestion: Raise JWT::MalformedTokenError when the decoded header isn't an object, covering valid_signature? and any other direct header[...] access on this path.
Posted by Claude on behalf of @anakinj.
- Langage dominant
- Ruby
- Étoiles
- 3.7k
- Forks
- 381
- Merge moyen
- 14 h 13 min
- PR mergées (30 j)
- 13
Préparer son environnement
Ce projet ne fournit ni conteneur de développement, ni Dockerfile, ni guide de contribution : l'installation est à votre charge. Commencez par son README, et consultez notre guide de la première contribution pour les étapes générales.
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de jwt/ruby-jwt
-
Difficulté 3/5 1-2 jours Accessibilité débutants 65/100
jwt/ruby-jwt#786 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
Release with release-pleaseOuverte
Difficulté 4/5 3-5 jours Accessibilité débutants 15/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 3/5 1-2 jours Accessibilité débutants 68/100
jwt/ruby-jwt#743 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 25/100
jwt/ruby-jwt#723 · 2 commentaires ·
Les mainteneurs répondent en général sous 1 jour
-
feature
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 35/100
jwt/ruby-jwt#428 · 7 commentaires · 1 réaction ·
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de jwt/ruby-jwt
Issues similaires
-
bug javascript
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 88/100
yegor256/netbout.rb#69 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
palladius/rails8-app-on-gcp#198 ·
-
bug
Difficulté 1/5 Moins d'une heure Accessibilité débutants 95/100
WikiEducationFoundation/WikiEduDashboard#7258 ·
Les mainteneurs répondent en général sous 1 jour
-
UX/UI verified
Difficulté 2/5 1-3 heures Accessibilité débutants 73/100
Les mainteneurs répondent en général sous 5 jours