CVE-2026-75526
ŚrednieCVSS 4.4Prawdopodobieństwo exploitacji (EPSS)
Niskie ryzykoPercentyl 6 - wyżej niż 6% wszystkich znanych CVE
Streszczenie
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.
Ocena ryzyka
Atakujący może wstrzyknąć złośliwy kod HTML/JavaScript, który wykona się w przeglądarce edytora, co może prowadzić do kradzieży sesji, przejęcia konta lub innych ataków po stronie klienta.
Rekomendacja
Zaktualizuj django CMS do wersji 5.0.9 lub nowszej, która zawiera poprawkę używającą format_html do escapowania komunikatu przed zwróceniem bezpiecznego wyjścia placeholdera.
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-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-54625Średnie
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.
- 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 an easy-to-use and developer-friendly enterprise content management system powered by Django. From 5.0.8 until 5.0.9, ContentRenderer.render_placeholder in cms/plugin_rendering.py can pass stored, attacker-controlled values to ContentRenderer.render_exception when plugin rendering fails in edit mode. Values from get_short_description(), the exception message, the placeholder, or placeholder.source are interpolated into a cms-rendering-exception heading and later returned through mark_safe. Because the heading is not escaped, stored HTML executes in an editor’s browser, and settings.DEBUG does not prevent the custom heading from rendering. The fix uses format_html to escape the message before safe placeholder output is returned. This issue is fixed in versions 5.0.9.

