Every CVE Search/ Get API key

CVE-2025-29914

OWASP Coraza WAF has parser confusion which leads to wrong URI in `REQUEST_FILENAME`

5.4 MediumFix available

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

0.32%Up 0.3 points since Mar 21, 2025
90%50%10%1%

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 MediumCVSS: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 MediumCVSS: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 MediumCVSS: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 MediumCVSS: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 MediumCVSS: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 MediumCVSS: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

Affected packages
PackageAffectedFixed
github.com/jptosso/coraza-waf
Go
before 3.3.3
3.3.3
github.com/corazawaf/coraza/v3
Go
before 3.3.3
3.3.3
github.com/corazawaf/coraza
Go
All versions None known
github.com/corazawaf/coraza/v2
Go
All versions None known
github.com/jptosso/coraza-waf
Go
All versions None known
govulncheck-vulndb
openSUSE:Tumbleweed
From an advisory covering 30 CVEs
before 0.0.20250327T184518-1.1
0.0.20250327T184518-1.1

History

History
RecordedChangedSources
affected, facts
first indexedCVE 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

Show 31 moreShow less
MoveEnter Open