Vulnerability advisory

CVE-2026-52811

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

Published Updated OSV record ↗

Also known as GHSA-89mr-xqfv-758mGO-2026-5249

Severity
  • CVSS 4.0CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H

Affected versions

Repository

Affected commitsFixed by commit
GIT github.com/gogs/gogs ↗
All commits before 3ba8aca90e17e5410b7e8b227c9f29256ac3e8753ba8aca90e17e5410b7e8b227c9f29256ac3e875
Not specified04cb8afbb01d855454e59977a1cdbf522ea1db31
Also listed as affected (59)
  • v0.14.2-rc.1
  • v0.14.2
  • v0.14.1-rc.1
  • v0.14.1
  • v0.14.0-rc.1
  • v0.14.0
  • v0.11.91
  • v0.11.86
  • v0.11.79
  • v0.11.66
  • v0.11.53
  • v0.11.43
  • v0.11.34
  • v0.11.33
  • v0.11.29
  • v0.11.19
  • v0.11.4
  • v0.11
  • v0.11rc
  • v0.10.18
  • v0.10.8
  • v0.10
  • v0.10rc
  • v0.9.141
  • v0.9.128
  • v0.9.113
  • v0.9.97
  • v0.9.71
  • v0.9.60
  • v0.9.48
  • v0.9.46
  • v0.9.13
  • v0.9.0
  • v0.8.43
  • v0.8.25
  • v0.8.10
  • v0.8.0
  • v0.7.33
  • v0.7.22
  • v0.7.19
  • v0.7.6
  • v0.7.0
  • v0.6.15
  • v0.6.9
  • v0.6.3
  • v0.6.1
  • v0.5.13
  • v0.5.11
  • v0.5.9
  • v0.5.8
  • v0.5.5
  • v0.5.2
  • v0.5.0
  • v0.4.2
  • v0.4.1
  • v0.4.0
  • v0.3.1
  • v0.3.0
  • v0.2.0

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.

References

  • Codex
  • Claude Code
  • VS Code
  • GitHub Copilot
  • Cursor
  • Cline
  • Windsurf
  • Google Anti-gravity
  • OpenCode
  • Pi
  • Gemini CLI
  • Hermes Agent
  • Zed
  • Junie
  • Qwen Code
  • Kiro
  • Kilo Code
  • Factory Droid

Set up GitHits for your agents

Run this command:

<> bash
npx githits@latest init

What happens next:

  1. Opens your browser to authorize GitHits
  2. Asks whether to set up GitHits at the user or project level
  3. Detects your supported AI coding tools
  4. Lets you choose which tools to configure
  5. Configures the selected tools