[solved] Gitea 1.16.[678] error: fatal: unsafe repository is owned by someone else
April 12, 2022 version git v2.35.2 was released and addresses a security issue CVE-2022-24765. It was backported to 2.30.3, v2.31.2, v2.32.1, v2.33.2, and v2.34.2 and published by distributions such as Debian GNU/Linux, Alpine.
If Gitea runs as user foo
, calls a patched Git version and a parent directory of the git repositories is owned by a user other than foo
, it will fail with a message such as:
Failed to open repository: Git/Data Error: exit status 128 - fatal: unsafe repository ('/data/git/repositories/git/data.git' is owned by someone else)
This started to show in the past few weeks to users running the Gitea binary on Windows who also independently installed git v2.36. And then to people running Gitea from snap, on a Synology NAS and then people running from Gitea docker images which is based on Alpine.
Workarounds
- If using Gitea docker images:
- upgrade to Gitea >=1.16.9 or 1.17, both have git >=2.36
git config --global --replace-all safe.directory '*'
- If the Gitea binary was installed independently of git, upgrade git to a version that is greater or equal to 2.36 and disable the security check entirely with:
- impersonate the user dedicated to Gitea (usually git)
git config --global --replace-all safe.directory '*'
Bug fix
The bug fix is for Gitea to ensure git config --global --replace-all safe.directory '*'
is set on its dedicated user when it initializes. It is effective on the condition that the git CLI version is greater or equal to 2.36.
Bug fix rationale
It is safe to disable the security check in Gitea. It is not vulnerable to CVE-2022-24765 because it calls the git CLI after changing its working directory to be the git repository targeted by the command (for instance diff) or a temporary directory. Therefore it will not explore the parent directories looking for a git configuration file.
The security check is triggered because the repository is owned by an unexpected user (root instead of git typically) and not because a parent directory is owned by an unexpected user. This, in itself, is a problem worth investigating but it is unrelated and was revealed by the newer security check of git even though it does not match the threat described in CVE-2022-24765.
It appears non trivial to enforce a consistent ownership of files and directories, either within docker or outside docker when networked file systems are involved. The Gitea server was not troubled by this inconsistency so far because the permissions allow it to write and read where expected, regardless of the owner. It is not worth looking into but it is ancient and unrelated.
Gitea runs under a dedicated user, either when installed from binary or from docker and modifies the global git configuration depending on the git version at initialization time. Fixing the problem can therefore be done by disabling the security check in the global git config file at initialization time. It also requires a minimum version of git 2.36 to be installed, which is the case for Gitea docker images with versions >= 1.16.9.