Przejdź do treści
INDEKS ANALIZ BREACHROAD / NOTA TECHNICZNA

TYPO3 Powermail CVE-2026-77136: aktywne SSTI przez pole nadawcy

Anonimowy formularz przekazywał sender_name jako źródło Fluid View. Analiza aktywnej eksploatacji, ViewHelperów, wersji 10.9.3/12.6.1/13.2.1 i reagowania.

MATERIAŁ PUBLICZNY
AUTOR
/ CEO Breachroad · OSCP · PNPT
PUBLIKACJA
25 sierpnia 2026
CZAS CZYTANIA
19 min czytania
TEMAT
Zagrożenia i incydenty
TYPO3 Powermail CVE-2026-77136: aktywne SSTI przez pole nadawcy

TYPO3 opublikował 25 sierpnia krytyczne ostrzeżenie dotyczące rozszerzenia Powermail. CVE-2026-77136 pozwala anonimowemu użytkownikowi przesłać składnię szablonu Fluid w polu formularza skonfigurowanym jako „This field contains the name of the sender”. Wartość trafiała bez oczyszczenia do Fluid View jako źródło szablonu, dzięki czemu atakujący mógł wywoływać ViewHelpery, ujawniać konfigurację, zmienne środowiskowe i kod aplikacji, a potencjalnie wykonać kod zdalnie.

Producent podkreśla, że luka jest aktywnie wykorzystywana. Otrzymała sugerowany wynik CVSS 4.0: 9,5 (Critical) z oznaczeniem dojrzałości eksploita E:A. Nie wymaga konta ani działania administratora — wystarcza zwykłe wysłanie formularza, o ile objęte pole pełni rolę sender_name. Powermail jest rozszerzeniem zewnętrznym i nie należy do domyślnej instalacji TYPO3.

Które wersje wymagają natychmiastowej aktualizacji

Podatne są gałęzie 10.9.2 i starsze, 11.0.0–12.6.0 oraz 13.0.0–13.2.0. Poprawione wydania to odpowiednio 10.9.3, 12.6.1 i 13.2.1. Wszystkie trzy zostały opublikowane 25 sierpnia jako security release. Zespoły powinny przejść do właściwej poprawionej gałęzi albo najnowszej kompatybilnej wersji, a nie czekać na pełny cykl wdrożeniowy CMS.

Jeżeli dla starej instalacji nie da się zastosować update’u natychmiast, oficjalna mitygacja polega na wyłączeniu konfiguracji pola „This field contains the name of the sender”. Usuwa to konkretną osiągalną ścieżkę, lecz nie zastępuje aktualizacji. Trzeba sprawdzić wszystkie formularze, warianty językowe, kopie stron i środowiska, ponieważ jedna zapomniana konfiguracja nadal wystarczy do ekspozycji.

Wersję potwierdź w rzeczywistym pakiecie in2code/powermail, lockfile i aktywnym katalogu rozszerzeń. Obraz kontenera może zawierać nowy composer.lock, a współdzielony wolumen nadal starą kopię. W klastrze po rolloutcie każdy węzeł obsługujący formularze musi otrzymać poprawkę.

Jak pole formularza stało się programem

Silnik Fluid używa składni szablonów i ViewHelperów do generowania treści. Gdy aplikacja przekazuje nieufny tekst jako zmienną, silnik powinien traktować go jako wartość do wyświetlenia. Powermail umieszczał jednak surowe sender_name w miejscu źródła szablonu. Znaczniki przesłane przez użytkownika były więc parsowane jako instrukcje Fluid, a nie jako imię nadawcy.

To klasyczne Server-Side Template Injection. Skutek zależy od możliwości dostępnych ViewHelperów, rozszerzeń i konfiguracji serwera. Nie każdy pojedynczy input automatycznie daje powłokę systemową, ale wykonanie helperów po stronie serwera wystarcza do odczytu wrażliwych danych i budowania dalszego łańcucha. Oficjalne advisory mówi o potencjalnym RCE, nie o gwarantowanej identycznej ścieżce na każdej stronie.

Warunek sender_name wyjaśnia parametr AT:P w CVSS 4.0: podatna musi być konkretna konfiguracja formularza. Producent określa ją jako częstą i bliską domyślnej, dlatego nie jest to egzotyczny przypadek. Administrator nie musi włączać debugowania ani instalować osobnego niebezpiecznego helpera, aby ujawnienie konfiguracji stało się możliwe.

Dlaczego filtr HTML lub WAF nie rozwiązują SSTI

Sanityzacja HTML działa na innym interpreterze. Może usuwać znaczniki przeglądarki, ale składnia Fluid jest przetwarzana na serwerze przed wysłaniem odpowiedzi lub wiadomości. Zakodowanie znaków na etapie, po którym następuje dekodowanie, też może pozostawić aktywną semantykę. Najsilniejsza poprawka przestaje traktować pole użytkownika jako template source.

WAF może wykrywać znane tokeny szablonów, lecz legalna składnia jest bogata, może mieć różne namespace’y i kodowanie. Blokada kilku ciągów nie daje kompletności, zwłaszcza gdy producent potwierdził aktywne ataki. Reguła WAF jest krótkotrwałą osłoną i źródłem telemetrii, nie podstawowym remedium.

Naprawione wydania stosują allowlistę ViewHelperów w konfiguracji rozszerzenia. Jeżeli organizacja używa własnych helperów, musi świadomie dodać wymagane pozycje. Po aktualizacji należy przetestować wysyłkę formularza, treść maili i integracje, ale nie powinno się przywracać szerokiej listy tylko po to, aby stary template zadziałał bez analizy.

Oficjalna detekcja: wiadomości i baza Powermail

TYPO3 zaleca przegląd odebranych wiadomości oraz pola sender_name zapisanego w tabeli tx_powermail_domain_model_mail. Szukaj składni Fluid, między innymi prefiksów f:, v: i deklaracji namespace. Ich obecność może wskazywać wykonanie ViewHelpera i ekspozycję danych. Zachowaj dokładną wartość, znacznik czasu, identyfikator formularza oraz powiązany request.

To punkt startowy, nie pełny IOC. Napastnik może użyć innego prefiksu, składni inline, kodowania albo helpera z własnego rozszerzenia. Przejrzyj także logi reverse proxy, aplikacji i poczty pod kątem nietypowych żądań POST, błędów Fluid, długich wartości pola nadawcy i odpowiedzi odbiegających rozmiarem od normalnych.

Na hoście koreluj czas żądania z odczytem plików konfiguracyjnych, nowymi procesami potomnymi PHP, ruchem wychodzącym i zmianami w webroot. Jeżeli ViewHelper ujawnił tylko dane w wygenerowanym mailu, nie musi pojawić się child process. Dlatego logi poczty i zapis rekordu formularza są równie ważne jak EDR.

Reagowanie przy znalezieniu składni Fluid

Oficjalne advisory zaleca traktować system jako potencjalnie naruszony i przeprowadzić dokładną analizę oraz naprawę. Najpierw zachowaj bazę, wiadomości, logi i aktywną konfigurację. Ogranicz formularz lub odłącz podatny węzeł, a następnie zaktualizuj rozszerzenie. Nie usuwaj podejrzanego rekordu przed zabezpieczeniem dowodu.

Ustal, jakie dane proces PHP mógł odczytać: TYPO3_CONTEXT, konfigurację bazy, klucze szyfrowania, poświadczenia poczty, storage’u i usług API. Sprawdź, czy odpowiedź HTTP albo wysłany e-mail zawierał fragmenty konfiguracji lub kodu. Zbadaj konta backendu, zmiany treści, rozszerzenia, zadania schedulera oraz pliki dodane w czasie ekspozycji.

Jeżeli potwierdzono wykonanie kodu lub nie da się wykluczyć trwałych zmian, odbuduj host z czystego artefaktu i zweryfikowanej bazy. Rotuj osiągalne sekrety po odcięciu dostępu napastnika. Aktualizacja Powermail zamyka wejście, ale nie cofa wcześniej utworzonego konta, pliku ani wykradzionego tokenu.

Priorytety w środowisku wielostronicowym

Agencje i organizacje utrzymujące wiele instancji powinny najpierw znaleźć wszystkie instalacje in2code/powermail, a potem połączyć wersję z konfiguracją sender_name i ekspozycją formularza. Priorytetem są strony publiczne, formularze przyjmujące anonimowe zgłoszenia i systemy mające sekrety produkcyjne w tym samym procesie.

Nie pomijaj stron archiwalnych i subdomen kampanii. Starsza witryna może mieć mały ruch, ale ten sam dostęp do bazy, SMTP lub panelu hostingowego. Jeżeli wspólny image albo repozytorium wdraża Powermail do wielu klientów, aktualizacja komponentu powinna być połączona z odrębnym huntingiem w każdej bazie.

Bezpieczne projektowanie warstwy szablonów

Oddziel template od danych typami i API. Źródła szablonów powinny pochodzić z repozytorium lub kontrolowanego panelu z silną autoryzacją, a wartości formularza być przekazywane wyłącznie jako zmienne. Jeżeli biznes wymaga szablonu tworzonego przez użytkownika, zastosuj osobny ograniczony język, dokładną allowlistę helperów, limity i izolowany renderer bez sekretów.

Test regresji powinien wstawić składnię template do każdego pola i potwierdzić, że pojawia się literalnie albo zostaje bezpiecznie odrzucona. Należy testować e-mail, podgląd w panelu, eksport i zapis w bazie, bo ta sama wartość może być renderowana w kilku kontekstach. Zabezpieczenie tylko widoku front-end nie chroni późniejszego generowania maila.

Fakty źródłowe i wnioski Breachroad

Aktywna eksploatacja, warunek sender_name, mechanizm Fluid View, zakres wersji, CVSS, poprawione wydania i wskazówki detekcyjne pochodzą z oficjalnego advisory TYPO3. Release notes Powermail potwierdzają allowlistę ViewHelperów. Publiczne źródło nie określa skali kampanii, podmiotu ani skutku każdego incydentu; nie należy ich dopowiadać.

Rozszerzony plan korelacji logów, analiza sekretów, priorytety wielu stron i zasady projektowania szablonów są wnioskami Breachroad. Szkolenia AppSec dla zespołów PHP pomagają rozpoznawać granice interpreterów, a testy aplikacji webowych mogą sprawdzić SSTI, konfigurację formularzy i izolację procesu.

Źródła

UDOSTĘPNIJ / KOPIUJ