Skip to main content

OWASP Coraza WAF CVE-2026-107834

| EUVDEUVD-2026-95927 MEDIUM
Uncontrolled Resource Consumption (CWE-400)
2026-10-09 GitHub_M GHSA-rp9v-7xv3-r6g3
5.3
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Reach Coraza-protected upload endpoint
  2. Delivery
    Send ~7MB multipart body with ~65,000 tiny file parts
  3. Exploit
    Per-part temp descriptors deferred open until request returns
  4. Execution
    File-descriptor table exhausted (EMFILE), os.CreateTemp fails
  5. Impact
    Legitimate 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.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.3% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – 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

coraza 3.0.0, < 3.8.0

Affected Packages

go github.com/corazawaf/coraza/v3 fix: 3.8.0
euvd coraza_3_0_0 fix: 3.8.0

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

Vendor (GitHub_M) PRIMARY 5.3 MEDIUM
AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L
vuln.today AI 7.5 HIGH

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.

3.1 AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
4.0 AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
Unchanged
Confidentiality
None
Integrity
None
Availability
Low

Lifecycle Timeline

1
Patch available
Oct 09, 2026 - 19:02 EUVD

DescriptionCVE.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

EPSS Score
0.3%
Top 77% exploitable
Prevalence
Medium
embeddable Go WAF library, moderate adoption via proxy/gateway integrations
Threat Intel
1
1 source
Social Media
2
Sightings
Data Quality
5 sources
Confidence: Medium

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.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC No
EPSS 0.3%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
Yes
Human Impact· derived
Medium

Priority Score

26
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +26
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy