CVE-2026-54625
ŚrednieCVSS 4.8Prawdopodobieństwo exploitacji (EPSS)
Niskie ryzykoPercentyl 4 - wyżej niż 4% wszystkich znanych CVE
Streszczenie
django CMS przed wersjami 5.0.8 i 5.1.0 ignoruje nagłówki żądań zadeklarowane przez wtyczki w funkcji get_vary_cache_on() podczas generowania klucza pamięci podręcznej. Powoduje to, że różni użytkownicy mogą otrzymać treść przeznaczoną dla innych.
Ocena ryzyka
Atakujący może wypełnić pamięć podręczną treścią wybraną przez siebie, a użytkownicy mogą otrzymać treści specyficzne dla innych żądań, co może prowadzić do wycieku danych lub manipulacji treścią.
Rekomendacja
Zaleca się aktualizację do wersji 5.0.8 lub 5.1.0, które zawierają poprawkę.
Inne podatności w django CMS
Zobacz wszystkie- CVE-2015-5081Wysokie
W podatności CSRF w django CMS przed wersją 3.0.14 oraz 3.1.x przed wersją 3.1.1, zdalni atakujący mogą manipulować uprzywilejowanymi użytkownikami, zmuszając ich do wykonywania nieznanych działań.
- CVE-2026-75526Średnie
django CMS w wersjach od 5.0.8 do 5.0.9 zawiera podatność, w której ContentRenderer.render_placeholder w cms/plugin_rendering.py może przekazywać przechowywane, kontrolowane przez atakującego wartości do ContentRenderer.render_exception, gdy renderowanie wtyczki nie powiedzie się w trybie edycji. Wartości z get_short_description(), komunikatu wyjątku, placeholdera lub placeholder.source są interpolowane do nagłówka cms-rendering-exception i później zwracane przez mark_safe. Ponieważ nagłówek nie jest escapowany, przechowywany HTML wykonuje się w przeglądarce edytora, a settings.DEBUG nie zapobiega renderowaniu niestandardowego nagłówka.
- CVE-2026-63003Średnie
django CMS przed wersją 5.0.9 zawiera podatność w duplikacji stron, która nie sprawdza autoryzacji na poziomie obiektu dla źródłowej strony. W cms/admin/forms.py, DuplicatePageForm.source akceptuje dowolną stronę, konstruktor AddPageForm nie zawęża ukrytego pola źródła, AddPageForm.clean nie waliduje źródła względem użytkownika, a AddPageForm.save wywołuje from_source. W cms/admin/pageadmin.py, duplicate i PageAdmin.has_add_permission sprawdzają tylko, czy pracownik może dodać stronę. Spreparowana wartość źródła może skopiować każdy placeholder i wtyczkę z nieautoryzowanej strony z permissions=False, usuwając ograniczenia widoczności źródła i ujawniając treści między witrynami lub ograniczonymi poddrzewami, gdy CMS_PERMISSION jest włączone.
- CVE-2026-61663Średnie
django CMS przed wersją 5.0.9 zawiera podatność w render_object_structure, która nie autoryzuje obiektów niebędących PageContent używających PlaceholderRelationField. Aktywny pracownik bez uprawnień cms.use_structure lub uprawnień do przeglądania/zmiany na poziomie modelu może zażądać endpointu //admin/cms/placeholder/object/<content_type_id>/structure/<object_id>/ z odgadniętymi wartościami content_type_id i object_id. Odpowiedź ujawnia nazwy slotów placeholderów, drzewa wtyczek, identyfikatory wtyczek, etykiety i istnienie obiektów dla obiektów edytowalnych we frontendzie. Poprawka stosuje user_can_view_placeholder_source do gałęzi nie-PageContent, pozostawiając tablicę struktury tylko do odczytu dla użytkowników z uprawnieniami tylko do przeglądania.
- CVE-2026-54624Średnie
django CMS przed wersją 5.0.8 zawiera podatność w render_object_structure w cms/views.py, która renderuje cms/toolbar/structure.html dla obiektu PageContent bez wywołania user_can_view_page(). Każde konto pracownika może zażądać struktury ograniczonej strony, gdy CMS_PERMISSION jest włączone i strona ma ograniczenia widoczności lub CMS_PUBLIC_FOR jest ustawione na staff. Odpowiedź ujawnia wartości get_short_description() wtyczek, w tym nazwy linków, adresy URL i fragmenty tekstu, a nie tylko kształt strony.
- CVE-2026-54622Średnie
django CMS przed wersją 5.0.8 zawiera podatność w punkcie końcowym copy_plugins, który autoryzuje tylko docelowy schowek, ale nie sprawdza źródłowego placeholdera. Użytkownik personelu z globalnym uprawnieniem dodawania dla typu wtyczki może kopiować wtyczki z nieautoryzowanych stron i odczytywać sekretne teksty, nazwy linków i adresy URL.
- CVE-2026-54623Wysokie
django CMS to łatwy w użyciu i przyjazny dla programistów system zarządzania treścią dla przedsiębiorstw oparty na Django. Przed wersją 5.0.8 punkt końcowy move_plugin w cms/admin/placeholderadmin.py akceptuje kontrolowaną przez atakującego wartość plugin_parent bez odrzucania identyfikatora własnego pluginu lub identyfikatora potomka. Użytkownik personelu z uprawnieniami do zmiany pluginu w ramach CMS_PERMISSION może utworzyć cykl parent_id w drzewie pluginów. Zapytania _get_descendants_cte i _get_ancestors_cte w cms/models/pluginmodel.py nie mają zabezpieczenia przed cyklem, więc get_descendants() i późniejsze operacje renderowania, kopiowania lub usuwania mogą rekurencyjnie działać w nieskończoność lub osiągnąć limit rekurencji bazy danych, uszkadzając drzewo i zużywając wątki robocze. Problem został naprawiony w wersji 5.0.8.
Oryginalny opis (angielski, źródło NVD)
django CMS is a content management system powered by Django. Prior to 5.0.8 and in 5.1.0a1, the django CMS page cache in cms/cache/page.py ignores request headers declared by plugins through get_vary_cache_on(). The _page_cache_key function includes the cache prefix, site, language, path, and timezone but not the declared header values. Although set_page_cache adds those names to the response Vary header, get_page_cache retrieves the first stored variant under the same header-agnostic key. When CMS_PAGE_CACHE is enabled and a plugin varies content on a header such as Country-Code, one visitor can receive another visitor’s request-specific content, and an unauthenticated attacker can prime the cache with attacker-chosen content. This issue is fixed in versions 5.0.8 and 5.1.0.

