Podatność w OneDev pozwala uwierzytelnionym użytkownikom (bez uprawnień administratora) na przejęcie kontroli nad daemonem Docker na hoście poprzez zamontowany socket Docker w krokach CI/CD. W praktyce umożliwia to ucieczkę z kontenera i uzyskanie uprawnień root na systemie hosta.
▸ Pokaż oryginał (EN)
Onedev is an open source, self-hosted Git Server with CI/CD and Kanban. When using Docker-based job executors, the Docker socket (e.g. /var/run/docker.sock on Linux) is mounted into each Docker step. Users that can define and trigger CI/CD jobs on a project could use this to control the Docker daemon on the host machine. This is a known dangerous pattern, as it can be used to break out of Docker containers and, in most cases, gain root privileges on the host system. This issue allows regular (non-admin) users to potentially take over the build infrastructure of a OneDev instance. Attackers need to have an account (or be able to register one) and need permission to create a project. Since code.onedev.io has the right preconditions for this to be exploited by remote attackers, it could have been used to hijack builds of OneDev itself, e.g. by injecting malware into the docker images that are built and pushed to Docker Hub. The impact is increased by this as described before. Users are advised to upgrade to 7.3.0 or higher. There are no known workarounds for this issue.
Podczas wykonywania zadań CI/CD z użyciem Docker-based job executors, OneDev montuje socket Dockera (np. /var/run/docker.sock) bezpośrednio do każdego kroku uruchamianego w kontenerze. Użytkownik posiadający konto i uprawnienia do tworzenia projektu może zdefiniować złośliwy pipeline CI/CD, który za pośrednictwem tego socketa wydaje polecenia do daemona Docker działającego na hoście. Jest to znany niebezpieczny wzorzec umożliwiający ucieczkę z izolacji kontenerowej i eskalację uprawnień do poziomu root na systemie hosta.
Atakujący może uzyskać pełną kontrolę (root) nad maszyną hostującą OneDev, przejąć infrastrukturę build oraz wstrzyknąć złośliwy kod do artefaktów budowania, takich jak obrazy Docker publikowane na Docker Hub.
Należy zaktualizować OneDev do wersji 7.3.0 lub nowszej. Producent nie wskazuje żadnych obejść (workarounds) dla tej podatności.
OneDev w wersjach poniżej 7.3.0 (Onedev Project Onedev) z włączonymi Docker-based job executors
Podatność została opisana przez badaczy z SonarSource (referencja: blog.sonarsource.com/onedev-remote-code-execution). Instancja code.onedev.io była szczególnie narażona ze względu na domyślnie włączoną rejestrację użytkowników i możliwość tworzenia projektów, co umożliwiało atak zdalnym, nieautoryzowanym wcześniej osobom.
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:HOnedev Project Onedev
APPOnedev Project< 7.3.0
Powiązane podatności
OneDev: Pominięcie uwierzytelnienia prowadzące do RCE przez endpoint git callback
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