Podatności Grav
41 znanych podatności CVE w Grav, przetłumaczonych i ocenionych.
- 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.
- CVE-2026-44738Wysokie
Grav to platforma internetowa oparta na plikach. W wersjach przed 2.0.0-rc.2, lista dozwolonych działań w sandboxie Twig pozwalała każdemu użytkownikowi z rolą admin.pages na wywołanie config.toArray() w treści strony, co skutkowało wyświetleniem całej zintegrowanej konfiguracji witryny, w tym tajemnic pluginów.
- CVE-2026-42611Wysokie
Grav to platforma internetowa oparta na plikach. Przed wersją 2.0.0-beta.2, użytkownik o niskich uprawnieniach mógł wprowadzić element svg, co prowadziło do ataku XSS, który mógł być eskalowany do zrzutu informacji systemowych dostępnych w /admin/config/info, gdy Super Admin odwiedzał stronę.
- CVE-2026-75837Krytyczne
Grav przed wersją 2.0.14 nie zabezpiecza pola access w podstawowym blueprint grupy wymaganym ograniczeniem security@: admin.super. Delegowany operator admin.users może zapisać grupę z access[admin][super]=true, aby eskalować do super-admina, uzyskując możliwości planowania i ewaluacji Twig.
- CVE-2026-65008Krytyczne
Grav 2.0.4 (poprawiony w 2.0.7) zawiera podatność na zdalne wykonanie kodu w funkcji Blueprint::dynamicData(). Funkcja ta przekazuje ciąg znaków wywołania metody klasy i jej argumenty bezpośrednio do call_user_func_array() bez żadnej listy dozwolonych wartości. Ponieważ wtyczka formularza kieruje frontmatter stron przez tę ścieżkę, uwierzytelnione konto z uprawnieniami admin.pages (lub api.pages.write) może umieścić złośliwą dyrektywę wywołania na stronie. Polecenie wykonuje się jako użytkownik serwera WWW, gdy ktokolwiek – w tym nieuwierzytelniony gość – uzyska dostęp do strony.
- CVE-2025-66844Krytyczne
W grav przed wersją 1.7.49.5, wektor SSRF (Server-Side Request Forgery) może być wyzwolony przez szablony Twig, gdy treść strony jest przetwarzana przez Twig, a konfiguracja pozwala na rejestrację niezdefiniowanych funkcji PHP.
- CVE-2025-66301Krytyczne
Grav to platforma webowa oparta na plikach. Przed wersją 1.8.0-beta.27, z powodu niewłaściwych kontroli autoryzacji przy modyfikowaniu krytycznych pól w żądaniu POST do /admin/pages/{page_name}, edytor z uprawnieniami tylko do zmiany podstawowej treści formularza może zmienić działanie formularza poprzez modyfikację zawartości data[_json][header][form], czyli YAML frontmatter, który zawiera sekcję process określającą, co dzieje się po wysłaniu formularza, w tym ważne akcje mogące prowadzić do dalszych podatności. Podatność naprawiona w wersji 1.8.0-beta.27.
- CVE-2026-76846Wysokie
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.
- CVE-2026-76839Średnie
Grav przed wersją 2.0.16 umożliwia sandboxowanym szablonom Twig dostęp do wrażliwych pól użytkownika poprzez dozwolone metody offsetGet() i offsetexists(), które nie filtrują pól. Atakujący z uprawnieniami do edycji stron może wywołać offsetGet() na obiektach User, aby wyodrębnić zahaszowane hasła i sekrety 2FA, co umożliwia ataki brute-force i obejście uwierzytelniania.
- CVE-2026-72695Wysokie
Grav przed wersją 2.0.16 zawiera podatność na przechodzenie po ścieżkach w MediaUploadTrait::deleteFile(), która pozwala zautentykowanym użytkownikom z uprawnieniami zarządzania mediami na usuwanie dowolnych plików poprzez podanie nazw plików z sekwencjami przechodzenia po katalogach. Metoda waliduje tylko część nazwy pliku (basename), zachowując niezwalidowane ścieżki katalogów zawierające sekwencje ../, które są przekazywane do unlink(), umożliwiając usunięcie plików poza zamierzonym katalogiem przechowywania mediów.
- CVE-2026-56709Wysokie
Grav przed wersją 3.9.2 nie waliduje niezaufanych nagłówków Host w funkcji sendInvitationEmail() podczas konstruowania linków zaproszeń zawierających tokeny. Atakujący mogą manipulować nagłówkiem Host, aby zatruć linki zaproszeń i przekierować użytkowników do domen kontrolowanych przez atakującego, omijając ochronę require_trusted_host, która obejmuje tylko przepływy resetowania hasła.
- CVE-2026-64850Wysokie
Grav przed wersją 2.0.7 zawiera podatność w Blueprint::dynamicData() w system/src/Grav/Common/Data/Blueprint.php, która przekazuje kontrolowany przez edytora dostawcę Class::method i argumenty do call_user_func_array() bez odrzucania niebezpiecznych parametrów wywołania zwrotnego. Konto z uprawnieniem admin.pages lub api.pages.write może użyć Grav\Common\Utils::arrayFilterRecursive() jako trampoliny z system jako wywołaniem zwrotnym, umieścić polecenie we frontmatter strony i wykonać je jako użytkownik serwera WWW podczas przeglądania strony. Problem został naprawiony w wersji 2.0.7.
- CVE-2026-62673Wysokie
Grav przed wersją 2.0.4 zawiera reguły bezpieczeństwa .htaccess, które porównują wzorce katalogów i rozszerzeń plików w sposób rozróżniający wielkość liter, bez flagi [NC]. Na systemach plików nie rozróżniających wielkości liter, nieuwierzytelniony atakujący może użyć wielkich liter, aby ominąć reguły i pobrać pliki z katalogów user/accounts lub user/config, w tym hasze haseł i konfigurację bezpieczeństwa. Problem naprawiono w wersji 2.0.4.
- CVE-2026-62672Średnie
Grav przed wersją 2.0.4 zezwala na użycie filtra i funkcji regex_replace w allowliście, a GravExtension::regexReplace() przekazuje wzorzec kontrolowany przez edytora bezpośrednio do preg_replace(). Przy włączonym security.twig_content.process_enabled, uwierzytelniony edytor strony może opublikować wzorzec powodujący katastrofalne cofanie się, co obciąża CPU PHP i powoduje odmowę usługi dla odwiedzających.
- CVE-2026-61842Średnie
Grav przed wersją 2.0.2 w sandboxie Twig pozwala na użycie grav.offsetGet('config') do uzyskania surowego obiektu konfiguracji oraz na serializację tego obiektu przez json_encode, print_r, yaml_encode i filtry string bez przechodzenia przez GravSecurityPolicy::checkMethodAllowed. Użytkownik z uprawnieniami edytora strony może renderować zawartość sandboxowaną, która ujawnia sekrety konfiguracji pluginów, w tym dane SMTP, klucze API i dane uwierzytelniające baz danych.
- CVE-2026-61690Średnie
Grav przed wersją 2.0.1 w metodzie ZipArchiver::extract() przekazuje archiwa do ZipArchive::extractTo() bez egzekwowania limitów rozmiaru, liczby plików i głębokości zagnieżdżenia z system.gpm.archive. Kod używający Archiver::create('zip') do rozpakowania archiwum kontrolowanego przez atakującego może wyczerpać miejsce na dysku lub inody, czyniąc stronę niedostępną.
- CVE-2026-75827Wysokie
Grav przed wersją 2.0.15 zawiera podatność na dowolny zapis plików w walidacji dynamicznych danych Blueprint, która używa niekompletnej listy blokowanych zamiast pozytywnej listy dozwolonych. Atakujący z uprawnieniami do edycji stron lub konfiguracji blueprint mogą wywołać funkcję error_log za pomocą dyrektywy data, aby dodać ładunki PHP do plików dostępnych z sieci, osiągając zdalne wykonanie kodu.
- CVE-2026-72820Średnie
Grav przed wersją 2.0.13 nieprawidłowo waliduje ścieżki główne profili kopii zapasowych, co pozwala atakującym na archiwizowanie katalogów poza GRAV_ROOT, gdy nie znajdują się one na twardo zakodowanej liście zabronionych. Atakujący z dostępem do edycji profili mogą skonfigurować profile z ścieżkami przejścia, aby ujawnić wrażliwe pliki z lokalizacji takich jak /opt, /mnt lub /srv.
- CVE-2026-65608Wysokie
Podatność zdalnego wykonania kodu (RCE) w Grav w wersjach od 1.7.0 do 2.0.9. Funkcja FlexDirectory::dynamicDataField() wywołuje call_user_func_array() na danych kontrolowanych przez atakującego, bez ograniczeń na niebezpieczne funkcje, takie jak exec czy system. Uwierzytelniony użytkownik z uprawnieniami do tworzenia lub aktualizacji w dowolnym katalogu Flex może wykonać dowolne polecenia powłoki na serwerze.
- CVE-2026-64628Średnie
W systemie Grav występuje podatność na trwałe XSS w atrybutach shortcode, ponieważ skanowanie XSS wykrywa tylko literały z nawiasami ostrymi. Atakujący z uprawnieniami admin.pages może wstrzyknąć złośliwy JavaScript, który wykona się w przeglądarce każdego użytkownika, w tym administratorów.
- CVE-2026-62237Średnie
Grav przed wersją 2.0.4 zawiera podatność na odmowę usługi przez wyrażenia regularne (ReDoS) w filtrze i funkcji regex_replace, które są dozwolone w piaskownicy treści Twig. Gdy przetwarzanie Twig w treści strony jest włączone (domyślnie wyłączone), uwierzytelniony edytor strony może dostarczyć katastrofalnie cofający się wzorzec PCRE, który jest przekazywany bezpośrednio do preg_replace() w PHP, powodując nieograniczone zużycie CPU i odmowę usługi dla procesu serwera WWW.
- CVE-2026-62234Wysokie
Podatność w Grav przed wersją 2.0.4: brak ograniczeń protokołów cURL w webhookach. Uwierzytelnieni użytkownicy z uprawnieniami api.webhooks.write mogą tworzyć webhooki z URL-ami file://, dict:// lub gopher://.
- CVE-2026-62232Wysokie
Grav przed wersją 2.0.4 zawiera podatność w logowaniu, która pozwala na ominięcie uwierzytelniania dwuskładnikowego (2FA). Atakujący znający hasło ofiary może wywołać zadanie regenerate2FASecret bez tokena CSRF, nadpisując tajny klucz 2FA własną wartością, a następnie wygenerować poprawny kod TOTP i zalogować się, redukując 2FA do ochrony tylko hasłem.
- CVE-2026-62230Wysokie
Grav przed wersją 2.0.4 zawiera domyślny plik .htaccess, w którym reguły blokujące dostęp do wrażliwych typów plików (.yaml, .php, .json itp.) nie mają flagi [NC], co powoduje, że dopasowanie rozszerzeń jest rozróżniane pod względem wielkości liter. Na systemach plików nie rozróżniających wielkości liter (Windows/NTFS, macOS/HFS+ lub woluminy Docker) nieuwierzytelniony atakujący może żądać tych plików z rozszerzeniami pisanymi wielkimi lub mieszanymi literami (np. .YAML, .PHP), aby ominąć ograniczenia i odczytać wrażliwe pliki konfiguracyjne zawierające klucze API i dane uwierzytelniające.
- CVE-2026-61873Wysokie
Podatność w Grav przed wersją 9.1.8 umożliwia zapis dowolnych plików poprzez parametr process.save.filename wtyczki Form. Walidacja przed przetwarzaniem Twig nie jest powtarzana po renderowaniu, co pozwala atakującym na ominięcie zabezpieczeń i zapisanie plików, w tym webshelli PHP, do katalogu głównego lub innych wrażliwych lokalizacji.
- CVE-2026-61453Średnie
Grav v2.0.0 zawiera podatność na atak XSS, naprawioną w wersji 2.0.1. Walidator blueprintów XSS (Security::detectXss()) sprawdza surową treść strony przed przetworzeniem przez Twig. Gdy przetwarzanie treści Twig jest włączone (twig_content.process_enabled: true), atakujący z uprawnieniami API do zapisu strony może użyć operatora konkatenacji ciągów Twig (~) do dynamicznego konstruowania nazw procedur obsługi zdarzeń, niebezpiecznych nazw tagów lub protokołów w czasie renderowania (np. {% set x = "on" ~ "error" %}). Walidator widzi tylko nieszkodliwe wyrażenie Twig i przepuszcza treść, ale po renderowaniu przez Twig (wyświetlane przez {{ page.content|raw }}) wynik zawiera aktywny ładunek, np. <img src=1 onerror=alert(1)>, wykonujący dowolny JavaScript w przeglądarkach odwiedzających.
- CVE-2026-61449Średnie
Grav 2.0.1 zawiera obejście limitu rozmiaru bomby dekompresyjnej w ZipArchiver i GPM\Installer. Atakujący może dostarczyć spreparowane archiwum ZIP z fałszywymi małymi rozmiarami wpisów, które ominie limit, a podczas ekstrakcji zapisze rzeczywiste, znacznie większe dane, prowadząc do zapełnienia dysku lub wyczerpania i-węzłów.
- CVE-2026-59193Średnie
Podatność w Grav przed wersją 2.0.0 pozwala uwierzytelnionemu użytkownikowi z rolą admin.super na spowodowanie awarii systemu lub zapełnienie dysku poprzez przesłanie specjalnie spreparowanego archiwum ZIP za pomocą narzędzia Direct Install. Problem wynika z braku ograniczeń w funkcji unZip dotyczących rozmiaru nieskompresowanych danych, liczby wpisów ani głębokości katalogów.
- CVE-2026-55890Średnie
Grav przed wersją 2.0.0-rc.9 zawiera podatność na trwałe XSS przez atrybut stylu obrazka Markdown. Niekompletna poprawka dla CVE-2026-42841 pozostawia metodę MediaObjectTrait::style dostępną przez ten sam potok akcji, co pozwala edytorowi zapisać parametry stylu obrazka bez sanityzacji.
- CVE-2026-55885Średnie
Podatność w Grav umożliwia uwierzytelnionemu administratorowi z uprawnieniami do tworzenia kopii zapasowych pobranie archiwum ZIP zawierającego pełną instalację Grav, w tym plik user/accounts/admin.yaml z hashem hasła administratora oraz katalog user/config z konfiguracją witryny. Problem występuje w wersjach przed 1.7.53 i został naprawiony w tej wersji.
- CVE-2026-53653Wysokie
Grav, platforma webowa oparta na plikach, zawiera podatność pozwalającą niezalogowanemu atakującemu na wyczerpanie pamięci serwera i mocy CPU poprzez żądanie przetworzenia obrazów o nadmiernych wymiarach. Problem występuje w mechanizmie `Grav::fallbackUrl`, który przekazuje parametry żądania do akcji magicznych ImageMedium bez ograniczenia rozmiaru lub liczby pikseli.
- CVE-2023-37897Wysokie
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 (`\`).

