CVE-2026-82704
>_ Opis
Tłumaczenie automatyczne – może zawierać nieścisłości.
Brak autoryzacji w Apache Wicket.
org.apache.wicket.core.request.handler.ListenerRequestHandler wywołuje IRequestListener tylko wtedy, gdy org.apache.wicket.Component#canCallListener() na to pozwala, a tą metodą jest isEnabledInHierarchy() && isVisibleInHierarchy(). Połowa widoczności odczytuje flagę, która przenosi wynik IAuthorizationStrategy#isActionAuthorized() dla akcji Component.RENDER i ta flaga jest zapisywana tylko w jednym miejscu, Component#configure(), podczas fazy renderowania. Adres URL odbiornika zbudowany przez podklasę org.apache.wicket.core.request.mapper.AbstractBookmarkableMapper zawiera identyfikator strony i ścieżkę komponentu w jednym parametrze, a identyfikator strony może być pusty. Gdy tak jest, tworzona jest nowa instancja strony, PageProvider#wasExpired() ma wartość false, ponieważ nie podano identyfikatora, a PageAndComponentProvider#getComponent() znajduje komponent bezpośrednio w nowej instancji, więc ani przebieg renderowania, ani Component#configure() nie są uruchamiane przed wywołaniem detektora. Dlatego flaga nadal zachowuje domyślny konstruktor, komponent liczy się jako widoczny i wykonywany jest słuchacz komponentu, dla którego strategia autoryzacji odmówiła RENDER. To samo żądanie pomija również Component#onConfigure(), więc widoczność i włączanie zestawów aplikacji również nie są stosowane.
Można to osiągnąć na dwa sposoby i żaden nie wymaga niczego poza prośbą. Na stronie stanowej obiekt wywołujący pomija identyfikator strony w adresie URL odbiornika, który w innym przypadku miałby go przenosić. Na stronie, którą Wicket uważa za bezstanową, nie trzeba w ogóle nic zmieniać: Wicket sam zapisuje adresy URL słuchaczy bez identyfikatora strony dla takich stron, a komponent, dla którego strategia odmawia RENDER, jest traktowany jako bezstanowy i dlatego nie utrzymuje stanu strony, więc odmowa RENDER może sama wygenerować formularz bez identyfikatora strony. Druga trasa nigdy nie została odrzucona. Decyzja ENABLE IAuthorizationStrategy jest konsultowana przy każdym wywołaniu i nadal jest odrzucana, podobnie jak żądanie dostarczające rzeczywisty identyfikator instancji strony, która została już wyrenderowana; komponent, którego aplikacja wyłączona w Component#onConfigure() nie jest chroniony przez żaden z nich, ponieważ to wywołanie zwrotne nie zostało uruchomione.
Na aplikację wpływa to, gdy wstrzymuje pojedynczy komponent przed obiektem wywołującym, albo przez odmowę akcji RENDER za pomocą IAuthorizationStrategy, w tym za pomocą funkcji MetaDataRoleAuthorizationStrategy i AuthorizeAction ról wicket-auth, albo przez ustawienie widoczności komponentu lub flagi włączonej w Component#onConfigure(), własna dokumentacja wywołania zwrotnego Wicket kieruje aplikacje do używania obu. Stronę zawierającą taki komponent należy zbudować z adresu URL, który można dodać do zakładek lub zamontować, co wymaga, aby konstruktor publiczny nie przyjmował żadnych argumentów lub argument PageParameters. Zachowania przechodzą przez tę samą bramkę, więc zachowanie AJAX dołączone do takiego komponentu jest równie widoczne. Niezależnie od tego, czy jakikolwiek komponent jest wstrzymany, czy nie, słuchacz na stronie, którą Wicket uważa za stanową, jest wywoływany w instancji, którą skonstruowało samo żądanie, więc działa na modelach zbudowanych na podstawie parametrów strony dostarczonych przez osobę wywołującą, a nie na stanie ostatnio wyrenderowanym przez aplikację. Autoryzacja instancji pozostaje niezmieniona: Funkcja IAuthorizationStrategy#isInstantiationAuthorized() jest nadal sprawdzana podczas tworzenia nowej instancji strony, zatem ochrona umieszczona na stronie, a nie na pojedynczym komponencie, nadal obowiązuje.
Ten problem dotyczy Apache Wicket: od 8.0.0 do 8.19.0, od 9.0.0 do 9.24.0, od 10.0.0 do 10.11.0. Użytkownikom zaleca się aktualizację do wersji 8.20.0, 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