Overview of the Vulnerability
On April 21, 2026, security researchers at depthfirst disclosed CVE-2026-42945, a critical vulnerability in NGINX's rewrite module that allows unauthenticated remote code execution. This flaw, which carried a CVSS v4 score of 9.2, had existed undetected since the rewrite module's introduction 18 years earlier. F5 issued an advisory and released patches in subsequent NGINX versions.
The vulnerability requires no authentication for exploitation. An attacker capable of sending HTTP requests to an affected NGINX instance can execute arbitrary code on the underlying system.
Timeline of Events
2008: NGINX rewrite module introduced with the vulnerability present.
April 21, 2026: depthfirst publicly discloses CVE-2026-42945 after coordinated disclosure with F5.
April 2026: F5 releases patched NGINX versions addressing the vulnerability.
The 18-year gap between introduction and discovery marks one of the longest-lived critical vulnerabilities in a major web server component. During this period, NGINX powered millions of production systems, including those handling payment card data and other sensitive information.
Missing Controls and Failures
Code Review Process: The vulnerable code in the rewrite module passed initial reviews and survived nearly two decades of maintenance. Your team's code review process should identify memory safety issues and input validation gaps.
Static Analysis: Modern static analysis tools can detect memory handling errors that lead to RCE vulnerabilities. The absence of automated scanning or insufficient tooling coverage allowed the flaw to persist.
Security-Focused Testing: Fuzzing and dynamic analysis could have identified the vulnerability. Its survival for 18 years suggests either a lack of security testing or insufficient coverage of edge cases in URL rewriting logic.
Dependency Inventory and Risk Assessment: Organizations running NGINX likely documented it as a dependency but may not have assessed the rewrite module as a high-risk component. The module processes untrusted input and performs complex string manipulation, both red flags for security-critical code.
Patch Management Cadence: Between 2008 and 2026, your team likely updated NGINX multiple times. Each update cycle was an opportunity to review release notes for security fixes and assess whether your configuration used affected components.
Relevant Standards and Requirements
PCI DSS v4.0.1 Requirement 6.3.2 mandates that custom and bespoke software be reviewed prior to production release. While NGINX itself is third-party software, your configuration files that define rewrite rules are custom code. Review rewrite logic for injection vulnerabilities and ensure URL manipulation doesn't expose sensitive data.
PCI DSS v4.0.1 Requirement 6.3.3 requires code review or application security testing before release. For your NGINX deployment, this means testing rewrite rules and validating that your specific configuration doesn't introduce vulnerabilities.
OWASP ASVS v4.0.3 Requirement 14.2.1 states: "All components, libraries, and frameworks used by the application must be identified, and the versions in use must be checked for known vulnerabilities." Maintain an inventory that includes not just "NGINX" but "NGINX rewrite module version X.Y.Z" and track security advisories for each component.
ISO 27001 Control 8.8 (Management of technical vulnerabilities) requires obtaining timely information about technical vulnerabilities, evaluating exposure, and taking appropriate measures. An 18-year-old vulnerability in your web server violates this control—not because you should have found it yourself, but because your process should ensure you patch it within days of disclosure.
NIST 800-53 Rev 5 Control SI-2 (Flaw Remediation) requires installing security-relevant software updates within organization-defined time periods. For a CVSS 9.2 unauthenticated RCE in your internet-facing web server, "organization-defined" should mean hours or days.
Actionable Steps for Your Team
Map Your NGINX Module Usage: Run nginx -V on every instance and document which modules you've compiled in. Create a configuration inventory listing modules and their security-relevant settings.
Establish Module-Level Vulnerability Tracking: Subscribe to F5's security advisories and the nginx-announce mailing list. When a vulnerability is disclosed, determine within an hour whether your deployment uses the affected module. Tag your NGINX instances in your asset inventory with module details for quick queries.
Test Your Rewrite Rules for Injection: If you use the rewrite module, your URL transformation logic processes attacker-controlled input. Write tests that send malicious URLs with path traversal attempts, null bytes, and encoding variations. Verify that your rules don't create new vulnerabilities.
Define Critical Patch Windows by Exposure: Document which NGINX instances are internet-facing, which handle sensitive data, and what your patch SLA is for each tier. For internet-facing systems with a CVSS 9+ unauthenticated RCE, your SLA should be measured in hours.
Implement Automated Patch Verification: After patching NGINX, verify the fix. Check the version number, confirm the vulnerable module is updated, and run a test request that would trigger the vulnerability on an unpatched system. Automation catches cases where a patch fails to apply.
Review Your Static Analysis Coverage: If you're building NGINX from source or maintaining custom modules, run static analyzers that catch memory safety issues. Tools like Coverity, CodeQL, or Clang static analyzer can flag many RCE-class bugs.
The depthfirst disclosure and F5's response followed responsible disclosure practices. You can't prevent researchers from finding decade-old bugs in your dependencies, but you can control how fast you patch them and whether your configuration compounds the risk. An 18-year-old vulnerability should never become an 18-year-and-30-day compromise because your patch process took a month.



