@@ -242,6 +242,23 @@ frontend public
242242 # Strip off Proxy headers to prevent HTTpoxy (https://httpoxy.org/)
243243 http-request del-header Proxy
244244
245+ # Strip off X-SSL* headers for plain HTTP if not explicitly disabled.
246+ # This prevents unauthenticated spoofing of mutual TLS client identities.
247+ {{- if isTrue (env "ROUTER_MUTUAL_TLS_HEADER_FILTER" "true") }}
248+ http-request del-header X-SSL
249+ http-request del-header X-SSL-Client-CN
250+ http-request del-header X-SSL-Client-DER
251+ http-request del-header X-SSL-Client-DN
252+ http-request del-header X-SSL-Client-NotAfter
253+ http-request del-header X-SSL-Client-NotBefore
254+ http-request del-header X-SSL-Client-SHA1
255+ http-request del-header X-SSL-Client-Serial
256+ http-request del-header X-SSL-Client-Subject
257+ http-request del-header X-SSL-Client-Verify
258+ http-request del-header X-SSL-Client-Version
259+ http-request del-header X-SSL-Issuer
260+ {{- end }}
261+
245262 # DNS labels are case insensitive (RFC 4343), we need to convert the hostname into lowercase
246263 # before matching, or any requests containing uppercase characters will never match.
247264 http-request set-header Host %[req.hdr(Host),lower]
@@ -356,6 +373,24 @@ frontend fe_sni
356373 # Strip off Proxy headers to prevent HTTpoxy (https://httpoxy.org/)
357374 http-request del-header Proxy
358375
376+ # Strip off X-SSL* headers if not explicitly disabled.
377+ # This prevents unauthenticated spoofing of mutual TLS client identities
378+ # when mutual TLS is not enabled and so the headers are not set below.
379+ {{- if isTrue (env "ROUTER_MUTUAL_TLS_HEADER_FILTER" "true") }}
380+ http-request del-header X-SSL
381+ http-request del-header X-SSL-Client-CN
382+ http-request del-header X-SSL-Client-DER
383+ http-request del-header X-SSL-Client-DN
384+ http-request del-header X-SSL-Client-NotAfter
385+ http-request del-header X-SSL-Client-NotBefore
386+ http-request del-header X-SSL-Client-SHA1
387+ http-request del-header X-SSL-Client-Serial
388+ http-request del-header X-SSL-Client-Subject
389+ http-request del-header X-SSL-Client-Verify
390+ http-request del-header X-SSL-Client-Version
391+ http-request del-header X-SSL-Issuer
392+ {{- end }}
393+
359394 # DNS labels are case insensitive (RFC 4343), we need to convert the hostname into lowercase
360395 # before matching, or any requests containing uppercase characters will never match.
361396 http-request set-header Host %[req.hdr(Host),lower]
@@ -468,6 +503,24 @@ frontend fe_no_sni
468503 # Strip off Proxy headers to prevent HTTpoxy (https://httpoxy.org/)
469504 http-request del-header Proxy
470505
506+ # Strip off X-SSL* headers if not explicitly disabled.
507+ # This prevents unauthenticated spoofing of mutual TLS client identities
508+ # when mutual TLS is not enabled and so the headers are not set below.
509+ {{- if isTrue (env "ROUTER_MUTUAL_TLS_HEADER_FILTER" "true") }}
510+ http-request del-header X-SSL
511+ http-request del-header X-SSL-Client-CN
512+ http-request del-header X-SSL-Client-DER
513+ http-request del-header X-SSL-Client-DN
514+ http-request del-header X-SSL-Client-NotAfter
515+ http-request del-header X-SSL-Client-NotBefore
516+ http-request del-header X-SSL-Client-SHA1
517+ http-request del-header X-SSL-Client-Serial
518+ http-request del-header X-SSL-Client-Subject
519+ http-request del-header X-SSL-Client-Verify
520+ http-request del-header X-SSL-Client-Version
521+ http-request del-header X-SSL-Issuer
522+ {{- end }}
523+
471524 # DNS labels are case insensitive (RFC 4343), we need to convert the hostname into lowercase
472525 # before matching, or any requests containing uppercase characters will never match.
473526 http-request set-header Host %[req.hdr(Host),lower]
0 commit comments