Server side template injection In gogs.io/gogs
Description
Gogs has DoS in rendering issue index pattern
Summary
Special template of issue index pattern may cause panic.
Details
in internal/markup/markup.go
link = fmt.Sprintf(`<a href="%s">%s</a>`, com.Expand(metas["format"], metas), m)
Issue index pattern is rendered to link with com.Expand.
However, com.Expand is not safe.
i = strings.Index(template, "}") if s, ok := match[template[:i]]; ok {
when { is found but } not found, i comes to 1, template[:-1] will be called, and then panicked

finally, all pages than contains issue index are unavailable.
PoC
set issue index pattern as follow

add a commit which point to an issue in its msg

using #1 above
Impact
DoS that cause part of pages of the specify repo unavailable.
Mitigation
Update Impact
Minimal update. May introduce new vulnerabilities or breaking changes.
Ecosystem | Package | Affected version | Patched versions |
|---|---|---|---|
go | 0.14.3 |
Aliases
1. 2. 3. 4. 5.
References
1. 2. 3. 4.