Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessReach Coraza-protected upload endpoint
-
DeliverySend ~7MB multipart body with ~65,000 tiny file parts
-
ExploitPer-part temp descriptors deferred open until request returns
-
ExecutionFile-descriptor table exhausted (EMFILE), os.CreateTemp fails
-
ImpactLegitimate uploads blocked and process cannot open sockets
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A06:2025 - Insecure Design
ASVS 5.0
V2 - Validation and Business Logic Resource consumption limits
MITRE ATT&CK
1 technique across 1 tactic: Impact The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires that the target application run a vulnerable Coraza version (3.0.0 through 3.7.x) with multipart request-body inspection active (the default path for multipart/form-data bodies) and with filesystem-backed temporary storage available for part data (os.CreateTemp in a storage path). The default 128MB body-size limit caps bytes but not part count, so a ~6.8MB body of ~65,000 minimal ~104-byte file parts suffices to reach the Linux default hard limit of 65536 descriptors. No authentication is required (PR:N) and no user interaction (UI:N). Limiting factors: the leak is transient - descriptors free when the request returns, so sustained denial needs repeated/concurrent flooding; the triggering threshold depends on the process's configured fd ulimit; and only deployments that actually inspect multipart bodies and have filesystem access are affected. Fixed versions (3.8.0+) are not exploitable. |
| Impact | Signals are mostly consistent and point to a moderate, non-emergency availability issue. The input CVSS of 5.3 (AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L) correctly reflects a network-reachable, low-complexity, unauthenticated bug with no confidentiality or integrity impact. KEV status is NOT present (no confirmed active exploitation) and no EPSS or SSVC decision data was supplied, so probabilistic and decision-framework inputs are simply missing rather than conflicting. A working proof-of-concept IS present inside the GHSA advisory (a Go test that measures open file descriptors), so publicly available exploit code exists, but POC availability must not be conflated with in-the-wild use. The main point of divergence is impact magnitude: the description states the condition causes 'process-wide inability to open files or sockets' and blocks all legitimate uploads, which is arguably a total (A:H) availability loss during a sustained flood rather than the partial A:L chosen by the input - this is noted but not asserted as fact. Mitigating the urgency, the leaked descriptors are released when ProcessRequest() returns, so a single request is self-healing and denial requires continuous flooding. Net: a real priority for internet-facing WAF deployments because a web application firewall failing is the failure of a security control, but not a drop-everything emergency given DoS-only impact and no evidence of exploitation. |
| Exploit ScenarioDerived | An internet-facing service that embeds Coraza (for example behind a Go reverse proxy inspecting multipart/form-data) accepts file uploads. An unauthenticated attacker sends a single ~7MB multipart body containing roughly 65,000 minimal file parts; Coraza opens a temporary file per part and defers closing each descriptor until the whole request returns, exhausting the process file-descriptor table (EMFILE) and blocking the server from opening further files or sockets. A functional PoC test is published in the GHSA advisory. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 09, 2026
Resource exhaustion in OWASP Coraza WAF 3.0.0 through 3.7.x lets an unauthenticated remote attacker (CVSS vector PR:N/UI:N) drain the host process's file-descriptor table by submitting a multipart/form-data body built from tens of thousands of minimal file parts, each of which holds an open temporary-file descriptor until the entire request returns. Because the default 128MB body limit caps bytes rather than part count, roughly 6.8MB of ~104-byte parts is enough to reach the Linux default 65536-descriptor ceiling, after which os.CreateTemp calls fail, the MULTIPART_STRICT_ERROR flag is set (causing CRS rule 200001 to return 400s, including for legitimate traffic), and the process can no longer open files or sockets - a process-wide availability impact that our assessment rates High, in contrast to the vendor-issued 5.3 score that rates availability only Low. The leak is transient (descriptors are released when the request ends), so sustained denial requires repeated or concurrent flooding, and it only affects deployments that actually inspect multipart bodies with filesystem-backed temp storage. No entry appears in CISA KEV and no confirmed active exploitation has been observed, but the vendor advisory ships a public proof-of-concept reproducer; the flaw is fixed in 3.8.0.
RemediationAI
Upgrade the corazawaf/coraza Go module to 3.8.0 or later (Vendor-released patch: 3.8.0), which closes each part's temp file immediately after io.Copy instead of deferring it to ProcessRequest return; the equivalent upstream change is commit 1bc39036e99c88e7de60cf8e6bb55ee4c311223c, and the advisory at https://github.com/corazawaf/coraza/security/advisories/GHSA-rp9v-7xv3-r6g3 should be used to confirm scope. If immediate upgrade is not possible, the most effective compensating control is to lower SecRequestBodyLimit well below the default 128MB so that the byte-bounded body cannot contain enough ~104-byte parts to reach the descriptor ceiling - but this trades away support for legitimately large multipart uploads and must be tuned against the process's RLIMIT_NOFILE. Raising RLIMIT_NOFILE (ulimit -n) buys headroom by moving the exhaustion threshold upward, though it only raises the bar and increases memory/disk pressure rather than removing the leak. Disabling multipart body inspection (or excluding multipart/form-data from the inspected content types) eliminates the vulnerable code path entirely, at the cost of losing file-upload content inspection and CRS multipart rules such as 200001. Finally, because leaked descriptors are released when the request returns, front-end concurrency limiting, per-connection upload-size caps, and rate limiting on multipart endpoints reduce the ability to sustain the flood and flush descriptors - these are mitigating, not fixing, measures. No vendor-released patch exists for 3.7.x and earlier lines other than by moving to 3.8.0.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 2 packages in go, euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
Coraza is a Go implementation of a ModSecurity-compatible WAF, consumed both as a library and embedded in proxies/gateways. The defect lives in internal/bodyprocessors/multipart.go, in the multipart/form-data body processor that Coraza uses to parse file uploads and expose them to rule evaluation (FILES_TMPNAMES, CRS multipart rules). The code opened a temporary file per file part with os.CreateTemp and then placed defer temp.Close() inside the for loop that iterates parts via mr.NextPart(). Go's defer semantics execute at function return, not at loop-iteration end, so every part's descriptor accumulates until ProcessRequest() exits - the root cause class is CWE-400 (Uncontrolled Resource Consumption), specifically an unclosed-resource/descriptor-lifetime bug rather than a parsing or memory-safety flaw. A minimal valid file part (boundary line, Content-Disposition with filename=, one byte of content) is about 104 bytes, and since SecRequestBodyLimit (default 128MB) constrains total bytes and not part count, an attacker can pack roughly 65,000 parts into ~6.8MB, matching the Linux default hard RLIMIT_NOFILE of 65536. Downstream symptoms cascade: os.CreateTemp failures, MULTIPART_STRICT_ERROR=1 with CRS rule 200001 rejecting requests (including legitimate ones), and process-wide inability to open files or sockets. The upstream fix (commit 1bc39036e99c88e7de60cf8e6bb55ee4c311223c, released in 3.8.0) replaces the deferred close with an explicit temp.Close() immediately after io.Copy and records the temp file name in FILES_TMPNAMES before error handling so the file is still cleaned at transaction close; regression tests assert no fd accumulation and correct cleanup on copy errors. Affected code is version-range 3.0.0 through 3.7.x (fixed 3.8.0).
Know when Coraza gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L
Single unauthenticated low-complexity HTTP request (AV:N/PR:N/UI:N/AC:L); fd exhaustion denies all file and socket operations process-wide during a sustained flood, so A:H with no C/I impact.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
1DescriptionCVE.org
OWASP Coraza WAF is a golang modsecurity compatible web application firewall library. From 3.0.0 until 3.8.0, the multipart loop in internal/bodyprocessors/multipart.go executes defer temp.Close() for every uploaded file part, so each temporary-file descriptor remains open until the complete request returns. An unauthenticated attacker can submit a multipart body containing many minimal file parts and exhaust the process file-descriptor table within the request-body size limit, causing os.CreateTemp failures, MULTIPART_STRICT_ERROR responses, blocked legitimate uploads, and process-wide inability to open files or sockets. This issue is fixed in version 3.8.0.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.
Unauthenticated remote denial of service in the OWASP Coraza WAF Go library (versions 3.0.0 through 3.8.0) allows any cl
OWASP Coraza WAF is a golang modsecurity compatible web application firewall library. Rated high severity (CVSS 7.5), th
CPU exhaustion in OWASP Coraza WAF versions 3.0.0 through 3.7.x allows a remote, unauthenticated network attacker to pin
Cookie-parser confusion in OWASP Coraza WAF prior to 3.8.1 allows unauthenticated remote attackers to hide cookie-carrie
GET-side WAF rule bypass in OWASP Coraza WAF 3.0.0 through 3.7.x lets unauthenticated attackers evade signature matching
EUVD-2026-95927
GHSA-rp9v-7xv3-r6g3
NVD
CVE.org
EPSS
Exploit-DB