W OpenProject przed wersjami 16.6.7 i 17.0.3 istnieje podatność na command injection w endpointcie zmian repozytorium, pozwalająca atakującemu na wstrzyknięcie opcji wiersza poleceń do polecenia git log. Luka jest krytyczna, ponieważ prowadzi do zapisu dowolnych plików na serwerze, a w konsekwencji do zdalnego wykonania kodu (RCE).
▸ Pokaż oryginał (EN)
OpenProject is an open-source, web-based project management software. Prior to versions 16.6.7 and 17.0.3, an arbitrary file write vulnerability exists in OpenProject’s repository changes endpoint (/projects/:project_id/repository/changes) when rendering the “latest changes” view via git log. By supplying a specially crafted rev value (for example, rev=--output=/tmp/poc.txt), an attacker can inject git log command-line options. When OpenProject executes the SCM command, Git interprets the attacker-controlled rev as an option and writes the output to an attacker-chosen path. As a result, any user with the :browse_repository permission on the project can create or overwrite arbitrary files that the OpenProject process user is permitted to write. The written contents consist of git log output, but by crafting custom commits the attacker can still upload valid shell scripts, ultimately leading to RCE. The RCE lets the attacker create a reverse shell to the target host and view confidential files outside of OpenProject, such as /etc/passwd. This issue has been patched in versions 16.6.7 and 17.0.3.
Endpoint /projects/:project_id/repository/changes przyjmuje parametr rev, który jest przekazywany bezpośrednio do polecenia git log bez odpowiedniej sanityzacji (CWE-78). Atakujący może podać spreparowaną wartość rev, np. rev=--output=/tmp/poc.txt, co powoduje, że Git interpretuje ją jako opcję wiersza poleceń, a nie jako nazwę rewizji. W efekcie Git zapisuje wyjście polecenia do wskazanej przez atakującego ścieżki na serwerze. Poprzez spreparowane commity w repozytorium atakujący może kontrolować treść zapisywanego pliku — w tym umieścić wykonywalny skrypt powłoki — co ostatecznie prowadzi do RCE i możliwości nawiązania odwróconego połączenia (reverse shell) z serwerem.
Atakujący z uprawnieniem browse_repository może tworzyć lub nadpisywać dowolne pliki dostępne dla procesu OpenProject, co prowadzi do zdalnego wykonania kodu (RCE), przejęcia kontroli nad serwerem oraz dostępu do poufnych plików systemowych (np. /etc/passwd).
Należy zaktualizować OpenProject do wersji 16.6.7 lub 17.0.3, w których podatność została usunięta. Patche dostępne są na GitHub: https://github.com/opf/openproject/releases/tag/v16.6.7 oraz https://github.com/opf/openproject/releases/tag/v17.0.3. Do czasu aktualizacji można rozważyć ograniczenie uprawnienia browse_repository wyłącznie do zaufanych użytkowników.
OpenProject w wersjach wcześniejszych niż 16.6.7 (gałąź 16.x) oraz wcześniejszych niż 17.0.3 (gałąź 17.x) z włączoną integracją repozytoriów SCM (Git)
Do wykorzystania podatności wystarczy posiadanie uprawnienia browse_repository — jest to stosunkowo niski próg dla atakującego uwierzytelnionego w systemie. Luka dotyczy wyłącznie instalacji OpenProject z włączoną obsługą repozytoriów Git.
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:XOpenproject
APPOpenproject< 16.6.717.0.0 – 17.0.3 (bez)
Powiązane podatności
SQL Injection w OpenProject — operator =n bez parametryzacji zapytań
Stored XSS w module Repositories aplikacji OpenProject
SQL Injection w OpenProject umożliwiający zdalne wykonanie kodu Ruby
OpenProject: command injection w endpoincie diff repozytorium (zapis dowolnych plików)
OpenProject — odczyt lokalnych plików przez SVG/ImageMagick przy eksporcie PDF