Średnia

Contao: Nieprawidłowa kontrola dostępu w voterze dostępu do tabel

  • Ujawniono: 09.10.2026
  • Aktualizacja: 11.10.2026 10:33

Z powodu błędu buforowania w mechanizmie security voter, kontrolującym dostęp do tabel w Data Container (DCA) panelu administracyjnego Contao, użytkownik zaplecza o niskich uprawnieniach (niebędący administratorem) może uzyskać nieautoryzowany dostęp do odczytu, tworzenia, modyfikacji oraz usuwania danych z tabel bazy danych wykraczających poza uprawnienia przypisanych mu modułów. Obejmuje to tabele zawierające wrażliwe dane osobowe, takie jak konta użytkowników frontendowych oraz adresy e-mail subskrybentów newslettera.

Szczegóły podatności

Panel administracyjny Contao jest zorganizowany w moduły (np. „Aktualności”, „Użytkownicy”). Każdy użytkownik zaplecza jest przypisany do grupy, która określa, z którymi modułami, a tym samym tabelami bazy danych, może pracować. Zanim Contao zezwoli na operację na danej tabeli, weryfikuje, czy grupa użytkownika posiada do niej uprawnienia.

Aby uniknąć wielokrotnego powtarzania tego sprawdzenia, Contao zapamiętuje wynik na czas trwania żądania HTTP. Problem polega na tym, że wynik jest zapisywany pod niewłaściwym identyfikatorem: zamiast zapamiętać, czy użytkownik ma dostęp do konkretnej tabeli X, system rejestruje jedynie ogólny fakt posiadania dostępu do zasobu, bez wskazania docelowej tabeli.

W rezultacie, jeśli w ramach jednego żądania najpierw sprawdzana jest tabela, do której użytkownik MA dostęp, a następnie inna tabela, do której uprawnień NIE POSIADA, Contao ponownie wykorzystuje wcześniejszą odpowiedź. Użytkownik uzyskuje w ten sposób dostęp do tabeli, do której jego grupa nie miała uprawnień.

Szczegóły techniczne

Panel administracyjny Contao egzekwuje kontrolę dostępu na poziomie tabel poprzez łańcuch voterów bezpieczeństwa Symfony. Kluczowym elementem jest TableAccessVoter::hasAccessToModule() w core-bundle/src/Security/Voter/DataContainer/TableAccessVoter.php:

php
    private array $canAccessTable = [];
    private array $canReadAccessTable = [];
 
    private function hasAccessToModule(TokenInterface $token, ...): bool
    {
        $tokenHash = hash('xxh128', serialize($token));
 
        if (isset($this->canAccessTable[$tokenHash]) || (...)) {
            return $this->canAccessTable[$tokenHash] ?? $this->canReadAccessTable[$tokenHash];
        }
 
        $table = $subject->getDataSource();
 
        foreach ($GLOBALS['BE_MOD'] as $modules) {
            ...
            return $this->canAccessTable[$tokenHash] = true;  // or false
        }
    }

Klucz pamięci podręcznej, $tokenHash, jest tworzony wyłącznie na podstawie tokena bezpieczeństwa bieżącego użytkownika i nie zawiera nazwy weryfikowanej tabeli. Ponieważ TableAccessVoter jest standardową, współdzieloną usługą Symfony, pamięć ta pozostaje aktywna przez cały czas trwania żądania HTTP. Pierwsza sprawdzona tabela determinuje więc wynik z pamięci podręcznej dla wszystkich kolejnych tabel weryfikowanych w tym samym żądaniu, niezależnie od tego, czy jest on prawidłowy dla kolejnej tabeli.

Sytuację pogarsza DefaultDataContainerVoter, voter pomocniczy o niskim priorytecie, który zezwala na dostęp związany z tabelą, o ile żaden inny voter wyraźnie go nie odrzuci. Kiedy TableAccessVoter zwraca neutralną odpowiedź („brak opinii”) ze względu na nieaktualną pamięć podręczną, voter pomocniczy traktuje to jako pełne przyznanie uprawnień.

Większość tabel bazy danych w Contao nie posiada dodatkowej weryfikacji. Zabezpieczenie takie mają wyłącznie tl_content, tl_favorites, tl_form, tl_form_field, tl_module, tl_image_size(_item), tl_job, tl_layout, tl_page, tl_preview_link, tl_undo oraz tl_user. Tabele takie jak tl_member (dane członków serwisu), tl_newsletter_recipients (adresy e-mail subskrybentów), tl_news, tl_calendar_events, tl_faq i tl_comments polegają wyłącznie na wadliwym mechanizmie opisanym powyżej.

Podziękowania

Podatność została wykryta przez Svena Jägera z SySS GmbH.

Co trzeba zrobić

Zaktualizuj pakiet contao/core-bundle do wersji 5.7.12 lub nowszej.

Czego dotyczy

Kliknij technologię, aby zobaczyć wszystkie dotyczące jej podatności.

PlatformaPaczkaPodatne wersjePoprawka w wersji
Paczka Composer contao/core-bundle >= 5.7.0, < 5.7.12 5.7.12

Odnośniki

Ocena CVSS 4.3/10
Wektor CVSS
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N
Słabość (CWE)
CWE-524, CWE-863
Platforma
Composer
Paczka
contao/core-bundle
Ujawniono
09.10.2026
Aktualizacja
11.10.2026 10:33

Źródła i licencje · Redakcja lub tłumaczenie: DockRay. Zachowano prawa źródeł i obowiązujące licencje.

OSV / GitHub Advisory Database - GHSA-5974-gfqc-wrcm - CC BY 4.0

Historia podatności: contao/core-bundle

Wszystkie opisane podatności tej paczki (Paczka Composer), od najnowszej. Widać, czy to jednorazowa wpadka, czy paczka, której trzeba pilnować.

Wszystkie (40) w archiwum
Wszystkich wpisów
40
Pierwsza → ostatnia
12.2019 10.2026
Bez poprawki
0
Wykorzystywana w atakach
0

Rozkład istotności

  • Krytyczna 4
  • Wysoka 7
  • Średnia 23
  • Niska 6

Ujawnienia w latach

  1. 2019: 3
  2. 2020: 1
  3. 2021: 4
  4. 2022: 8
  5. 2023: 1
  6. 2024: 7
  7. 2025: 7
  8. 2026: 9
Istotność:
  1. Contao: Nieprawidłowa kontrola dostępu w voterze dostępu do tabel ten wpis
    Średnia · 4.3 CVE-2026-107851 >= 5.7.0, < 5.7.12 5.7.12
  2. Wysoka · 8.3 CVE-2024-45398 >= 4.0.0, < 4.13.49, >= 5.0.0, < 5.3.15, >= 5.4.0, < 5.4.3 4.13.49, 5.3.15, 5.4.3
  3. Wysoka · 8.3 CVE-2024-28235 >= 4.9.0, < 4.13.40, >= 5.0.0-RC1, < 5.3.4 4.13.40, 5.3.4
  4. Krytyczna · 9.8 CVE-2019-11512 >= 4.1.0, < 4.4.39, >= 4.5.0, < 4.7.5 4.4.39, 4.7.5
  5. Krytyczna · 9.8 CVE-2017-16558 >= 4.0.0, < 4.4.8, >= 3.0.0, <= 3.5.30 4.4.8
  6. Wysoka · 7.2 CVE-2022-24899 >= 4.13.0, < 4.13.3 4.13.3
  7. Wysoka · 8.8 CVE-2019-10642 >= 4.7.0, < 4.7.3 4.7.3
  8. Krytyczna · 9.8 CVE-2019-10641 >= 4.0.0, < 4.4.37, >= 4.5.0, < 4.7.3 4.4.37, 4.7.3
  9. Wysoka · 8.8 CVE-2017-10993 >= 4.0.0, < 4.4.1 4.4.1
  10. Krytyczna · 9.8 CVE-2019-10643 >= 4.7.0, < 4.7.3 4.7.3
  11. Wysoka · 8.0 CVE-2021-37627 >= 4.0.0, < 4.4.56, >= 4.5.0, < 4.9.18, >= 4.10.0, < 4.11.7 4.4.56, 4.9.18, 4.11.7
  12. Wysoka · 8.8 CVE-2019-19745 >= 4.0.0, < 4.4.46, >= 4.5.0, < 4.8.6 4.4.46, 4.8.6

Dowiedz się, które podatności dotyczą Twojej aplikacji

Po podłączeniu integracji DockRay i włączeniu raportowania oprogramowania DockRay porównuje zgłoszone wersje komponentów ze znanymi podatnościami i powiadamia o potwierdzonych dopasowaniach. Zakres zależy od obsługiwanej technologii i dostępnych biuletynów.

Podłącz swoją aplikację
Newsletter DockRay

Bezpieczeństwo aplikacji w Twojej skrzynce

Najważniejsze podatności, konkretne zalecenia i praktyczne wskazówki dla Twoich aplikacji. Wybierz technologie i śledź to, co ma znaczenie dla Twojego projektu.

  • Codzienne zestawienie nowych podatności, także krytycznych.
  • Powiadomienia o ważnych aktualizacjach.
  • Praktyczne porady o bezpieczeństwie i monitoringu aplikacji.

Pozostaw puste, aby otrzymywać informacje o wszystkich technologiach.

Zapis jest bezpłatny. Wypiszesz się jednym kliknięciem w wiadomości.