Compare commits
2 Commits
| Author | SHA1 | Date |
|---|---|---|
|
|
d49556d966 | |
|
|
f5f1348176 |
19
CHANGELOG.md
19
CHANGELOG.md
|
|
@ -6,8 +6,27 @@
|
|||
|
||||
## Breaking Changes
|
||||
|
||||
## Changes since v5.1.1
|
||||
|
||||
# v5.1.1
|
||||
|
||||
## Release Highlights
|
||||
|
||||
N/A
|
||||
|
||||
## Important Notes
|
||||
|
||||
- (Security) Fix for [open redirect vulnerability](https://github.com/oauth2-proxy/oauth2-proxy/security/advisories/GHSA-j7px-6hwj-hpjg).
|
||||
- A bad actor using encoded whitespace in redirect URIs can redirect a session to another domain
|
||||
|
||||
## Breaking Changes
|
||||
|
||||
N/A
|
||||
|
||||
## Changes since v5.1.0
|
||||
|
||||
- [GHSA-j7px-6hwj-hpjg](https://github.com/oauth2-proxy/oauth2-proxy/security/advisories/GHSA-j7px-6hwj-hpjg) Fix Open Redirect Vulnerability with encoded Whitespace characters (@JoelSpeed)
|
||||
|
||||
# v5.1.0
|
||||
|
||||
## Release Hightlights
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ A list of changes can be seen in the [CHANGELOG](CHANGELOG.md).
|
|||
|
||||
1. Choose how to deploy:
|
||||
|
||||
a. Download [Prebuilt Binary](https://github.com/pusher/oauth2_proxy/releases) (current release is `v5.0.0`)
|
||||
a. Download [Prebuilt Binary](https://github.com/pusher/oauth2_proxy/releases) (current release is `v5.1.1`)
|
||||
|
||||
b. Build with `$ go get github.com/pusher/oauth2_proxy` which will put the binary in `$GOROOT/bin`
|
||||
|
||||
|
|
@ -28,7 +28,7 @@ Prebuilt binaries can be validated by extracting the file and verifying it again
|
|||
|
||||
```
|
||||
sha256sum -c sha256sum.txt 2>&1 | grep OK
|
||||
oauth2_proxy-4.0.0.linux-amd64: OK
|
||||
oauth2_proxy-5.1.1.linux-amd64: OK
|
||||
```
|
||||
|
||||
2. [Select a Provider and Register an OAuth Application with a Provider](https://pusher.github.io/oauth2_proxy/auth-configuration)
|
||||
|
|
@ -38,7 +38,8 @@ oauth2_proxy-4.0.0.linux-amd64: OK
|
|||
|
||||
## Security
|
||||
|
||||
If you are running a version older than v5.0.0 we **strongly recommend you please update** to a current version. RE: [open redirect vulnverability](https://github.com/pusher/oauth2_proxy/security/advisories/GHSA-qqxw-m5fj-f7gv)
|
||||
If you are running a version older than v5.1.0 we **strongly recommend you please update** to a current version.
|
||||
See [open redirect vulnverability](https://github.com/oauth2-proxy/oauth2-proxy/security/advisories/GHSA-j7px-6hwj-hpjg) for details.
|
||||
|
||||
## Docs
|
||||
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ nav_order: 1
|
|||
|
||||
1. Choose how to deploy:
|
||||
|
||||
a. Download [Prebuilt Binary](https://github.com/pusher/oauth2_proxy/releases) (current release is `v4.0.0`)
|
||||
a. Download [Prebuilt Binary](https://github.com/pusher/oauth2_proxy/releases) (current release is `v5.1.1`)
|
||||
|
||||
b. Build with `$ go get github.com/pusher/oauth2_proxy` which will put the binary in `$GOROOT/bin`
|
||||
|
||||
|
|
@ -19,7 +19,7 @@ Prebuilt binaries can be validated by extracting the file and verifying it again
|
|||
|
||||
```
|
||||
$ sha256sum -c sha256sum.txt 2>&1 | grep OK
|
||||
oauth2_proxy-4.0.0.linux-amd64: OK
|
||||
oauth2_proxy-5.1.1.linux-amd64: OK
|
||||
```
|
||||
|
||||
2. [Select a Provider and Register an OAuth Application with a Provider](auth-configuration)
|
||||
|
|
|
|||
|
|
@ -57,6 +57,10 @@ var SignatureHeaders = []string{
|
|||
var (
|
||||
// ErrNeedsLogin means the user should be redirected to the login page
|
||||
ErrNeedsLogin = errors.New("redirect to login page")
|
||||
|
||||
// Used to check final redirects are not susceptible to open redirects.
|
||||
// Matches //, /\ and both of these with whitespace in between (eg / / or / \).
|
||||
invalidRedirectRegex = regexp.MustCompile(`^/(\s|\v)?(/|\\)`)
|
||||
)
|
||||
|
||||
// OAuthProxy is the main authentication proxy
|
||||
|
|
@ -571,7 +575,7 @@ func validOptionalPort(port string) bool {
|
|||
// IsValidRedirect checks whether the redirect URL is whitelisted
|
||||
func (p *OAuthProxy) IsValidRedirect(redirect string) bool {
|
||||
switch {
|
||||
case strings.HasPrefix(redirect, "/") && !strings.HasPrefix(redirect, "//") && !strings.HasPrefix(redirect, "/\\"):
|
||||
case strings.HasPrefix(redirect, "/") && !strings.HasPrefix(redirect, "//") && !invalidRedirectRegex.MatchString(redirect):
|
||||
return true
|
||||
case strings.HasPrefix(redirect, "http://") || strings.HasPrefix(redirect, "https://"):
|
||||
redirectURL, err := url.Parse(redirect)
|
||||
|
|
|
|||
|
|
@ -323,6 +323,61 @@ func TestIsValidRedirect(t *testing.T) {
|
|||
Redirect: "http://a.sub.anyport.bar:8081/redirect",
|
||||
ExpectedResult: true,
|
||||
},
|
||||
{
|
||||
Desc: "openRedirect1",
|
||||
Redirect: "/\\evil.com",
|
||||
ExpectedResult: false,
|
||||
},
|
||||
{
|
||||
Desc: "openRedirectSpace1",
|
||||
Redirect: "/ /evil.com",
|
||||
ExpectedResult: false,
|
||||
},
|
||||
{
|
||||
Desc: "openRedirectSpace2",
|
||||
Redirect: "/ \\evil.com",
|
||||
ExpectedResult: false,
|
||||
},
|
||||
{
|
||||
Desc: "openRedirectTab1",
|
||||
Redirect: "/\t/evil.com",
|
||||
ExpectedResult: false,
|
||||
},
|
||||
{
|
||||
Desc: "openRedirectTab2",
|
||||
Redirect: "/\t\\evil.com",
|
||||
ExpectedResult: false,
|
||||
},
|
||||
{
|
||||
Desc: "openRedirectVerticalTab1",
|
||||
Redirect: "/\v/evil.com",
|
||||
ExpectedResult: false,
|
||||
},
|
||||
{
|
||||
Desc: "openRedirectVerticalTab2",
|
||||
Redirect: "/\v\\evil.com",
|
||||
ExpectedResult: false,
|
||||
},
|
||||
{
|
||||
Desc: "openRedirectNewLine1",
|
||||
Redirect: "/\n/evil.com",
|
||||
ExpectedResult: false,
|
||||
},
|
||||
{
|
||||
Desc: "openRedirectNewLine2",
|
||||
Redirect: "/\n\\evil.com",
|
||||
ExpectedResult: false,
|
||||
},
|
||||
{
|
||||
Desc: "openRedirectCarriageReturn1",
|
||||
Redirect: "/\r/evil.com",
|
||||
ExpectedResult: false,
|
||||
},
|
||||
{
|
||||
Desc: "openRedirectCarriageReturn2",
|
||||
Redirect: "/\r\\evil.com",
|
||||
ExpectedResult: false,
|
||||
},
|
||||
}
|
||||
|
||||
for _, tc := range testCases {
|
||||
|
|
|
|||
Loading…
Reference in New Issue