Skip to content
OpenAdvisories
Critical · 9.0 CVE-2026-52811 EUVD-2026-39082GHSA-89mr-xqfv-758mGO-2026-5249

Gogs: UploadRepoFiles writes outside repo working tree via committed parent sym

Published Jun 24, 2026 · Updated Nov 3, 2026 · Assigned by GitHub_M

Description

Gogs is an open source self-hosted Git service. Prior to 0.14.3, (*Repository).UploadRepoFiles checks for symlinks only on the leaf of the upload target (osx.IsSymlink(targetPath)). The siblings UpdateRepoFile, DeleteRepoFile, and GetDiffPreview use hasSymlinkInPath, which lstats every component — UploadRepoFiles is the lone outlier. An attacker with repo-write access plus a multipart upload whose filename contains a literal backslash (preserved by filepath.Base on Linux, then converted to / by pathx.Clean) redirects the write through a previously-committed directory symlink. iox.CopyFile opens the destination with os.Create (no O_NOFOLLOW), so the kernel follows the parent symlink and writes attacker bytes anywhere the gogs UID can write — ~git/.ssh/authorized_keys → SSH foothold, or <repo>.git/hooks/post-receive → next-push RCE. This vulnerability is fixed in 0.14.3.

Affected products

VendorProductAffectedFixed
gogs gogs < 0.14.3 —

Fixed in Linux distributions

Distributions backport fixes, so the version that fixes this vulnerability differs per release — upgrade to at least the version shown. From the distributions' security trackers and advisories.

ReleasePackageFixed inAdvisory
openSUSE Leap 16.0 govulncheck-vulndb 0.0.20260723T184607-160000.1.1 openSUSE-SU-2026:21483-1

Affected packages

EcosystemPackageAffectedFixedRecord
Go gogs.io/gogs < 0.14.3 0.14.3 GHSA-89mr-xqfv-758m
Go gogs.io/gogs all versions — GO-2026-5249

Advisories 2

References