CVE-2026-103001
ŚrednieCVSS 6.5Prawdopodobieństwo exploitacji (EPSS)
Niskie ryzykoPercentyl 13 - wyżej niż 13% wszystkich znanych CVE
Streszczenie
PyJWT to implementacja standardów JSON Web Token w Pythonie. Od wersji 2.11.0 do 2.13.0 metoda PyJWT._merge_options() może modyfikować przekazane przez wywołującego mutowalne mapowanie opcji, gdy verify_signature ma wartość false. Jeśli aplikacja ponownie użyje tego samego mapowania w późniejszym wywołaniu decode() lub decode_complete() i zmieni verify_signature na true, mapowanie może zachować wartości false dla sprawdzeń expiration, not-before, issued-at, audience, issuer, subject i JWT ID, co pozwala zaakceptować podpisany token z nieprawidłowymi zastrzeżonymi oświadczeniami bez wyłączania weryfikacji podpisu. Aplikacje tworzące świeże mapowanie opcji dla każdego wywołania nie są podatne.
Ocena ryzyka
Może prowadzić do akceptacji tokenów z nieprawidłowymi oświadczeniami (np. wygasłych lub o nieprawidłowym odbiorcy), co osłabia kontrolę dostępu i może umożliwić nieautoryzowany dostęp. Dotyczy tylko aplikacji ponownie używających tego samego mutowalnego mapowania opcji.
Rekomendacja
Zaktualizować PyJWT do wersji nowszej niż 2.13.0, gdy będzie dostępna, oraz zmodyfikować kod aplikacji tak, aby dla każdego wywołania decode()/decode_complete() tworzyć świeże mapowanie opcji. Unikać ponownego używania mutowalnych słowników opcji między wywołaniami.
Inne podatności w PyJWT
Zobacz wszystkie- CVE-2017-11424Wysokie
W wersjach PyJWT 1.5.0 i wcześniejszych, sprawdzenie `invalid_strings` w `HMACAlgorithm.prepare_key` nie uwzględnia wszystkich kluczy publicznych zakodowanych w formacie PEM. Szczególnie format PKCS1 PEM jest dozwolony, co umożliwia ataki związane z myleniem kluczy symetrycznych i asymetrycznych.
- CVE-2026-102268Krytyczne
PyJWT to Pythonowa implementacja standardów JSON Web Token. Przed wersją 2.14.0 funkcja is_pem_format w jwt/utils.py nie rozpoznaje wszystkich reprezentacji PEM akceptowanych przez loader cryptography. Gdy aplikacja miesza algorytmy HMAC i asymetryczne oraz dostarcza zmutowany klucz publiczny PEM jako surowe bajty klucza, HMACAlgorithm.prepare_key traktuje nierozpoznany klucz publiczny jako sekret HMAC. Atakujący znający klucz publiczny może sfałszować uwierzytelnione tokeny HMAC. Problem naprawiono w wersji 2.14.0.
- CVE-2026-102275Średnie
PyJWT to implementacja standardów JSON Web Token w Pythonie. Od wersji 2.1.0 do 2.15.0 metoda OKPAlgorithm.from_jwk w jwt/algorithms.py jest podatna, ponieważ ścieżka importu prywatnego JWK nie porównuje klucza publicznego wyprowadzonego z d z x. Ma to miejsce, gdy prywatny JWK OKP dostarcza nieodpowiadające sobie komponenty x i d. W rezultacie tożsamość wyprowadzona z x może różnić się od operacji wykonywanych z d.
- CVE-2026-102274Średnie
PyJWT to implementacja standardów JSON Web Token w Pythonie. Od wersji 2.9.0 do 2.14.0 PyJWKSet nie przechwytuje zwykłego ValueError zgłaszanego dla błędnych komponentów RSA JWK przez RSAAlgorithm.from_jwk w jwt/api_jwk.py. Ma to miejsce, gdy zestaw JWK zawiera błędny klucz RSA obok innych użytecznych kluczy. W rezultacie jeden błędny element przerywa konstrukcję całego PyJWKSet.
- CVE-2026-102273Wysokie
PyJWT to implementacja standardów JSON Web Token w Pythonie. Od wersji 2.13.0 do 2.14.0 funkcja HMACAlgorithm.prepare_key jest podatna, ponieważ ochrona klucza HMAC rozpoznaje tylko publiczne formy JWK najwyższego poziomu i pomija reprezentacje kontenerowe. Gdy aplikacja zezwala na algorytmy HMAC i asymetryczne oraz przekazuje publiczny kontener JWK jako surowy klucz, publiczny materiał klucza asymetrycznego jest akceptowany jako sekret HMAC. W rezultacie atakujący znający klucz publiczny może sfałszować token z dowolnymi uwierzytelnionymi oświadczeniami.
- CVE-2026-102272Wysokie
PyJWT to implementacja standardów JSON Web Token w Pythonie. Od wersji 2.13.0 do 2.14.0 funkcja HMACAlgorithm.prepare_key w jwt/algorithms.py jest podatna, ponieważ detektor surowego JWK nie normalizuje akceptowanych znaczników kolejności bajtów Unicode przed sprawdzeniem JSON. Gdy publiczny JWK jest poprzedzony BOM UTF-8 i używany w ścieżce weryfikacji mieszanej algorytmami, publiczny JWK omija wykrywanie klucza asymetrycznego i staje się sekretem HMAC. W rezultacie atakujący znający klucz publiczny może sfałszować uwierzytelnione tokeny.
- CVE-2026-102271Wysokie
PyJWT to implementacja standardów JSON Web Token w Pythonie. Od wersji 2.4.0 do 2.14.0 funkcja HMACAlgorithm.prepare_key jest podatna, ponieważ ochrona klucza asymetrycznego opiera się na znacznikach tekstowych nieobecnych w kodowaniu DER. Gdy aplikacja miesza algorytmy HMAC i asymetryczne oraz dostarcza publiczny klucz DER jako wspólny klucz weryfikacyjny, PyJWT używa publicznych bajtów DER jako sekretu HMAC. W rezultacie atakujący znający klucz publiczny może sfałszować uwierzytelnione tokeny HMAC.
- CVE-2026-102270Średnie
PyJWT to implementacja standardów JSON Web Token w Pythonie. W wersjach przed 2.14.0 funkcja is_pem_format jest podatna, ponieważ leniwe wyrażenie regularne PEM wykonuje rozległe cofanie (backtracking). Ma to miejsce, gdy dane wejściowe przypominające certyfikat zawierają powtarzające się znaczniki BEGIN bez pasującego znacznika END. W rezultacie is_pem_format wykonuje nieograniczone cofanie w poszukiwaniu znacznika końca PEM.
- CVE-2026-102269Średnie
PyJWT to implementacja standardów JSON Web Token w Pythonie. W wersjach przed 2.14.0 segment podpisu PyJWT jest podatny, ponieważ dekodowanie segmentu podpisu akceptuje znaki spoza kanonicznej reprezentacji Base64URL. Ma to miejsce, gdy znaki niebędące Base64URL są dołączane do prawidłowego segmentu podpisu kompaktowego JWS. W rezultacie base64url_decode produkuje te same bajty podpisu dla różnych serializowanych segmentów.
- CVE-2026-102267Wysokie
PyJWT to implementacja standardów JSON Web Token w Pythonie. W wersjach przed 2.14.0 komponent PyJWKClient jest podatny, ponieważ miejsca docelowe przekierowań nie są ponownie weryfikowane względem granicy zaufania JWKS. Gdy skonfigurowany zaufany punkt końcowy JWKS zwraca przekierowanie pod wpływem atakującego, PyJWKClient podąża za przekierowaniem i zużywa przekierowaną odpowiedź jako materiał klucza. W rezultacie przekazywane poświadczenia mogą zostać ujawnione lub klucze weryfikacyjne mogą zostać podmienione.
Oryginalny opis (angielski, źródło NVD)
PyJWT is a Python implementation of JSON Web Token standards. From 2.11.0 through 2.13.0, PyJWT's PyJWT._merge_options() method can modify a caller-supplied mutable options mapping when verify_signature is false. If an application reuses that same mapping for a later decode() or decode_complete() call and changes verify_signature to true, the mapping can retain false values for expiration, not-before, issued-at, audience, issuer, subject, and JWT ID checks. A signed token with invalid registered claims can then be accepted without disabling signature verification, but applications that create a fresh options mapping for each call are not affected.
Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS

