CVE-2023-37897
WysokieCVSS 7.2Prawdopodobieństwo exploitacji (EPSS)
Wysokie ryzykoPercentyl 81 - wyżej niż 81% wszystkich znanych CVE
Streszczenie
Grav, platforma webowa oparta na plikach w PHP, jest podatna na atak typu server side template injection (SSTI). Wersja 1.7.42 i nowsze mają błąd w funkcji `isDangerousFunction()`, co pozwala na wykonanie złośliwego kodu poprzez dodanie podwójnego ukośnika (`\`).
Ocena ryzyka
Atakujący z dostępem do konta administratora lub konta użytkownika z dostępem do panelu administracyjnego może wykorzystać tę podatność do wykonania nieautoryzowanego kodu na serwerze.
Rekomendacja
Zaleca się aktualizację do wersji 1.7.42.2, która zawiera poprawkę dla tej podatności. Brak znanych obejść dla tego problemu.
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 is a file-based Web-platform built in PHP. Grav is subject to a server side template injection (SSTI) vulnerability. The fix for another SSTI vulnerability using `|map`, `|filter` and `|reduce` twigs implemented in the commit `71bbed1` introduces bypass of the denylist due to incorrect return value from `isDangerousFunction()`, which allows to execute the payload prepending double backslash (`\\`). The `isDangerousFunction()` check in version 1.7.42 and onwards retuns `false` value instead of `true` when the `\` symbol is found in the `$name`. This vulnerability can be exploited if the attacker has access to: 1. an Administrator account, or 2. a non-administrator, user account that has Admin panel access and Create/Update page permissions. A fix for this vulnerability has been introduced in commit `b4c6210` and is included in release version `1.7.42.2`. Users are advised to upgrade. There are no known workarounds for this vulnerability.

