Symfonia eDokumenty: RCE, SQL Injection i Local File Inclusion

Artur - AFINE cybersecurity team member profile photo
Karol Mazurek
Jun 2, 2025
5
min read

Wprowadzenie

Symfonia eDokumenty, wcześniej znana jako Ready_TM, to system zarządzania dokumentami (DMS) wykorzystywany przez wiele firm do obsługi elektronicznego obiegu dokumentów. Ściśle zintegrowany z narzędziami takimi jak Symfonia ERP, odgrywa kluczową rolę w przetwarzaniu wrażliwych danych biznesowych w licznych polskich przedsiębiorstwach.

Wraz ze Sławomirem Zakrzewskim przeanalizowałem wersję 7.19.39.7 tej aplikacji i odkryliśmy cztery krytyczne podatności, w tym Local File Inclusion, które zarejestrowane zostały jako:

  • CVE-2025-1980 – Zdalne wykonanie kodu (RCE) przez brak kontroli nad przesyłanymi plikami
  • CVE-2025-1981 – SQL Injection
  • CVE-2025-1982 – Lokalna inkluzja plików (Local File Inclusion) umożliwiająca nieautoryzowany dostęp do plików
  • CVE-2025-1983 – Trwałe XSS (Stored Cross-Site Scripting)

Te krytyczne luki w zabezpieczeniach pokazują, jak istotne jest systematyczne i dokładne testowanie bezpieczeństwa aplikacji obsługujących poufne dane. To przypomnienie, że nawet dobrze ugruntowane systemy bez dedykowanych testów mogą narazić firmy na poważne ryzyko - od zakłóceń w działaniu po wycieki danych.

CVE-2025-1980 – Zdalne wykonanie kodu przez brak kontroli nad przesyłanymi plikami

Podatność dotyczyła funkcji do przesyłania awatarów, dostępnej w interfejsie użytkownika Symfonia eDokumenty. Choć mechanizm miał akceptować jedynie pliki graficzne (np. .jpg, .png), nie weryfikował ani typu pliku, ani jego rozszerzenia.

W rezultacie możliwe było przesłanie dowolnego pliku — w tym skryptu PHP — który był następnie zapisywany w publicznie dostępnym katalogu na serwerze. Ponieważ serwer WWW był skonfigurowany do wykonywania plików .php, atakujący mógł przesłać webshell i uruchomić go przez bezpośredni URL, uzyskując zdalne wykonanie kodu (RCE).

Scenariusz exploitacji

  • Zaloguj się do aplikacji i przejdź do ustawień swojego konta (prawy górny róg).
  • Wybierz webshell PHP i tymczasowo zmień jego rozszerzenie na .jpg.
  • Prześlij plik, przechwytując żądanie za pomocą narzędzia proxy (np. Burp Suite) i zmień rozszerzenie pliku w żądaniu na .php.
  • Odpowiedź serwera zawiera ścieżkę zapisu pliku (nazwa pliku zostanie zmodyfikowana).
  • Wejdź na podany adres URL – kod PHP zostanie wykonany przez serwer.

Główne przyczyny

  • Brak walidacji rozszerzeń plików po stronie backendu (np. dopuszczania wyłącznie .jpg, .png)
  • Brak sprawdzania typu MIME
  • Przesyłane pliki zapisywane w katalogu dostępnym z poziomu przeglądarki i obsługiwanym przez serwer jako wykonywalny

CVE-2025-1981 – SQL Injection

Ta podatność została odkryta w module Faktury zakupu, konkretnie w ścieżce:
Faktury zakupu → Faktury → Wszystkie → Filtry

Funkcja filtrowania akceptowała dane wejściowe od użytkownika do tworzenia zapytań SQL, ale nie stosowała odpowiedniego filtrowania ani parametryzacji danych po stronie backendu. Umożliwiało to wstrzykiwanie dowolnego kodu SQL bezpośrednio do logiki zapytania.

Uwierzytelniony użytkownik mógł za pomocą spreparowanego filtra manipulować zapytaniem SQL, co prowadziło do pozyskania poufnych danych — w tym hashy haseł — lub wykonania destrukcyjnych operacji (modyfikacja/usuwanie rekordów).

Scenariusz exploitacji

  • Zaloguj się do aplikacji i przejdź do:
    Faktury zakupu → Faktury → Wszystkie → Filtry
  • Wybierz jedno z pól filtra.
  • Wprowadź następujący payload:
    1) AND 6363=(SELECT 6363 FROM PG_SLEEP(20)) AND (1=1
  • Zatwierdź filtr i obserwuj czas odpowiedzi serwera.
  • Jeżeli odpowiedź opóźnia się o ok. 20 sekund, potwierdza to obecność podatności typu time-based blind SQLi.
  • Dalszą eksploatację można zautomatyzować narzędziami takimi jak sqlmap.

Główne przyczyny:

  • Brak walidacji danych wejściowych (sanityzacji)
  • Brak stosowania zapytań parametryzowanych (prepared statements)
  • Bezpośrednie wstawianie danych użytkownika do zapytań SQL

CVE-2025-1982 - Local File Inclusion w module Dokumenty

Podatność Local File Inclusion została wykryta w module Dokumenty aplikacji Symfonia eDokumenty. Użytkownicy mogą dodawać pliki z zewnętrznych źródeł za pomocą funkcji Dodaj z innej lokalizacji, umożliwiającej podanie adresu URL.

Funkcja ta akceptowała adresy URL bez weryfikacji ich schematu lub docelowego zasobu, co pozwalało na wykorzystanie URI typu file:// wskazującego na plik w lokalnym systemie plików serwera. W efekcie atakujący mógł odczytać dowolne pliki z serwera aplikacji - o ile proces aplikacji miał do nich dostęp.

Jak działa Local File Inclusion w Symfonia eDokumenty

Mechanizm Local File Inclusion w tym przypadku wykorzystuje brak walidacji schematu URI. Aplikacja, projektowana do pobierania plików z zewnętrznych źródeł przez HTTP/HTTPS, nie ograniczała typów akceptowanych URI. Pozwalało to na użycie protokołu file://, który umożliwia bezpośredni dostęp do lokalnego systemu plików serwera.

W przeciwieństwie do klasycznych ataków path traversal wykorzystujących sekwencje ../, ta implementacja Local File Inclusion pozwala na bezpośrednie wskazanie pełnej ścieżki do pliku systemowego.

Scenariusz exploitacji podatności Local File Inclusion

  • Zaloguj się do aplikacji i przejdź do sekcji Dokumenty
  • Kliknij Nowy, następnie wybierz Plik, a potem Z lokalizacji
  • Przejdź do zakładki Załączniki i kliknij Dodaj z innej lokalizacji
  • W polu Link do pliku wprowadź: file:///etc/passwd
  • Zatwierdź formularz. Treść wskazanego pliku zostanie pobrana i dołączona do dokumentu, jakby pochodziła z zewnętrznego źródła
  • Otwórz podgląd dokumentu lub pobierz załącznik, aby zobaczyć zawartość pliku z serwera

Skutki podatności Local File Inclusion

Exploitacja tej podatności typu Local File Inclusion umożliwia:

  • Odczyt wrażliwych plików konfiguracyjnych zawierających hasła do baz danych
  • Dostęp do plików z kodem źródłowym aplikacji, ujawniających logikę biznesową
  • Pozyskanie plików z kredencjałami systemowymi (np. /etc/passwd, /etc/shadow)
  • Odczyt logów aplikacji zawierających potencjalnie wrażliwe informacje
  • Dostęp do dokumentów przechowywanych w systemie zarządzania dokumentami

Główne przyczyny podatności Local File Inclusion

  • Brak walidacji schematu URI (dopuszczenie file:// zamiast wyłącznie http:// lub https://)
  • Brak filtrowania lokalnego dostępu do plików
  • Aplikacja wykonywała zapytania po stronie serwera bez ograniczeń dotyczących źródła danych
  • Brak implementacji whitelisty dozwolonych protokołów

Jak zapobiegać podatnościom typu Local File Inclusion

Zabezpieczenie przed Local File Inclusion wymaga implementacji kilku warstw obrony:

  • Walidacja schematu URI: Aplikacje powinny akceptować wyłącznie bezpieczne protokoły (http://, https://) i odrzucać wszystkie inne, w tym file://, ftp://, gopher://.
  • Whitelista dozwolonych domen: Jeśli aplikacja ma pobierać pliki tylko z określonych źródeł, należy zaimplementować whitelistę dozwolonych domen.
  • Sandboxing operacji na plikach: Operacje na plikach powinny być wykonywane w izolowanym środowisku z ograniczonymi uprawnieniami.
  • Walidacja zawartości: Nawet jeśli źródło wydaje się bezpieczne, zawartość pobieranych plików powinna być weryfikowana przed zapisem lub wyświetleniem.

CVE-2025-1983 – Stored Cross-Site Scripting (XSS)

Ta podatność została wykryta w module Eksploratora plików aplikacji Symfonia eDokumenty. Problem wynikał z braku odpowiedniego oczyszczania nazw plików przed ich wyświetleniem w interfejsie użytkownika.

Atakujący mógł przesłać plik z odpowiednio spreparowaną nazwą zawierającą złośliwy kod JavaScript. Po wejściu w interakcję z tym plikiem przez innego użytkownika — np. przez otwarcie menu kontekstowego lub podgląd szczegółów — skrypt był wykonywany w kontekście przeglądarki ofiary.

Ponieważ payload był zapisany na serwerze i renderowany przy każdym załadowaniu widoku, był to klasyczny przypadek trwałego XSS (Stored XSS).

Scenariusz exploitacji

  • Zaloguj się do aplikacji i przejdź do modułu Eksplorator plików.
  • Prześlij plik o nazwie: a<img src=x onerror=prompt(document.cookie)>.jpg
  • Plik zostanie przesłany i pojawi się w widoku bez żadnej sanitacji.
  • Gdy inny użytkownik wejdzie w interakcję z plikiem (np. otworzy jego lokalizację), złośliwy kod JavaScript zostanie wykonany w jego przeglądarce.
  • Skrypt działa z uprawnieniami aktywnej sesji — umożliwiając np. kradzież sesji, eskalację uprawnień lub inne ataki w przeglądarce.

Główne przyczyny:

  • Brak filtrowania i „ucieczki” danych wejściowych (nazwy plików)
  • Nazwy plików renderowane bezpośrednio w DOM bez walidacji
  • Brak polityki bezpieczeństwa treści (Content Security Policy – CSP), która ograniczałaby wykonywanie inline scriptów

Skutki

Ta podatność umożliwiała uwierzytelnionym użytkownikom przeprowadzanie ataków stored XSS, które były aktywne między sesjami i mogły wpływać na innych użytkowników. W środowiskach z wieloma użytkownikami – takich jak intranety czy platformy współdzielonych dokumentów – konsekwencje takiego ataku mogły być poważne.

Podsumowanie: od Local File Inclusion po RCE

Podatności opisane w tym artykule, od zdalnego wykonania kodu, przez Local File Inclusion, aż po stored XSS, pokazują jak wiele warstw ryzyka może występować w jednej aplikacji o znaczeniu krytycznym dla biznesu. Żadna z tych luk nie wymagała skomplikowanych technik ataku. Ich obecność wynikała z typowych błędów projektowych i braku konsekwentnych testów bezpieczeństwa.

Szczególnie podatność typu Local File Inclusion w module zarządzania dokumentami stanowi poważne zagrożenie, gdyż pozwala na odczyt wrażliwych plików systemowych bez konieczności posiadania zaawansowanych uprawnień lub wykorzystywania złożonych technik ataku.

Symfonia eDokumenty pełni ważną rolę w przetwarzaniu dokumentów i danych w wielu firmach. Tworzenie i utrzymywanie takich systemów z myślą o bezpieczeństwie to nie tylko wymóg techniczny, to konieczność biznesowa.

To studium przypadku podkreśla wagę regularnych audytów aplikacji, stosowania bezpiecznych praktyk programistycznych i posiadania przejrzystych kanałów zgłaszania podatności. Mamy nadzieję, że analiza ta zachęci innych twórców oprogramowania do działania proaktywnie, zanim podatność zamieni się w incydent.

Podziękowania

Badania przeprowadziłem wspólnie ze Sławomirem Zakrzewskim, którego wiedza techniczna i zaangażowanie były kluczowe w zidentyfikowaniu i analizie opisanych podatności.

Dziękuję również zespołowi CERT Polska za wsparcie w odpowiedzialnym zgłoszeniu podatności do producenta i koordynację procesu ujawnienia.

Szczególne podziękowania kieruję do zespołu Symfonia za szybką reakcję i pełną współpracę. Wszystkie zgłoszone podatności zostały zaadresowane bez opóźnień, co świadczy o odpowiedzialnym podejściu do bezpieczeństwa produktu.

Źródła

Miesięczny Raport Ofensywny

Dołącz do naszego newslettera! Co miesiąc ujawniamy nowe zagrożenia w oprogramowaniu biznesowym, wskazujemy kluczowe luki wymagające uwagi oraz analizujemy trendy w cyberbezpieczeństwie na podstawie naszych testów ofensywnych.

Klikając "Subskrybuj", potwierdzasz, że zgadzasz się z naszymi Zasadami i Warunkami.
Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.
Gradient glow background for call-to-action section