Skip to content

Commit 748cf6c

Browse files
committed
fix(auth-proxy-set-headers): Sanitize authorization header values
1 parent 15ee736 commit 748cf6c

File tree

2 files changed

+21
-5
lines changed

2 files changed

+21
-5
lines changed

internal/ingress/controller/template/template.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -619,8 +619,13 @@ func buildAuthProxySetHeaders(headers map[string]string) []string {
619619
}
620620

621621
for name, value := range headers {
622-
res = append(res, fmt.Sprintf("proxy_set_header '%v' '%v';", name, value))
622+
if strings.ContainsAny(name, "\n\r") || strings.ContainsAny(value, "\n\r") {
623+
continue
624+
}
625+
626+
res = append(res, fmt.Sprintf("proxy_set_header %v %v;", strconv.Quote(name), strconv.Quote(value)))
623627
}
628+
624629
sort.Strings(res)
625630
return res
626631
}

internal/ingress/controller/template/template_test.go

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -548,12 +548,23 @@ func TestBuildAuthResponseLua(t *testing.T) {
548548

549549
func TestBuildAuthProxySetHeaders(t *testing.T) {
550550
proxySetHeaders := map[string]string{
551-
"header1": "value1",
552-
"header2": "value2",
551+
"Content-Security-Policy": "default-src 'self'; img-src 'self' example.com",
552+
"Content-Type": "application/json; charset=\"utf-8\"",
553+
"header1": "value1",
554+
"header2": "value2",
555+
"Link": "<https://example.com>; rel=\"preload\"; as=\"script\"; crossorigin=\"anonymous\"",
556+
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36",
557+
"new\rline": "value1",
558+
"newline2": "valu\ne2",
553559
}
560+
554561
expected := []string{
555-
"proxy_set_header 'header1' 'value1';",
556-
"proxy_set_header 'header2' 'value2';",
562+
`proxy_set_header "Content-Security-Policy" "default-src 'self'; img-src 'self' example.com";`,
563+
`proxy_set_header "Content-Type" "application/json; charset=\"utf-8\"";`,
564+
`proxy_set_header "Link" "<https://example.com>; rel=\"preload\"; as=\"script\"; crossorigin=\"anonymous\"";`,
565+
`proxy_set_header "User-Agent" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36";`,
566+
`proxy_set_header "header1" "value1";`,
567+
`proxy_set_header "header2" "value2";`,
557568
}
558569

559570
headers := buildAuthProxySetHeaders(proxySetHeaders)

0 commit comments

Comments
 (0)