Severity by source
AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H
PR:H reflects required authenticated write access; A:H captures persistent web UI breakage; C:N/I:N because only availability is impacted, scoped to the target repository.
Primary rating from Vendor (https://github.com/gogs/gogs).
CVSS VectorVendor: https://github.com/gogs/gogs
CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H
Lifecycle Timeline
2DescriptionCVE.org
Summary
A malicious user with rights to create a new file on a repository or wiki page can trigger a denial of service condition in which the pages containing the listing of files will return HTTP error 500 and render the web interface unusable for the repository or wiki.
Details
The issue is present in file internal/route/repo/wiki.go and internal/route/repo/view.go where the pages try to recover commit information. If errors are returned while recovering commit information, the page will return a 500 error and stop rendering, resulting in a denial of service. In view.go the issue occurs at line 56 while a slightly different issue occurs in wiki.go at line 174 where commits[0] is dereferenced without checking if it contains value. It is possible to trigger issues in assigning the correct value to variable commits by using a specific string as part of the page title. The issue is linked to the fact that file names can contain special characters such as *, ?, [, ], etc. that will be interpreted as git's pathspec instead of a simple string. So crafting a name containing an incomplete pathspec sequence will trigger this error.
PoC
As a proof of concept consider the file name "[] and how it affects repository and wiki pages. In the following images it is shown how pages are created, the error shown in the web page right after creation and the error as logged in the console.
<img width="835" height="503" alt="repo_creation" src="https://github.com/user-attachments/assets/cdee9625-33d9-42d3-a5fa-264fba4923ed" />
Figure 1: Creation of malicious file in repository
<img width="832" height="692" alt="repo_error_web" src="https://github.com/user-attachments/assets/53c57366-8f45-4a0f-a2ac-86f4a08467cc" />
Figure 2: Malicious file in repository causes error 500
<img width="934" height="56" alt="repo_error_console" src="https://github.com/user-attachments/assets/26427fc3-bead-4e41-a484-e2d53289a2da" />
Figure 3: Console error caused by malicious file in repository
<img width="835" height="503" alt="wiki_creation" src="https://github.com/user-attachments/assets/7a5c9836-64e3-4824-b6e5-9f9a80e7f18a" />
Figure 4: Creation of malicious file in wiki
<img width="1001" height="463" alt="wiki_error_web" src="https://github.com/user-attachments/assets/33c5a907-b81c-4157-bd37-33341412172a" />
Figure 5: Malicious file in wiki causes error 500
<img width="1018" height="537" alt="wiki_error_console" src="https://github.com/user-attachments/assets/9b0ab551-5720-4715-a2ac-f7310534f025" />
Figure 6: Console error caused by malicious file in wiki
Impact
The repository and wiki pages will not render when files named with the payload are present in the repository or in the wiki. This condition will be present as long as the malicious file is present in the repository or wiki. The issue will not cause a DoS condition when using the server via CLI.
AnalysisAI
Denial of service in Gogs repository and wiki web interfaces allows any authenticated user with write access to permanently break file listing pages by committing a file whose name contains incomplete git pathspec metacharacters. Affected versions are Gogs <= 0.14.2; the web UI for the targeted repository or wiki returns HTTP 500 on every subsequent page load until an administrator removes the malicious file via CLI. Publicly available exploit code exists as documented in the GHSA-3qq3-668m-v9mj advisory with a specific PoC payload; no active exploitation confirmed (not in CISA KEV).
Technical ContextAI
The root cause is CWE-20 (Improper Input Validation) in two Go route handlers: internal/route/repo/view.go (line 56) and internal/route/repo/wiki.go (line 174). Both handlers call the github.com/gogs/git-module library to retrieve commit metadata for files in a repository or wiki. Git's pathspec syntax interprets characters such as *, ?, [, and ] as glob patterns rather than literal filename characters. When a filename contains an incomplete bracket expression (e.g., the payload '"[]'), git rejects the pathspec and returns an error instead of commit data. The view.go handler fails to guard against this error, and wiki.go additionally dereferences commits[0] without checking whether the returned slice is non-empty, causing a nil-pointer panic. The fix in v0.14.3 passes git.LsTreeOptions{Verbatim: true} to all Entries() calls across view.go, wiki.go, and the API handlers in contents.go and tree.go, instructing the library to treat filenames as literal strings. The underlying git-module dependency was simultaneously upgraded from v1.8.4 to v1.8.6 to support this flag. Affected package: pkg:go/gogs.io_gogs <= 0.14.2.
RemediationAI
Upgrade Gogs to v0.14.3 (https://github.com/gogs/gogs/releases/tag/v0.14.3), which is the vendor-confirmed patched release addressing this vulnerability via PR #8116 (commit ae41bab5f28e4880edcef01c91d2cbb8839ec9e4). The fix passes git.LsTreeOptions{Verbatim: true} to all git listing calls and upgrades the github.com/gogs/git-module dependency to v1.8.6. If immediate upgrade is not feasible, restrict repository and wiki write permissions to fully trusted users only, eliminating the attacker's ability to introduce the malicious filename - note this is a policy control, not a code fix, and trusted insiders can still trigger the condition. As a detection measure, implement a pre-receive git hook that rejects filenames containing unbalanced bracket expressions or other incomplete pathspec metacharacters (*?[]); be aware this may interfere with legitimate filenames containing these characters. If the DoS condition has already been triggered, the only recovery path is CLI-based removal of the offending file followed by a force-push or direct repository manipulation, since the web interface will remain unavailable.
Same weakness CWE-20 – Improper Input Validation
View allSame technique Denial Of Service
View allShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2025-210329
GHSA-3qq3-668m-v9mj