GitHub Advisoryadvisory · Go

GHSA-3q34-rx83-r6mq Heimdall has an authorization bypass via path normalization mismatch

HIGH Published 2026-04-25 Modified 2026-05-12 Official page ↗
Aliases
CVE-2026-42274
Ecosystem
Go
Packages
github.com/dadrus/heimdall
Severity
High
CVSS vector
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:N/SC:H/SI:H/SA:N
Weaknesses
CWE-35, CWE-436
Reviewed
2026-04-25

Affected packages

• Go github.com/dadrus/heimdall: < 0.17.14 → fixed in 0.17.14

Description

Summary Heimdall performs rule matching on the raw (non-normalized) request path, while downstream components may normalize dot-segments according to RFC 3986, Section 6.2.2.3. This discrepancy can result in heimdall authorizing a request for one path (e.g., `/user/../admin`, or URL-encoded variants such as `/user/%2e%2e/admin` or `/user/%2e%2e%2fadmin`. The latter would require the `allow_encoded_slashes` option to be set to `on` or `no_decode`.) while the downstream ultimately processes a different, normalized path (`/admin`). Details This vulnerability can be exploited by an adversary if rule matching is performed using free (named or unnamed) wildcards without further constraints, as shown in the example snippets below. ```yaml id: rule-1 match: routes: • path: /user/ execute: # configured to require authentication and authorization # ... ``` ```yaml id: rule-2 match: routes: • path: /public/ execute: # configured to allow anonymous access # ... ``` If an adversary sends a request to `/public/../user/whatever`, rule-2 will be matched and executed. The downstream service may, however, normalize the request path and interpret it as `/user/whatever`. Impact Bypass of access control policies enforced by heimdall may lead to the following consequences: • Access to or modification of data that should be restricted • Invocation of functionality that is expected to require authentication or authorization • In certain configurations, escalation of privileges depending on the exposed functionality Workarounds • Normalize HTTP paths or reject HTTP paths containing relative path expressions in the layers in front of Heimdall - this is good practice anyway. Some proxies do that by default, such as Traefik; others, such as Envoy, require additional configuration (for Envoy see `normalize_path`). • Include the ID of the rule expected to be executed in the JWT issued by heimdall and check that value in the consuming project's service.

Related

Alias · CVE (1)

  • CVE-2026-42274 Heimdall is a cloud native Identity Aware Proxy and Access Control Decision service. vulnerability

Weakness · CWE (2)

  • CWE-35 Path Traversal: '.../...//' weakness
  • CWE-436 Interpretation Conflict weakness

References