CVE-2026-33746
KrytyczneCVSS 9.8Prawdopodobieństwo exploitacji (EPSS)
Niskie ryzykoPercentyl 22 - wyżej niż 22% wszystkich znanych CVE
Streszczenie
Convoy to panel zarządzania serwerami KVM dla firm hostingowych. Od wersji 3.9.0-beta do przed 4.5.1 metoda JWTService::decode() nie weryfikowała podpisu kryptograficznego tokenów JWT. Mimo że metoda konfigurowała symetryczny podpis HMAC-SHA256 za pomocą lcobucci/jwt, walidowała tylko roszczenia czasowe (exp, nbf, iat) przy użyciu ograniczenia StrictValidAt. Ograniczenie SignedWith nie zostało uwzględnione w walidacji. Oznacza to, że atakujący może sfałszować lub zmodyfikować ładunek tokena JWT – na przykład zmieniając roszczenie user_uuid – a token zostanie zaakceptowany jako ważny, o ile spełnione są roszczenia czasowe. Ma to bezpośredni wpływ na przepływ uwierzytelniania SSO (LoginController::authorizeToken), umożliwiając atakującemu uwierzytelnienie jako dowolny użytkownik poprzez stworzenie tokena z dowolnym user_uuid. Problem został naprawiony w wersji 4.5.1.
Ocena ryzyka
Organizacja narażona jest na całkowite przejęcie kont użytkowników poprzez fałszowanie tokenów JWT, co może prowadzić do nieautoryzowanego dostępu do panelu zarządzania i wszystkich powiązanych danych.
Rekomendacja
Należy natychmiast zaktualizować Convoy do wersji 4.5.1 lub nowszej, która zawiera poprawkę wymuszającą weryfikację podpisu JWT.
Oryginalny opis (angielski, źródło NVD)
Convoy is a KVM server management panel for hosting businesses. From version 3.9.0-beta to before version 4.5.1, the JWTService::decode() method did not verify the cryptographic signature of JWT tokens. While the method configured a symmetric HMAC-SHA256 signer via lcobucci/jwt, it only validated time-based claims (exp, nbf, iat) using the StrictValidAt constraint. The SignedWith constraint was not included in the validation step. This means an attacker could forge or tamper with JWT token payloads — such as modifying the user_uuid claim — and the token would be accepted as valid, as long as the time-based claims were satisfied. This directly impacts the SSO authentication flow (LoginController::authorizeToken), allowing an attacker to authenticate as any user by crafting a token with an arbitrary user_uuid. This issue has been patched in version 4.5.1.

