Vulnerability DatabaseCVE-2026-104269

CVE-2026-104269: 
ModSecurity vulnerability analysis and mitigation

Overview

CVE-2026-104269 is a WAF bypass vulnerability in OWASP ModSecurity (v3.x) caused by its multipart parser's failure to implement RFC 2231 MIME parameter encoding. An unauthenticated remote attacker can craft a multipart request with a benign filename= value (inspected by ModSecurity) and a malicious filename*=UTF-8'' value (parsed by RFC-compliant backends such as Go, Python, Node.js, and Java), effectively bypassing filename-based WAF rules including OWASP CRS rules 920120, 922100, and 922110. All ModSecurity versions >= 3.0.0 are affected; no patched version is currently available. The CVSS v3.1 base score is 8.6 (High) (GitHub Advisory).

Technical details

The root cause is ModSecurity's multipart parser not implementing RFC 2231 (MIME Parameter Value and Encoded Word Extensions), which defines the name*=charset''value syntax for encoding parameter values. When a multipart Content-Disposition header contains both filename= and filename*=, ModSecurity's parser reads only the plain filename= value, while RFC-compliant backend parsers (Go's mime.ParseMediaType, Python's Werkzeug/python-multipart, Node.js busboy, Java Spring's ContentDisposition.parse()) prefer and return the decoded filename* value per the RFC. This creates a semantic gap: the WAF evaluates a safe filename while the application processes a malicious one. PHP's native SAPI multipart parser is not affected as it does not implement RFC 2231. The weakness is classified under improper input validation / security control bypass (no CWE formally assigned yet) (GitHub Advisory).

Impact

Successful exploitation allows an attacker to upload files with arbitrary extensions (e.g., .php, .jsp, .py) to a backend server while the WAF permits the request, believing the filename is benign. If the application stores the file using the attacker-controlled filename* value and the file lands in a web-accessible directory, this can result in Remote Code Execution (RCE). The integrity impact is high (arbitrary file write), and in RCE scenarios, full confidentiality and availability compromise of the backend system is possible, with potential for lateral movement within the hosting environment (GitHub Advisory).

Exploitability

A proof-of-concept multipart HTTP request demonstrating the bypass was published as part of the GitHub Security Advisory (GHSA-5pww-8rfg-9crf) on September 30, 2026. The attack requires no authentication, no user interaction, and low complexity — an attacker only needs to craft a single HTTP POST request. No in-the-wild exploitation has been confirmed at this time, and the CVE remains in Reserved status with no CISA KEV listing or EPSS score published yet. The Feedly CVSS category estimate is HIGH (GitHub Advisory, Feedly).

Exploitation steps

  1. Reconnaissance: Identify a target web application protected by ModSecurity/OWASP CRS that uses a Go, Python (Flask/FastAPI), Node.js, or Java (Spring) backend for multipart file upload handling.
  2. Craft malicious multipart request: Construct an HTTP POST request with a Content-Disposition header containing both a benign filename= value (e.g., safe.jpg) and a malicious filename*=UTF-8'' value (e.g., shell.php):
POST /upload HTTP/1.1
Host: target.example.com
Content-Type: multipart/form-data; boundary=b
Content-Length: ...

--b
Content-Disposition: form-data; name="file"; filename="safe.jpg"; filename*=UTF-8''shell.php
Content-Type: image/jpeg

[PHP/JSP/server-side shell code here]
--b--
  1. WAF bypass: ModSecurity evaluates filename="safe.jpg" — the .jpg extension passes CRS rules 922110/922100 and the request is allowed through.
  2. Backend processes malicious filename: The RFC-compliant backend parser (e.g., Go's mime.ParseMediaType) returns shell.php as the filename and stores the uploaded file with that name.
  3. Achieve RCE: If the upload directory is web-accessible, request the uploaded shell (e.g., GET /uploads/shell.php) to execute arbitrary server-side code (GitHub Advisory).

Indicators of compromise

  • Network: HTTP POST requests to file upload endpoints containing filename*=UTF-8'' or filename*= in the Content-Disposition header alongside a differing filename= value; requests where Content-Type is image/jpeg or similar but the filename* extension is .php, .jsp, .py, .rb, or other executable types.
  • Logs: Web server/application logs showing upload of files with executable extensions (.php, .jsp, .aspx) that were not blocked by the WAF; ModSecurity audit logs showing MULTIPART_FILENAME as a benign image extension while the stored file has a different extension.
  • File System: Unexpected files with executable extensions (e.g., .php, .jsp) appearing in upload directories; newly created web shells with recent timestamps in web-accessible paths.
  • Process: Unusual child processes spawned by the web server process (e.g., sh, bash, cmd.exe) following access to recently uploaded files in the upload directory (GitHub Advisory).

Mitigation and workarounds

No patched version of ModSecurity is currently available. Recommended mitigations include:

  • Application-layer validation: Implement server-side filename validation in the backend application itself, independently of WAF rules, checking the final filename returned by the multipart parser (including RFC 2231 decoded values) against an allowlist of safe extensions.
  • Custom ModSecurity rules: Add rules to inspect the raw Content-Disposition header bytes for the presence of filename*= and block or flag such requests until an official fix is released.
  • Restrict upload directories: Ensure upload directories are never web-accessible or are served with execution disabled (e.g., php_flag engine off in Apache, location blocks in Nginx).
  • Monitor for updates: Track the ModSecurity GitHub repository and OWASP CRS project for patches addressing RFC 2231 parsing (GitHub Advisory).

Community reactions

The vulnerability was discovered and reported by researchers 0xkalawy and ZeyadZonkorany, who are credited in the GitHub Security Advisory published on September 30, 2026. The advisory was published under the OWASP ModSecurity project on GitHub, highlighting a fundamental architectural gap between WAF parsing and RFC-compliant backend behavior. A Tenable Nessus plugin (ID 362955) was published shortly after, indicating rapid uptake by the vulnerability management community (GitHub Advisory, Tenable).

Additional resources


Source: This report was generated using AI

Related ModSecurity vulnerabilities:

CVE ID

Severity

Score

Technologies

Component name

CISA KEV exploit

Has fix

Published date

CVE-2026-104269NONEN/A
  • ModSecurity logoModSecurity
  • modsecurity
NoNoOct 06, 2026
CVE-2026-104259NONEN/A
  • ModSecurity logoModSecurity
  • modsecurity
NoNoOct 06, 2026
CVE-2026-103932NONEN/A
  • ModSecurity logoModSecurity
  • modsecurity
NoNoOct 06, 2026
CVE-2026-73857NONEN/A
  • ModSecurity logoModSecurity
  • modsecurity
NoNoOct 02, 2026
CVE-2026-73856NONEN/A
  • ModSecurity logoModSecurity
  • modsecurity
NoNoOct 02, 2026

Free Vulnerability Assessment

Benchmark your Cloud Security Posture

Evaluate your cloud security practices across 9 security domains to benchmark your risk level and identify gaps in your defenses.

Request assessment

Get a personalized demo

Ready to see Wiz in action?

"Best User Experience I have ever seen, provides full visibility to cloud workloads."
David EstlickCISO
"Wiz provides a single pane of glass to see what is going on in our cloud environments."
Adam FletcherChief Security Officer
"We know that if Wiz identifies something as critical, it actually is."
Greg PoniatowskiHead of Threat and Vulnerability Management