CVE-2026-55723 Overview
CVE-2026-55723 is an injection vulnerability in the F5 NGINX Ingress Controller configuration generator. When the controller is configured with Custom Resource Definitions (CRDs) or Ingress annotations, multiple user-controllable fields are written into the generated NGINX configuration without sanitization. An authenticated attacker with permission to create or modify these CRDs or annotations can craft values that inject arbitrary NGINX configuration directives. The flaw is tracked under [CWE-76] (Improper Neutralization of Equivalent Special Elements) and affects the Kubernetes control plane rather than the data plane.
Critical Impact
An authenticated attacker with Kubernetes API write access to NGINX Ingress Controller CRDs or Ingress annotations can inject arbitrary NGINX directives, create or delete files on the controller host, and disable services.
Affected Products
- F5 NGINX Ingress Controller (versions prior to the vendor-supplied fix)
- Deployments consuming custom CRDs supported by NGINX Ingress Controller
- Deployments relying on NGINX-specific Ingress annotations
Discovery Timeline
- 2026-07-15 - CVE-2026-55723 published to NVD
- 2026-07-16 - Last updated in NVD database
Technical Details for CVE-2026-55723
Vulnerability Analysis
The NGINX Ingress Controller translates Kubernetes objects into nginx.conf snippets at runtime. Several fields sourced from CRDs and Ingress annotations flow directly into that template output without validation or escaping. An attacker who can submit crafted values through the Kubernetes API can therefore terminate the intended directive and append arbitrary NGINX configuration blocks. The injected directives are then loaded when the controller reloads, running with the privileges of the controller process.
Because NGINX supports directives that read from and write to the filesystem, and can invoke sub-processes through modules such as perl or Lua when enabled, this expands beyond simple configuration tampering. F5 confirms that successful exploitation can create or delete files and disable services on the controller host. The vulnerability is a control plane issue only; incoming HTTP traffic on the data plane is not directly manipulated.
Root Cause
The configuration generator concatenates user-controlled strings into templated NGINX configuration without applying character allowlists or context-aware escaping. Values that legitimately require quoting, escaping, or newline stripping are treated as trusted input, allowing directive boundary breakout.
Attack Vector
Exploitation requires authenticated access to the Kubernetes API with permissions to create or modify Ingress resources, related annotations, or the NGINX-specific CRDs (such as VirtualServer, VirtualServerRoute, TransportServer, or Policy). Any namespace-scoped role that grants write access to these objects can be sufficient, meaning tenants in a shared cluster or compromised service accounts can escalate impact from the namespace boundary to the controller itself.
The vulnerability is described in prose only; no verified public proof-of-concept is available. Refer to the F5 Security Advisory K000161800 for vendor technical details.
Detection Methods for CVE-2026-55723
Indicators of Compromise
- Unexpected NGINX directives (for example load_module, include, perl_set, access_log to unusual paths) appearing in generated nginx.conf on the controller pod
- CRD or Ingress annotation values containing newline characters, semicolons, or curly braces used to break directive boundaries
- Controller reload events immediately following modification of an Ingress resource by a low-privileged service account
- New or deleted files inside the controller container filesystem that do not correspond to a controller release
Detection Strategies
- Audit Kubernetes API server logs for create, update, and patch operations against Ingress objects and NGINX CRDs, correlating the acting identity with expected automation
- Compare rendered nginx.conf against a known-good template diff after each reconcile, alerting on directives outside the expected schema
- Enable admission control (OPA/Gatekeeper or Kyverno) policies that reject annotation values containing NGINX metacharacters
Monitoring Recommendations
- Forward Kubernetes audit logs and NGINX Ingress Controller pod logs to a centralized analytics platform for correlation
- Alert on process executions inside the controller pod beyond the expected nginx and controller binaries
- Track file integrity on the controller container's writable paths, including /etc/nginx/ and any volume mounts used for TLS material
How to Mitigate CVE-2026-55723
Immediate Actions Required
- Upgrade F5 NGINX Ingress Controller to the fixed version listed in F5 Security Advisory K000161800
- Review and tighten RBAC for ingresses, virtualservers, virtualserverroutes, transportservers, and policies to remove unnecessary write access
- Rotate any service account tokens that had write access to Ingress resources during the exposure window
Patch Information
F5 has published fixed releases and configuration guidance in F5 Security Advisory K000161800. Versions that have reached End of Technical Support (EoTS) are not evaluated by the vendor and should be migrated to a supported release. Confirm the running image digest of your controller pods after upgrade to verify the fix is in place.
Workarounds
- Disable support for snippet annotations by starting the controller with --enable-snippets=false, reducing the surface where raw NGINX directives can be injected
- Enforce admission policies that reject Ingress annotations and CRD fields containing ;, {, }, or newline characters
- Restrict namespace-scoped users to a curated set of validated annotations through a policy engine such as Kyverno or OPA/Gatekeeper
# Example Kyverno policy fragment to block snippet annotations
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: block-nginx-snippet-annotations
spec:
validationFailureAction: Enforce
rules:
- name: deny-snippet-keys
match:
any:
- resources:
kinds:
- Ingress
validate:
message: "NGINX snippet annotations are not permitted."
pattern:
metadata:
=(annotations):
X(nginx.org/server-snippets): "null"
X(nginx.org/location-snippets): "null"
X(nginx.ingress.kubernetes.io/configuration-snippet): "null"
X(nginx.ingress.kubernetes.io/server-snippet): "null"
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

