Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 53 additions & 0 deletions images/router/haproxy/conf/haproxy-config.template
Original file line number Diff line number Diff line change
Expand Up @@ -273,6 +273,23 @@ frontend public
# Strip off Proxy headers to prevent HTTpoxy (https://httpoxy.org/)
http-request del-header Proxy

# Strip off X-SSL* headers for plain HTTP if not explicitly disabled.
# This prevents unauthenticated spoofing of mutual TLS client identities.
{{- if isTrue (env "ROUTER_MUTUAL_TLS_HEADER_FILTER" "true") }}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The indentation of these Go template stanzas is inconsistent with surrounding Go template stanzas, but the template already has similar inconsistencies elsewhere; we can fix them all up in a follow-up.

http-request del-header X-SSL
http-request del-header X-SSL-Client-CN
http-request del-header X-SSL-Client-DER
http-request del-header X-SSL-Client-DN
http-request del-header X-SSL-Client-NotAfter
http-request del-header X-SSL-Client-NotBefore
http-request del-header X-SSL-Client-SHA1
http-request del-header X-SSL-Client-Serial
http-request del-header X-SSL-Client-Subject

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Where is X-SSL-Client-Subject added? Why does it need to be deleted?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

While we don't set them on router, I think it is a valid deletion. This header can also be used for authentication, in case some day we decide to add it to router passing to backend by a customer request we can run on a problem of forgetting to remove it

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It seems arbitrary. Why not also add http-request del-header X-SSL-Client-Chain-DER or http-request del-header X-SSL-Client-Used or other arbitrary things that an application could theoretically use or HAProxy could theoretically set?

http-request del-header X-SSL-Client-Verify
http-request del-header X-SSL-Client-Version
http-request del-header X-SSL-Issuer
{{- end }}

# DNS labels are case insensitive (RFC 4343), we need to convert the hostname into lowercase
# before matching, or any requests containing uppercase characters will never match.
http-request set-header Host %[req.hdr(Host),lower]
Expand Down Expand Up @@ -390,6 +407,24 @@ frontend fe_sni
# Strip off Proxy headers to prevent HTTpoxy (https://httpoxy.org/)
http-request del-header Proxy

# Strip off X-SSL* headers if not explicitly disabled.
# This prevents unauthenticated spoofing of mutual TLS client identities
# when mutual TLS is not enabled and so the headers are not set below.
{{- if isTrue (env "ROUTER_MUTUAL_TLS_HEADER_FILTER" "true") }}
http-request del-header X-SSL
http-request del-header X-SSL-Client-CN
http-request del-header X-SSL-Client-DER
http-request del-header X-SSL-Client-DN
http-request del-header X-SSL-Client-NotAfter
http-request del-header X-SSL-Client-NotBefore
http-request del-header X-SSL-Client-SHA1
http-request del-header X-SSL-Client-Serial
http-request del-header X-SSL-Client-Subject
http-request del-header X-SSL-Client-Verify
http-request del-header X-SSL-Client-Version
http-request del-header X-SSL-Issuer
{{- end }}

# DNS labels are case insensitive (RFC 4343), we need to convert the hostname into lowercase
# before matching, or any requests containing uppercase characters will never match.
http-request set-header Host %[req.hdr(Host),lower]
Expand Down Expand Up @@ -505,6 +540,24 @@ frontend fe_no_sni
# Strip off Proxy headers to prevent HTTpoxy (https://httpoxy.org/)
http-request del-header Proxy

# Strip off X-SSL* headers if not explicitly disabled.
# This prevents unauthenticated spoofing of mutual TLS client identities
# when mutual TLS is not enabled and so the headers are not set below.
{{- if isTrue (env "ROUTER_MUTUAL_TLS_HEADER_FILTER" "true") }}
http-request del-header X-SSL
http-request del-header X-SSL-Client-CN
http-request del-header X-SSL-Client-DER
http-request del-header X-SSL-Client-DN
http-request del-header X-SSL-Client-NotAfter
http-request del-header X-SSL-Client-NotBefore
http-request del-header X-SSL-Client-SHA1
http-request del-header X-SSL-Client-Serial
http-request del-header X-SSL-Client-Subject
http-request del-header X-SSL-Client-Verify
http-request del-header X-SSL-Client-Version
http-request del-header X-SSL-Issuer
{{- end }}

# DNS labels are case insensitive (RFC 4343), we need to convert the hostname into lowercase
# before matching, or any requests containing uppercase characters will never match.
http-request set-header Host %[req.hdr(Host),lower]
Expand Down