Skip to content
OpenAdvisories

Weakness (CWE)

CWE-647: Use of Non-Canonical URL Paths for Authorization Decisions

Variant Incomplete

The product defines policy namespaces and makes authorization decisions based on the assumption that a URL is canonical.

More detail

If an application defines policy namespaces and makes authorization decisions based on the URL, but it does not require or convert to a canonical URL before making the authorization decision, then it opens the application to attack. For example, if the application only wants to allow access to http://www.example.com/mypage, then the attacker might be able to bypass this restriction using equivalent URLs such as:

- http://WWW.EXAMPLE.COM/mypage

- http://www.example.com/%6Dypage (alternate encoding)

- http://192.168.1.1/mypage (IP address)

- http://www.example.com/mypage/ (trailing /)

- http://www.example.com:80/mypage

How to prevent it (1 mitigation)
  1. Architecture and Design

    Make access control policy based on path information in canonical form, with all alternate encodings rejected (which can be accomplished by a default deny rule). Consider very restrictive regular expressions to validate that the path is in the expected form. Reject all alternate path encodings that are not in the expected canonical form.

Source: MITRE CWE-647

8 results · Clear filters · Feed

  • Medium 6.3

    Apache APISIX: Servlet-style normalization creates a route/upstream authorization mismatch

    Use of Non-Canonical URL paths for authorization decisions vulnerability in Apache APISIX. In some configurations where a permissive route overlaps a protected one, a crafted encoded path can reach an upstream endpoint that the matched route's policies were n…

  • Medium 5.3

    Envoy: Path normalization does not handle dot and dotdot segments with parameters

    Envoy is an open source edge and service proxy designed for cloud-native applications. Prior to 1.36.10, 1.37.6, 1.38.4, and 1.39.1, Envoy's URL normalization does not recognize dot and dotdot path segments when they carry semicolon parameters. A request such…

  • Medium 4.2

    L7 intention authorization bypass via custom public listener

    Consul Community Edition and Consul Enterprise 1.20.1 through 2.0.2 are vulnerable to an L7 intention authorization bypass when a service proxy is configured with a custom public listener. An authenticated mesh workload may reach HTTP paths that are blocked b…

  • Medium 6.5

    Kite Kubernetes proxy path traversal allows authenticated users to bypass RBAC and read cluster-wide resources

    ## Summary Kite versions 0.6.9 through 0.14.0 authorize Kubernetes proxy requests against the pod or service identified by the original route parameters. Encoded path traversal segments can cause the upstream URL to resolve to a different Kubernetes API endpo…

  • Medium 5.3

    Eclipse Jetty: Path parameter traversal

    In Eclipse Jetty, an HTTP URI of this form: /public;/../admin/secret.txt results in an unresolved path of: /public/../admin/secret.txt instead of the expected: /admin/secret.txt Jetty itself is not affected, as it will not serve the secret.txt file because it…

  • Medium 6.7

    Aap-gateway: improper path validation in gateway allows credential exfiltration

    A flaw was found in the Red Hat Ansible Automation Platform Gateway route creation component. This vulnerability allows credential theft via the creation of misleading routes using a double-slash (//) prefix in the gateway_path. A malicious or socially engine…

  • Medium 6.5

    Astro has an Authentication Bypass via Double URL Encoding, a bypass for CVE-2025-64765

    Astro is a web framework. Versions 5.15.7 and below have a double URL encoding bypass which allows any unauthenticated attacker to bypass path-based authentication checks in Astro middleware, granting unauthorized access to protected routes. While the origina…

  • Medium 4.0

    Browser Use allows bypassing `allowed_domains` by putting a decoy domain in http auth username portion of a URL

    In browser-use (aka Browser Use) before 0.1.45, URL parsing of allowed_domains is mishandled because userinfo can be placed in the authority component.