Ecosyste.ms: Advisories

An open API service providing security vulnerability metadata for many open source software ecosystems.

Security Advisories: MDE2OlNlY3VyaXR5QWR2aXNvcnlHSFNBLWo3cHgtNmh3ai1ocGpn

Open Redirect in OAuth2 Proxy

Impact

As users can provide a redirect address for the proxy to send the authenticated user to at the end of the authentication flow. This is expected to be the original URL that the user was trying to access.
This redirect URL is checked within the proxy and validated before redirecting the user to prevent malicious actors providing redirects to potentially harmful sites.

However, by crafting a redirect URL with HTML encoded whitespace characters (eg. %0a, %0b,%09,%0d) the validation could be bypassed and allow a redirect to any URL provided.

Patches

@rootxharsh and @iamnoooob provided this patch as potential solution:

From 4b941f56eda310b5c4dc8080b7635a6bfabccad4 Mon Sep 17 00:00:00 2001
From: Harsh Jaiswal <[email protected]>
Date: Fri, 1 May 2020 20:38:31 +0530
Subject: [PATCH] Fixes redirect issue

---
 oauthproxy.go | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/oauthproxy.go b/oauthproxy.go
index 1e9bb7c..f8beb4d 100644
--- a/oauthproxy.go
+++ b/oauthproxy.go
@@ -577,8 +577,9 @@ func validOptionalPort(port string) bool {

 // IsValidRedirect checks whether the redirect URL is whitelisted
 func (p *OAuthProxy) IsValidRedirect(redirect string) bool {
+       matched, _ := regexp.MatchString(`^/\s+/|\\`, redirect)
        switch {
-       case strings.HasPrefix(redirect, "/") && !strings.HasPrefix(redirect, "//") && !strings.HasPrefix(redirect, "/\\"):
+       case strings.HasPrefix(redirect, "/") && !strings.HasPrefix(redirect, "//") && !matched:
                return true
        case strings.HasPrefix(redirect, "http://") || strings.HasPrefix(redirect, "https://"):
                redirectURL, err := url.Parse(redirect)
--
2.17.1

This issue was also reported to us separately by @mik317 several hours later

The fix was implemented in #xxx and released as version 5.1.1

Permalink: https://github.com/advisories/GHSA-j7px-6hwj-hpjg
JSON: https://advisories.ecosyste.ms/api/v1/advisories/MDE2OlNlY3VyaXR5QWR2aXNvcnlHSFNBLWo3cHgtNmh3ai1ocGpn
Source: GitHub Advisory Database
Origin: Unspecified
Severity: High
Classification: General
Published: over 2 years ago
Updated: 3 months ago


CVSS Score: 7.1
CVSS vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:L

Identifiers: GHSA-j7px-6hwj-hpjg, CVE-2020-11053
References: Repository: https://github.com/oauth2-proxy/oauth2-proxy
Blast Radius: 1.0

Affected Packages

go:github.com/oauth2-proxy/oauth2-proxy
Dependent packages: 1
Dependent repositories: 0
Downloads:
Affected Version Ranges: < 5.1.1
Fixed in: 5.1.1
All affected versions: 1.1.1, 2.0.1, 3.0.0, 3.1.0, 3.2.0
All unaffected versions: