CVE-2026-62314
Anubis: Policy bypass via client controlled X-Original-URI header
Anubis is a Web AI Firewall Utility that challenges users' connections in order to protect upstream resources from scraper bots. From 1.22.0 until 1.26.0-pre1, lib/policy/checker.go PathChecker.Check() trusted the client-controlled X-Original-URI header before matching r.URL.Path, allowing an HTTP client to match default data/common/keep-internet-working.yaml ALLOW rules such as ^/.well-known/.*$ and bypass the Anubis challenge. This issue is fixed in version 1.26.0-pre1.
Attack profile
How easy it is to exploit
- Attack vector
- Network
- Complexity
- Low
- Privileges needed
- None
- User interaction
- None
What an attacker can affect
- Confidentiality
- Low
- Integrity
- None
- Availability
- None
Exploit likelihood
What each source reports
CVE List Score used
5.8
Anubis: Policy bypass via client controlled X-Original-URI header
Anubis is a Web AI Firewall Utility that challenges users' connections in order to protect upstream resources from scraper bots. From 1.22.0 until 1.26.0-pre1, lib/policy/checker.go PathChecker.Check() trusted the client-controlled X-Original-URI header before matching r.URL.Path, allowing an HTTP client to match default data/common/keep-internet-working.yaml ALLOW rules such as ^/.well-known/.*$ and bypass the Anubis challenge. This issue is fixed in version 1.26.0-pre1.
- Record
CVE-2026-62314- CVSS 3.1
- 5.8 Medium
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:N/A:N - Weakness
- CWE-284
- Updated
- 2026-11-02
EUVDEUVD-2026-44819
5.8
Anubis is a Web AI Firewall Utility that challenges users' connections in order to protect upstream resources from scraper bots. From 1.22.0 until 1.26.0-pre1, lib/policy/checker.go PathChecker.Check() trusted the client-controlled X-Original-URI header before matching r.URL.Path, allowing an HTTP client to match default data/common/keep-internet-working.yaml ALLOW rules such as ^/.well-known/.*$ and bypass the Anubis challenge. This issue is fixed in version 1.26.0-pre1.
- Record
EUVD-2026-44819- CVSS 3.1
- 5.8 Medium
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:N/A:N - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-6wcg-mqvh-fcvg
5.8
Anubis: Policy bypass via client controlled X-Original-URI header
Any HTTP client can bypass Anubis bot protection on the default configuration by adding a single request header. No challenge needs to be solved. Affected versions: v1.22.0 through v1.25.0 (introduced in commit d1d631a, PR #1015)
The root cause is in lib/policy/checker.go, PathChecker.Check():
func (pc *PathChecker) Check(r *http.Request) (bool, error) {
originalUrl := r.Header.Get("X-Original-URI")
if originalUrl != "" {
if pc.regexp.MatchString(originalUrl) {
return true, nil
}
}
if pc.regexp.MatchString(r.URL.Path) {
return true, nil
}
return false, nil
}
The header value comes directly from the client request. The middleware chain never strips it. In reverse proxy mode an attacker fully controls it.
The default policy imports data/common/keep-internet-working.yaml, which contains path-only ALLOW rules with no other conditions:
- name: well-known
path_regex: ^/\.well-known/.*$
action: ALLOW
When X-Original-URI matches one of those regexes, the rule fires as ALLOW and the request is forwarded upstream without any challenge or JWT check.
Proof of concept
Normal request, gets challenged:
curl -s https://anubis.techaro.lol/ | grep -o "<title>.*</title>"
Bypass, gets upstream content:
curl -s -H "X-Original-URI: /.well-known/x" https://anubis.techaro.lol/ | grep -o "<title>.*</title>"
The first command returns the Anubis challenge page title. The second returns the real site title directly, with no cookie set and no challenge issued. Verified live against anubis.techaro.lol.
Suggested fix
The fix should probably be to strip the header from incoming client requests in the middleware chain before policy evaluation. In auth_request mode the header is set by the proxy after Anubis processes the middleware, so stripping it at ingress does not break that deployment mode.
- Record
GHSA-6wcg-mqvh-fcvg- CVSS 3.1
- 5.8 Medium
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:N/A:N - Weakness
- CWE-284
- Updated
- 2026-11-02
NVD
5.8
Anubis is a Web AI Firewall Utility that challenges users' connections in order to protect upstream resources from scraper bots. From 1.22.0 until 1.26.0-pre1, lib/policy/checker.go PathChecker.Check() trusted the client-controlled X-Original-URI header before matching r.URL.Path, allowing an HTTP client to match default data/common/keep-internet-working.yaml ALLOW rules such as ^/.well-known/.*$ and bypass the Anubis challenge. This issue is fixed in version 1.26.0-pre1.
- Record
CVE-2026-62314- CVSS 3.1
- 5.8 Medium
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:N/A:N - Weakness
- CWE-284
- Updated
- 2026-11-02
OSV
5.8
Anubis: Policy bypass via client controlled X-Original-URI header
Anubis is a Web AI Firewall Utility that challenges users' connections in order to protect upstream resources from scraper bots. From 1.22.0 until 1.26.0-pre1, lib/policy/checker.go PathChecker.Check() trusted the client-controlled X-Original-URI header before matching r.URL.Path, allowing an HTTP client to match default data/common/keep-internet-working.yaml ALLOW rules such as ^/.well-known/.*$ and bypass the Anubis challenge. This issue is fixed in version 1.26.0-pre1.
- Record
CVE-2026-62314- CVSS 3.1
- 5.8 Medium
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:N/A:N - Weakness
- CWE-284
- Updated
- 2026-11-02
OSVGHSA-6wcg-mqvh-fcvg
5.8
Anubis: Policy bypass via client controlled X-Original-URI header
Any HTTP client can bypass Anubis bot protection on the default configuration by adding a single request header. No challenge needs to be solved. Affected versions: v1.22.0 through v1.25.0 (introduced in commit d1d631a, PR #1015)
The root cause is in lib/policy/checker.go, PathChecker.Check():
func (pc *PathChecker) Check(r *http.Request) (bool, error) {
originalUrl := r.Header.Get("X-Original-URI")
if originalUrl != "" {
if pc.regexp.MatchString(originalUrl) {
return true, nil
}
}
if pc.regexp.MatchString(r.URL.Path) {
return true, nil
}
return false, nil
}
The header value comes directly from the client request. The middleware chain never strips it. In reverse proxy mode an attacker fully controls it.
The default policy imports data/common/keep-internet-working.yaml, which contains path-only ALLOW rules with no other conditions:
- name: well-known
path_regex: ^/\.well-known/.*$
action: ALLOW
When X-Original-URI matches one of those regexes, the rule fires as ALLOW and the request is forwarded upstream without any challenge or JWT check.
Proof of concept
Normal request, gets challenged:
curl -s https://anubis.techaro.lol/ | grep -o "<title>.*</title>"
Bypass, gets upstream content:
curl -s -H "X-Original-URI: /.well-known/x" https://anubis.techaro.lol/ | grep -o "<title>.*</title>"
The first command returns the Anubis challenge page title. The second returns the real site title directly, with no cookie set and no challenge issued. Verified live against anubis.techaro.lol.
Suggested fix
The fix should probably be to strip the header from incoming client requests in the middleware chain before policy evaluation. In auth_request mode the header is set by the proxy after Anubis processes the middleware, so stripping it at ingress does not break that deployment mode.
- Record
GHSA-6wcg-mqvh-fcvg- CVSS 3.1
- 5.8 Medium
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:N/A:N - Weakness
- CWE-284
- Updated
- 2026-11-02
OSVGO-2026-6639 No score
Anubis: Policy bypass via client controlled X-Original-URI header in github.com/TecharoHQ/anubis
Anubis: Policy bypass via client controlled X-Original-URI header in github.com/TecharoHQ/anubis
- Record
GO-2026-6639- Updated
- 2026-11-02
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
github.com/TecharoHQ/anubisGo |
1.22.0 up to 1.26.0 | 1.26.0 |
History
| Recorded | Changed | Sources |
|---|---|---|
| first indexed | CVE List, EUVD, GitHub Advisories, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2026-62314 is a medium vulnerability (CVSS 5.8) in Axiomthemes Anubis, published July 15, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.34%, the 27th percentile. Fixed in github.com/TecharoHQ/anubis 1.26.0.
References
github.com/TecharoHQ/anubis/security/advisories/GHSA-6wcg-mqvh-fcvg
github.com/TecharoHQ/anubis/pull/1630
github.com/TecharoHQ/anubis/commit/276b537776b281b1c4e01421435bc03ade3d8fc4
github.com/TecharoHQ/anubis/releases/tag/v1.26.0-pre1
nvd.nist.gov/vuln/detail/CVE-2026-62314
github.com/advisories/GHSA-6wcg-mqvh-fcvg
github.com/CVEProject/cvelistV5/tree/main/cves/2026/62xxx/CVE-2026-62314.json
github.com/TecharoHQ/anubis