Podatność w OneDev przed wersją 7.3.0 pozwala nieuwierzytelnionemu atakującemu na przejęcie pełnej kontroli nad instancją serwera. Błędna weryfikacja źródła żądań w endpoincie /git-prereceive-callback umożliwia zapis do dowolnych plików i wykonanie arbitralnego kodu.
▸ Pokaż oryginał (EN)
Onedev is an open source, self-hosted Git Server with CI/CD and Kanban. In versions of Onedev prior to 7.3.0 unauthenticated users can take over a OneDev instance if there is no properly configured reverse proxy. The /git-prereceive-callback endpoint is used by the pre-receive git hook on the server to check for branch protections during a push event. It is only intended to be accessed from localhost, but the check relies on the X-Forwarded-For header. Invoking this endpoint leads to the execution of one of various git commands. The environment variables of this command execution can be controlled via query parameters. This allows attackers to write to arbitrary files, which can in turn lead to the execution of arbitrary code. Such an attack would be very hard to detect, which increases the potential impact even more. Users are advised to upgrade. There are no known workarounds for this issue.
Endpoint /git-prereceive-callback jest przeznaczony wyłącznie do użytku lokalnego (przez hook pre-receive serwera Git), jednak weryfikacja źródła żądania opiera się wyłącznie na nagłówku X-Forwarded-For, który może być swobodnie sfałszowany przez atakującego. Po ominięciu tej kontroli atakujący może wywołać endpoint z zewnątrz sieci, co skutkuje wykonaniem poleceń git po stronie serwera. Zmienne środowiskowe tych poleceń mogą być kontrolowane przez parametry zapytania HTTP, co umożliwia zapis do dowolnych plików w systemie, a w konsekwencji wykonanie arbitralnego kodu. Atak jest wyjątkowo trudny do wykrycia, co dodatkowo zwiększa jego potencjalny wpływ.
Nieuwierzytelniony atakujący może uzyskać pełną kontrolę nad instancją OneDev, zapisując dowolne pliki i wykonując arbitralny kod z uprawnieniami procesu serwera. W efekcie możliwe jest całkowite przejęcie serwera, w tym dostęp do repozytoriów kodu, danych CI/CD oraz konfiguracji systemu.
Należy niezwłocznie zaktualizować OneDev do wersji 7.3.0 lub nowszej. Producent nie wskazuje żadnych znanych obejść (workarounds) dla tej podatności. Jako dodatkowe zabezpieczenie zaleca się skonfigurowanie reverse proxy tak, aby blokował lub nadpisywał nagłówek X-Forwarded-For dla żądań przychodzących z zewnątrz.
OneDev w wersjach wcześniejszych niż 7.3.0, szczególnie instancje nieposiadające prawidłowo skonfigurowanego reverse proxy filtrującego nagłówki X-Forwarded-For
Podatność została opisana przez badaczy z SonarSource (referencja: blog.sonarsource.com/onedev-remote-code-execution). Poprawka dostępna w commicie f1e97688e4e19d6de1dfa1d00e04655209d39f8e w repozytorium GitHub projektu.
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:H/I:H/A:HOnedev Project Onedev
APPOnedev Project< 7.3.0
Powiązane podatności
OneDev: ucieczka z kontenera Docker i przejęcie hosta przez CI/CD
Pre-auth Server Side Template Injection w OneDev (przed 4.0.3)
OneDev: Dowolne przesyłanie plików przez AttachmentUploadServlet
OneDev — pre-auth RCE przez deserializację w endpointach Kubernetes
OneDev: Pre-auth RCE przez deserializację w AttachmentUploadServlet