Skip to content

Commit 709da78

Browse files
committed
Fixed an open redirect issue reported by @Fushuling GHSA-h5g6-xmh4-hc37
1 parent c247d6a commit 709da78

3 files changed

Lines changed: 20 additions & 1 deletion

File tree

CHANGELOG.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,16 @@ This project uses [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

88
## [Unreleased]
99

10-
### Added
10+
## [v0.17.7] - 2026-06-02
11+
12+
### Security
13+
14+
- Fixed an open redirect issue reported by @Fushuling https://github.com/openrundev/openrun/security/advisories/GHSA-h5g6-xmh4-hc37
1115

1216
## [v0.17.6] - 2026-06-01
1317

18+
### Added
19+
1420
- Added Windows Service Control Manager support for `openrun server start`, allowing OpenRun to run as a native Windows service registered with `sc.exe`.
1521

1622
## [v0.17.5] - 2026-05-28

internal/app/handler.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,9 @@ func (a *App) validatedRefererRedirect(r *http.Request, referrer string) (string
114114
if redirectTarget == "" {
115115
redirectTarget = "/"
116116
}
117+
if strings.HasPrefix(redirectTarget, "//") {
118+
return "", false
119+
}
117120
if refURL.RawQuery != "" {
118121
redirectTarget += "?" + refURL.RawQuery
119122
}

internal/app/tests/fragment_test.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -330,6 +330,16 @@ def handler(req):
330330
testutil.AssertEqualsInt(t, "code", http.StatusSeeOther, response.Code)
331331
testutil.AssertEqualsString(t, "redirect", "/test/abc?q=1#frag", response.Header().Get("Location"))
332332

333+
request = httptest.NewRequest("POST", "/test/abc/frag", nil)
334+
request.Header.Set("Referer", "http://example.com//evil.com")
335+
response = httptest.NewRecorder()
336+
a.ServeHTTP(response, request)
337+
338+
// Same-origin referer with a network-path redirect target is ignored.
339+
testutil.AssertEqualsInt(t, "code", http.StatusOK, response.Code)
340+
testutil.AssertEqualsString(t, "body", "Template main myvalue. fragdata myvalue2 ", response.Body.String())
341+
testutil.AssertEqualsString(t, "redirect", "", response.Header().Get("Location"))
342+
333343
request = httptest.NewRequest("POST", "/test/abc/frag", nil)
334344
request.Header.Set("Referer", "http://evil.com/test/abc")
335345
response = httptest.NewRecorder()

0 commit comments

Comments
 (0)