W wersjach OpenProject wcześniejszych niż 16.6.9, 17.0.6, 17.1.3 i 17.2.1 moduł Repositories nie sanityzował poprawnie nazw plików pobieranych z repozytoriów, co umożliwiało atak typu stored XSS. Podatność jest groźna, ponieważ złośliwy kod HTML osadzony w nazwie pliku był wykonywany w przeglądarce wszystkich członków projektu odwiedzających stronę repozytoriów.
▸ Pokaż oryginał (EN)
OpenProject is an open-source, web-based project management software. In versions prior to 16.6.9, 17.0.6, 17.1.3, and 17.2.1, the Repositories module did not properly escape filenames displayed from repositories. This allowed an attacker with push access into the repository to create commits with filenames that included HTML code that was injected in the page without proper sanitation. This allowed a persisted XSS attack against all members of this project that accessed the repositories page to display a changeset where the maliciously crafted file was deleted. Versions 16.6.9, 17.0.6, 17.1.3, and 17.2.1 fix the issue.
Atakujący posiadający uprawnienia do zapisu (push access) w repozytorium tworzy commit zawierający plik, którego nazwa zawiera złośliwy kod HTML lub JavaScript. Moduł Repositories wyświetlając zestaw zmian (changeset) nie escapuje poprawnie nazw plików, przez co osadzony kod trafia do strony bez odpowiedniego oczyszczenia. Złośliwy skrypt jest wykonywany w kontekście przeglądarki każdego użytkownika, który wyświetli stronę repozytoriów zawierającą changeset z usuniętym, spreparowanym plikiem. Jest to atak typu persisted (stored) XSS, co oznacza, że payload jest trwale przechowywany po stronie serwera i aktywowany przy każdym wejściu na stronę.
Atakujący może wykonać dowolny kod JavaScript w kontekście sesji zalogowanego użytkownika, co może prowadzić do kradzieży tokenów sesji, danych uwierzytelniających, a także do wykonywania nieautoryzowanych działań w imieniu ofiary w aplikacji OpenProject. Ze względu na zmianę zakresu (Scope:Changed) atak może również oddziaływać na zasoby poza bezpośrednio kontrolowaną aplikacją.
Należy zaktualizować OpenProject do wersji 16.6.9, 17.0.6, 17.1.3 lub 17.2.1 w zależności od używanej gałęzi. Do czasu aktualizacji można rozważyć ograniczenie uprawnień push access w repozytoriach wyłącznie do zaufanych użytkowników oraz ograniczenie dostępu do modułu Repositories. Szczegóły dostępne w oficjalnym security advisory: https://github.com/opf/openproject/security/advisories/GHSA-p423-72h4-fjvp
OpenProject w wersjach wcześniejszych niż 16.6.9 (gałąź 16.x), 17.0.6 (gałąź 17.0.x), 17.1.3 (gałąź 17.1.x) oraz 17.2.1 (gałąź 17.2.x) z włączonym modułem Repositories.
Atak wymaga, aby ofiara odwiedziła stronę repozytoriów wyświetlającą konkretny changeset z usuniętym spreparowanym plikiem (UI:R), jednak payload jest przechowywany trwale po stronie serwera. Warunkiem skutecznego ataku jest posiadanie przez napastnika uprawnień push access do repozytorium w projekcie OpenProject.
CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:H/I:H/A:HOpenproject
APPOpenproject17.2.0< 16.6.917.0.0 – 17.0.6 (bez)17.1.0 – 17.1.3 (bez)
Powiązane podatności
SQL Injection w OpenProject — operator =n bez parametryzacji zapytań
SQL Injection w OpenProject umożliwiający zdalne wykonanie kodu Ruby
OpenProject: command injection w endpointcie repozytorium prowadzący do RCE
OpenProject: command injection w endpoincie diff repozytorium (zapis dowolnych plików)
OpenProject — odczyt lokalnych plików przez SVG/ImageMagick przy eksporcie PDF