W panelu zarządzania serwerami KVM Convoy (wersje od 3.9.0-beta do przed 4.5.1) metoda JWTService::decode() nie weryfikowała kryptograficznego podpisu tokenów JWT. Luka pozwala atakującemu na sfałszowanie tokenu i uwierzytelnienie się jako dowolny użytkownik bez znajomości klucza podpisującego.
▸ Pokaż oryginał (EN)
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.
Metoda JWTService::decode() konfigurowała symetryczny podpisywacz HMAC-SHA256 za pomocą biblioteki lcobucci/jwt, jednak podczas walidacji stosowała wyłącznie ograniczenie StrictValidAt sprawdzające roszczenia czasowe (exp, nbf, iat). Ograniczenie SignedWith weryfikujące podpis kryptograficzny nie było uwzględnione w kroku walidacji. Atakujący może zatem samodzielnie skonstruować token JWT z dowolną wartością roszczenia user_uuid, a system przyjmie go jako prawidłowy, o ile roszczenia czasowe będą spełnione. Sfałszowany token może zostać użyty bezpośrednio w przepływie SSO (LoginController::authorizeToken), co skutkuje pełnym przejęciem konta wybranego użytkownika.
Atakujący nieposiadający żadnych poświadczeń może uwierzytelnić się jako dowolny użytkownik systemu, w tym administrator, uzyskując pełen dostęp do panelu zarządzania serwerami KVM. Prowadzi to do całkowitej kompromitacji poufności, integralności i dostępności zarządzanej infrastruktury.
Należy zaktualizować Convoy do wersji 4.5.1, w której wprowadzono weryfikację podpisu JWT przy użyciu ograniczenia SignedWith. Patche dostępne są w repozytorium producenta: https://github.com/ConvoyPanel/panel/releases/tag/v4.5.1
Convoy (ConvoyPanel) w wersjach od 3.9.0-beta do 4.5.0 włącznie.
Podatność dotyczy wyłącznie przepływu SSO (metoda LoginController::authorizeToken). Luka jest sklasyfikowana jako CWE-287 (nieprawidłowe uwierzytelnianie) oraz CWE-347 (brak weryfikacji podpisu kryptograficznego).
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:HConvoypanel Convoy
APPConvoypanel< 4.5.1