CVE-2026-72887
KrytyczneCVSS 9.8Prawdopodobieństwo exploitacji (EPSS)
Niskie ryzykoPercentyl 11 - wyżej niż 11% wszystkich znanych CVE
Streszczenie
Net::OAuth::Client przed wersją 0.32 dla Perla pozwala dostawcy usług na ciche obniżenie OAuth 1.0a do OAuth 1.0 w get_request_token. Przekazanie callbacku do konstruktora wybiera OAuth 1.0a. get_request_token następnie odwołuje ten wybór, gdy odpowiedź na żądanie tokena nie zawiera oauth_callback_confirmed, bez wyjątku, ostrzeżenia ani opcji wymagania 1.0a. Żądanie tokena dostępu jest budowane z klasy wiadomości OAuth 1.0, która nie ma parametru verifier, więc oauth_verifier jest usuwany z żądania, nawet jeśli get_access_token otrzymał go. oauth_verifier jest powiązaniem, które OAuth 1.0a dodało między krokiem autoryzacji a wymianą tokenów. Aplikacja, która zażądała 1.0a i otrzymała 1.0, jest otwarta na fiksację sesji OAuth 1.0, gdzie atakujący uzyskuje token żądania, nakłania ofiarę do autoryzacji, a następnie sam kończy wymianę, łącząc konto ofiary u dostawcy z sesją kontrolowaną przez atakującego. Żadne działanie atakującego nie przygotowuje obniżenia: wystarczy dostawca, który nie potwierdza callbacku.
Ocena ryzyka
Ryzyko obejmuje możliwość przejęcia sesji użytkownika i nieautoryzowanego dostępu do konta ofiary u dostawcy usług. Atakujący może wykorzystać fiksację sesji do przejęcia kontroli nad sesją uwierzytelnioną.
Rekomendacja
Zaleca się aktualizację Net::OAuth::Client do wersji 0.32 lub nowszej, która zawiera poprawkę wymuszającą OAuth 1.0a. Należy również skonfigurować aplikację tak, aby wymagała potwierdzenia callbacku i odrzucała odpowiedzi bez oauth_callback_confirmed.
Oryginalny opis (angielski, źródło NVD)
Net::OAuth::Client versions before 0.32 for Perl allow the service provider to silently downgrade OAuth 1.0a to OAuth 1.0 in get_request_token. Passing a callback to the constructor selects OAuth 1.0a. get_request_token then revokes that choice when the request token response omits oauth_callback_confirmed, with no exception, no warning and no option to require 1.0a. The access token request is built from the OAuth 1.0 message class, which has no verifier parameter, so oauth_verifier is dropped from the request even when get_access_token was passed one. oauth_verifier is the binding that OAuth 1.0a added between the authorization step and the token exchange. An application that asked for 1.0a and gets 1.0 is open to OAuth 1.0 session fixation, where an attacker obtains a request token, has the victim authorize it, and then completes the exchange themselves, linking the victim's provider account to a session the attacker controls. No attacker action sets up the downgrade: a provider that does not confirm the callback is enough.

