CVE-2026-76846
WysokieCVSS 7.5Prawdopodobieństwo exploitacji (EPSS)
Niskie ryzykoPercentyl 15 - wyżej niż 15% wszystkich znanych CVE
Streszczenie
Grav przed wersją 2.0.16 zawiera niekompletną domyślną listę blokowania w konfiguracji sandboxa Twig, która nie blokuje dostępu do sekretów konfiguracji systemu. Atakujący z uprawnieniami edycji stron mogą użyć config.get() lub config.toArray() w szablonach Twig, aby pobrać wrażliwe wartości, takie jak system.cache.redis.password, gdy config_access jest włączony.
Ocena ryzyka
Ryzyko obejmuje ujawnienie poufnych danych konfiguracyjnych, takich jak hasła, co może prowadzić do nieautoryzowanego dostępu do systemów zewnętrznych lub dalszych ataków.
Rekomendacja
Zaleca się aktualizację Grav do wersji 2.0.16 lub nowszej oraz ograniczenie uprawnień edycji stron tylko do zaufanych użytkowników.
Inne podatności w Grav
Zobacz wszystkie- CVE-2026-53654Średnie
Grav przed wersją 3.8.5 w zadaniu twofa_cancel wtyczki Login akceptuje kontrolowane przez klienta pole _redirect bez nonce i pozwala nieuwierzytelnionemu żądaniu ustawić zewnętrzny cel Location (http, https lub protocol-relative). Controller::execute() stosuje to pole, gdy taskTwofa_cancel() nie ustawia przekierowania, a Grav::getRedirectResponse() akceptuje cel przez Uri::isExternal(), umożliwiając phishingowe przekierowania z zaufanego hosta Grav.
- CVE-2026-75834Średnie
Grav przed wersją 2.0.14 zawiera podatność na przechowywany cross-site scripting w funkcji Security::detectXss() (system/src/Grav/Common/Security.php). Wszystkie wzorce wykrywania XSS używają modyfikatora PCRE /u (UTF-8), więc pojedynczy nieprawidłowy bajt UTF-8 w treści strony powoduje, że preg_match() zwraca false dla każdego wzorca, po cichu omijając bramkę bezpieczeństwa XSS przy zapisie (Validation::checkSafety()). Uwierzytelniony atakujący z uprawnieniami do edycji stron (bez uprawnienia security.xss_whitelist) może przechowywać złośliwy JavaScript, który wykonuje się w przeglądarce odwiedzającego daną stronę.
- CVE-2026-75831Wysokie
Grav przed wersją 2.0.15 zawiera podatność na trwały cross-site scripting w renderowaniu mediów audio i wideo przez metodę sourceParsedownElement. Fragment URL mediów jest konkatenowany bez ucieczki do elementów źródłowych rawHtml, co pozwala atakującym na wstrzyknięcie dowolnego HTML i JavaScript, który wykonuje się w sesjach przeglądających.
- CVE-2026-75828Wysokie
Grav przed wersją 2.0.15 zawiera podatność na trwały cross-site scripting w funkcji detectXss(), gdzie niesparowane cudzysłowy w niecytowanych wartościach atrybutów omijają wykrywanie procedur obsługi zdarzeń. Uwierzytelnieni edytorzy mogą wstrzyknąć procedury obsługi zdarzeń, takie jak onerror=, które przechodzą walidację i wykonują się w przeglądarkach odwiedzających podczas renderowania treści strony.
- CVE-2026-74907Średnie
Grav przed wersją 2.0.15 zawiera podatność na path traversal w serwerze statycznych zasobów w index.php, który używa dopasowania prefiksu string zamiast walidacji granic katalogów. Nieuwierzytelnieni atakujący mogą uzyskać dostęp do plików w katalogach sąsiednich, wykorzystując nazwy katalogów, które rozszerzają bazową ścieżkę string, takie jak żądanie assets-secret, gdy assets jest skonfigurowaną bazą.
- CVE-2026-72832Średnie
Grav w wersjach od 1.5.2 do 2.0.12 zawiera podatność na trwały cross-site scripting (XSS) w funkcji Security::detectXss() (system/src/Grav/Common/Security.php). Skanowanie obsługi zdarzeń jest zakotwiczone na `<` i używa `[^>]*?`, które nie może przekroczyć pierwszego dosłownego `>`; gdy `>` pojawi się wewnątrz wartości atrybutu w cudzysłowie, przeglądarka utrzymuje tag otwarty i parsuje kolejny moduł obsługi zdarzeń (np. onerror), więc detektor i przeglądarka są w niezgodzie. Edytor strony bez uprawnień admin.super może zapisać treść strony taką jak `<img src=x title=">" onerror=alert(document.domain)>`, która jest akceptowana, przechowywana i wykonywana w originie witryny, gdy dowolny odwiedzający (w tym nieuwierzytelnieni użytkownicy) przegląda stronę. Naprawiono w wersji 2.0.13.
- CVE-2026-61455Średnie
Grav przed wersją 2.0.1 zawiera podatność na bombę dekompresyjną w metodzie ZipArchiver::extract(), która nie ogranicza rozmiaru po dekompresji, liczby plików ani głębokości zagnieżdżenia. Atakujący może dostarczyć spreparowane archiwum ZIP, które po rozpakowaniu wypełnia całe dostępne miejsce na dysku, powodując odmowę usługi poprzez wyczerpanie zasobów pamięci masowej.
- CVE-2026-61450Średnie
Grav przed wersją 2.0.2 zawiera obejście sandboksa Twig, które pozwala autorowi strony (każdemu użytkownikowi z uprawnieniami admin.pages lub osobie mogącej pisać do katalogu user/pages) na wyciek sekretów konfiguracyjnych. Mimo że sandboks zastępuje zmienną 'config' okrojoną fasadą i usuwa metody Config::get/toArray z listy dozwolonych, surowy kontener pozostaje dostępny przez dozwoloną metodę grav.offsetGet('config'), która zwraca oryginalny obiekt Config. Dozwolone filtry dumpowania obiektów (json_encode, print_r, yaml_encode) serializują ten obiekt na poziomie PHP bez wywoływania bramki metod sandboksa, ujawniając pełne drzewo konfiguracji, w tym sekrety wtyczek, takie jak dane uwierzytelniające SMTP, klucze API i dane uwierzytelniające bazy danych wtyczek.
- CVE-2026-58657Średnie
Grav przed wersją 2.0.0 (aż do 2.0.0-rc.9 i gałęzi 2.0) zawiera podatność na przechowywane wstrzykiwanie CSS w akcji mediów Markdown image resize(). Wcześniejsze zabezpieczenia odrzucają bezpośrednie ładunki ?style= i niebezpieczne funkcje fallback, ale akcja resize() w Excerpts::processMediaActions() zapisuje wartości kontrolowane przez wywołującego bezpośrednio do atrybutu styleAttributes obrazu. Redaktor treści z niższymi uprawnieniami, który może edytować Markdown strony, może przechowywać spreparowany URL obrazu z deklaracjami CSS oddzielonymi średnikami w parametrach resize, które są renderowane w końcowym atrybucie <img style=...> gdy recenzent/admin z wyższymi uprawnieniami przegląda stronę lub podgląd.
- CVE-2026-56701Średnie
Grav przed wersją 2.0.0-beta.2 zawiera podatność na wstrzykiwanie zewnętrznych jednostek XML (XXE) w procesie przesyłania plików SVG, co pozwala uwierzytelnionym atakującym na odczyt dowolnych plików. Aplikacja używa funkcji simplexml_load_string bez wyłączenia ładowania zewnętrznych jednostek, co umożliwia atakującym wstrzykiwanie ładunków XXE za pomocą złośliwych plików SVG.
Oryginalny opis (angielski, źródło NVD)
Grav before 2.0.16 contains an incomplete default denylist in the Twig sandbox configuration that fails to block access to system configuration secrets. Attackers with page-edit permission can use config.get() or config.toArray() in Twig templates to retrieve sensitive values like system.cache.redis.password when config_access is enabled.

