Niski Odebrany

CVE-2026-82898

opublikowano:
modyfikacja:
Ocena CVSS
2.1
Niski · v4.0
wektor: CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:A/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X

>_ Opis

Tłumaczenie automatyczne – może zawierać nieścisłości.

Nieprawidłowa kolejność kontroli bezpieczeństwa w Apache Wicket.

org.apache.wicket.protocol.http.ResourceIsolationRequestCycleListener uzyskuje stronę, do której kierowane jest żądanie, zanim zapozna się ze swoimi zasadami izolacji zasobów, ponieważ te zasady są przekazywane tej stronie. Uzyskanie strony powoduje jej utworzenie, a utworzenie instancji strony uruchamia skonfigurowaną metodę org.apache.wicket.authorization.IAuthorizationStrategy. Aplikacja, która odrzuca nieuwierzytelnionego gościa, zgłaszając wyjątek org.apache.wicket.RestartResponseAtInterceptPageException, wyrzuca go zatem z wnętrza odbiornika izolacji, zanim jakakolwiek polityka zostanie uruchomiona. Wyjątek ten zastępuje osobę zajmującą się obsługą wniosków, zatem nigdy nie konsultuje się zasad i wniosek, który pochodzi z innego źródła, nie jest odrzucany.

Konstruktor wyjątku przechowuje adres URL żądania, które przerwał, dzięki czemu Component#continueToOriginalDestination() może je wznowić po zalogowaniu się odwiedzającego. Zapisany adres URL to ten, który zostałby odrzucony przez zasady. Po zalogowaniu się Wicket przekierowuje do niego, a przekierowanie to ma to samo pochodzenie, więc zasady na to pozwalają, a słuchacz działa w nowo uwierzytelnionej sesji. Cały adres URL jest przechowywany wraz z ciągiem zapytania, więc zwykły org.apache.wicket.markup.html.form.Form jest wznawiany z wartościami pól, które oryginalne żądanie zawierało w ciągu zapytania, a Form#onSubmit() działa z wartościami wybranymi przez inne źródło. Formularz POST nie jest do tego potrzebny; przenosi je zwykła nawigacja najwyższego poziomu.

Na aplikację wpływa to, gdy rejestruje ResourceIsolationRequestCycleListener, który jest opcjonalny i domyślnie nie jest zarejestrowany, oraz gdy odmawia nieautoryzowanego dostępu za pomocą wyjątku RestartResponseAtInterceptPageException, po którym następujecontinuToOriginalDestination(). Na tej ścieżce nie jest stosowane żadne zastąpienie aplikacji: dokumenty IAuthorizationStrategy#isInstantiationAuthorized() zgłaszają ten wyjątek, org.apache.wicket.authroles.authentication.AuthenticatedWebApplication zgłasza go, a org.apache.wicket.authroles.authentication.panel.UsernamePasswordPanel kontynuuje podróż do pierwotnego miejsca docelowego oraz org.apache.wicket.authorization.strategies.page.SimplePageAuthorizationStrategy w wicket-core instaluje ten sam wzorzec. Nie ma to wpływu na gościa, który jest już zalogowany, ponieważ nie następuje przechwycenie. Parametry treści żądania przechowywane wraz z przechwyconym adresem URL nie są stosowane do wznowionego formularza: wznowienie jest przekierowaniem, więc wznowione żądanie to GET, a komponenty formularza odczytują swoje wartości z ciągu zapytania w GET.

Aby obejść ten problem, odmów nieautoryzowanego dostępu za pomocą wyjątku org.apache.wicket.RestartResponseException, który nie przechowuje pierwotnego miejsca docelowego; odwiedzający nie wracają wówczas na stronę, o którą prosili po zalogowaniu.

Ten problem dotyczy Apache Wicket: od 9.1.0 do 9.24.0, od 10.0.0 do 10.11.0.

Nie ma to wpływu na wydania wcześniejsze niż 9.1.0, czyli każde wydanie 8.x i 9.0.0, ponieważ izolacja zasobów, której dotyczy ten problem, została wprowadzona w wersji 9.1.0. Nie są też objęte ochroną. Ich jedyną obroną między źródłami jest org.apache.wicket.protocol.http.CsrfPreventionRequestCycleListener, która sprawdza, skąd pochodzi żądanie, czytając nagłówek Origin i wracając do nagłówka Referer. Żaden nagłówek nie musi dotrzeć: przeglądarka nie wysyła Origin na zwykłym GET, z którego korzysta łącze, a dokument z drugiego źródła decyduje, poprzez swoją własną politykę dotyczącą stron odsyłających, czy osoba odsyłająca w ogóle dotrze do aplikacji. Dlatego też mechanizm ten nigdy nie zapewniał gwarancji, jaką zapewnia polityka oparta na pobieraniu metadanych, a w przypadku tych wersji wywołanie odbiornika z innego źródła nie jest przede wszystkim niezawodnie odrzucane. Każdy, kto korzysta z wersji wcześniejszej niż 9.1.0 i chce tej ochrony, powinien dokonać aktualizacji do wersji 9.x lub 10.x i zarejestrować ResourceIsolationRequestCycleListener.

Użytkownikom zaleca się aktualizację do wersji 9.25.0 lub 10.12.0, która rozwiązuje problem.

>_ Słabości (CWE)

>_ Referencje

Dane podatności pochodzą z oficjalnych źródeł (CVE® List / NVD). Opisy po polsku są tłumaczone automatycznie i mogą zawierać nieścisłości – na stronie rekordu można wyświetlić wersję angielską.

This product uses the NVD API but is not endorsed or certified by the NVD.

Copyright © 1999–2026, The MITRE Corporation. CVE is a registered trademark and the CVE logo is a registered trademark of The MITRE Corporation.

CVE Usage: MITRE hereby grants you a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, sublicense, and distribute Common Vulnerabilities and Exposures (CVE®). Any copy you make for such purposes is authorized provided that you reproduce MITRE's copyright designation and this license in any such copy. ALL DOCUMENTS AND THE INFORMATION CONTAINED THEREIN PROVIDED BY MITRE ARE PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND.

NVD Terms of Use / CVE® Terms of Use / nvd.nist.gov / cve.org