Skip to content

Commit a3c5d8d

Browse files
Merge pull request #1476 from MrSanketkumar/CVE-2026-46579-4.19
[release-4.19] OCPBUGS-86716: Add configuration override for X-SSL strip
2 parents 7ce99b2 + 5757b42 commit a3c5d8d

2 files changed

Lines changed: 73 additions & 4 deletions

File tree

pkg/operator/controller/ingress/deployment.go

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -96,9 +96,10 @@ const (
9696

9797
WorkloadPartitioningManagement = "target.workload.openshift.io/management"
9898

99-
RouterClientAuthPolicy = "ROUTER_MUTUAL_TLS_AUTH"
100-
RouterClientAuthCA = "ROUTER_MUTUAL_TLS_AUTH_CA"
101-
RouterClientAuthFilter = "ROUTER_MUTUAL_TLS_AUTH_FILTER"
99+
RouterClientAuthPolicy = "ROUTER_MUTUAL_TLS_AUTH"
100+
RouterClientAuthCA = "ROUTER_MUTUAL_TLS_AUTH_CA"
101+
RouterClientAuthFilter = "ROUTER_MUTUAL_TLS_AUTH_FILTER"
102+
RouterMutualTLSHeaderFilter = "ROUTER_MUTUAL_TLS_HEADER_FILTER"
102103

103104
RouterEnableCompression = "ROUTER_ENABLE_COMPRESSION"
104105
RouterCompressionMIMETypes = "ROUTER_COMPRESSION_MIME"
@@ -536,7 +537,8 @@ func desiredRouterDeployment(ci *operatorv1.IngressController, config *Config, i
536537
// Note, however, that dynamic servers consume memory even when not enabled.
537538
// Use this analysis of the memory usage to assess the impact of different numbers of servers:
538539
// https://gist.github.com/frobware/2b527ce3f040797909eff482a4776e0b
539-
MaxDynamicServers string `json:"maxDynamicServers"`
540+
MaxDynamicServers string `json:"maxDynamicServers"`
541+
MutualTLSHeaderFilter string `json:"mutualTLSHeaderFilter"`
540542
}
541543
if len(ci.Spec.UnsupportedConfigOverrides.Raw) > 0 {
542544
if err := json.Unmarshal(ci.Spec.UnsupportedConfigOverrides.Raw, &unsupportedConfigOverrides); err != nil {
@@ -619,6 +621,13 @@ func desiredRouterDeployment(ci *operatorv1.IngressController, config *Config, i
619621
})
620622
}
621623

624+
if v, err := strconv.ParseBool(unsupportedConfigOverrides.MutualTLSHeaderFilter); err == nil && !v {
625+
env = append(env, corev1.EnvVar{
626+
Name: RouterMutualTLSHeaderFilter,
627+
Value: "false",
628+
})
629+
}
630+
622631
if len(ci.Status.Domain) > 0 {
623632
cName := "router-" + ci.Name + "." + ci.Status.Domain
624633
env = append(env,

pkg/operator/controller/ingress/deployment_test.go

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1237,6 +1237,66 @@ func TestDesiredRouterDeploymentDynamicConfigManager(t *testing.T) {
12371237
}
12381238
}
12391239

1240+
func TestDesiredRouterDeploymentMutualTLSHeaderFilter(t *testing.T) {
1241+
testCases := []struct {
1242+
name string
1243+
unsupportedConfigOverrides string
1244+
expectedEnv []envData
1245+
}{
1246+
{
1247+
name: "not-set",
1248+
unsupportedConfigOverrides: `{}`,
1249+
expectedEnv: []envData{
1250+
{"ROUTER_MUTUAL_TLS_HEADER_FILTER", false, ""},
1251+
},
1252+
},
1253+
{
1254+
name: "set-to-false",
1255+
unsupportedConfigOverrides: `{"mutualTLSHeaderFilter":"false"}`,
1256+
expectedEnv: []envData{
1257+
{"ROUTER_MUTUAL_TLS_HEADER_FILTER", true, "false"},
1258+
},
1259+
},
1260+
{
1261+
name: "set-to-true",
1262+
unsupportedConfigOverrides: `{"mutualTLSHeaderFilter":"true"}`,
1263+
expectedEnv: []envData{
1264+
{"ROUTER_MUTUAL_TLS_HEADER_FILTER", false, ""},
1265+
},
1266+
},
1267+
{
1268+
name: "set-to-invalid-value",
1269+
unsupportedConfigOverrides: `{"mutualTLSHeaderFilter":"banana"}`,
1270+
expectedEnv: []envData{
1271+
{"ROUTER_MUTUAL_TLS_HEADER_FILTER", false, ""},
1272+
},
1273+
},
1274+
}
1275+
for _, tc := range testCases {
1276+
t.Run(tc.name, func(t *testing.T) {
1277+
ic := &operatorv1.IngressController{
1278+
ObjectMeta: metav1.ObjectMeta{
1279+
Name: "default",
1280+
},
1281+
Spec: operatorv1.IngressControllerSpec{
1282+
UnsupportedConfigOverrides: runtime.RawExtension{
1283+
Raw: []byte(tc.unsupportedConfigOverrides),
1284+
},
1285+
},
1286+
Status: operatorv1.IngressControllerStatus{
1287+
EndpointPublishingStrategy: &operatorv1.EndpointPublishingStrategy{
1288+
Type: operatorv1.PrivateStrategyType,
1289+
},
1290+
},
1291+
}
1292+
1293+
deployment, err := desiredRouterDeployment(ic, &Config{IngressControllerImage: ingressControllerImage}, &configv1.Ingress{}, &configv1.Infrastructure{}, &configv1.APIServer{}, &configv1.Network{}, false, false, nil, &configv1.Proxy{})
1294+
assert.NoError(t, err)
1295+
assert.NoError(t, checkDeploymentEnvironment(t, deployment, tc.expectedEnv))
1296+
})
1297+
}
1298+
}
1299+
12401300
func checkContainerPort(t *testing.T, d *appsv1.Deployment, portName string, port int32) {
12411301
t.Helper()
12421302
for _, p := range d.Spec.Template.Spec.Containers[0].Ports {

0 commit comments

Comments
 (0)