Cloudanix VulnDB

CVE-2024-6763

Low · 3.7

Eclipse Jetty URI parsing of invalid authority

CVSS

3.7

EPSS

1.0%

Published

Oct 14, 2024

CISA due date

—

Cloudanix analysis

Next patch cycle SSVC: Track

A website using affected Jetty URL handling may be tricked into trusting one destination while actually sending users or server requests somewhere else.

Chainable
Exploitation
Remote Unauthenticated
Attacker needs
None
Complexity
Moderate
Impact
Data Exposure
Component
Library
Class
SSRF
Remediation
Upgrade
Effort
Medium
Patch risk
Low

What it actually does

Eclipse Jetty's HttpURI parser does not fully validate the authority portion of a URI before extracting components such as scheme, userinfo, host, and port. For malformed or non-RFC-compliant URIs, Jetty may determine a different host than a common browser or another downstream HTTP client would use. Applications that rely on Jetty's parsed host value for allowlist, same-origin, redirect, proxy, callback, or fetch validation can therefore make an incorrect trust decision. Depending on how the application uses the URI after validation, this can result in open redirect, server-side request forgery, or policy bypass. The vulnerability is application-dependent: Jetty parsing alone is not enough; exploitable impact requires application logic that validates a URI with HttpURI and then redirects, fetches, proxies, or otherwise acts on the original or differently interpreted URI.

Why it matters to the business

The primary business risk is that web applications using affected Jetty URI parsing may be tricked into sending users or server-side requests to destinations that were intended to be blocked. In user-facing flows this can enable phishing or token theft through trusted-domain redirects; in server-side flows it can allow access attempts to internal services, metadata endpoints, or restricted administrative interfaces. The CVSS score is low and EPSS is currently low, with no CISA KEV listing and no reported exploit maturity in the provided data, so this is not typically an emergency mass-exploitation issue; however, the issue has been public for a long period and should be corrected during normal dependency remediation, especially in applications that implement URL allowlists, webhook fetchers, reverse proxies, redirect handlers, OAuth/SAML return URLs, or URL-preview functionality.

How an attack unfolds

An attacker first identifies an application endpoint that accepts a URL or URI from the user, such as a redirect target, callback URL, image fetcher, webhook destination, proxy URL, or import URL. The attacker then crafts a malformed URI whose authority segment is interpreted one way by Jetty's HttpURI validation code and another way by the browser or the HTTP client that ultimately follows or uses the URI. If the application checks the host extracted by Jetty and decides it is allowed, but later redirects the browser or initiates a server-side connection using a different interpretation of the same string, the request can be sent to an attacker-controlled or otherwise restricted host. In an open redirect scenario, the attacker sends a victim a trusted application URL that appears to pass validation but ultimately navigates the victim to an attacker-controlled site. In an SSRF scenario, the attacker submits a crafted URL that passes host allowlist checks but causes the server to connect to an internal or unintended destination. Successful exploitation depends heavily on application behavior and the URI sink, not merely on the presence of Jetty.

How to fix it

Upgrade affected Jetty-derived or downstream dependencies to fixed versions. For the provided affected package data, update io.jenkins.plugin-management:plugin-management-parent-pom to version 2.2.0 or later, and update eclipse/jetty.project to a version containing commit df524e6b29271c2e09ba9aea83c18dc9db464a31 or a later official release that includes the fix. Because the exploitability depends on application URI handling, also review application code that validates user-supplied URLs before redirecting, proxying, fetching, or storing them. Normalize and validate URIs using a single strict parser, reject invalid RFC-compliant URI forms rather than attempting to repair them, and compare the exact normalized destination that will be used by the eventual browser or HTTP client. Prefer allowlists based on canonical hostnames and resolved IP ranges, block private/link-local/loopback ranges for server-side fetches unless explicitly required, disallow embedded credentials in URLs, reject ambiguous authority syntax, and avoid using user-controlled absolute URLs for redirects when relative paths or server-generated callback identifiers can be used instead.

How to confirm the fix worked

Confirm dependency remediation with software composition analysis, Maven dependency trees, build manifests, container image SBOMs, and runtime classpath inspection to ensure affected Jetty artifacts or downstream components have been upgraded. For Maven-based builds, verify that io.jenkins.plugin-management:plugin-management-parent-pom resolves to 2.2.0 or later where applicable. For Jetty source or vendored builds, verify the fixed Jetty commit or a release containing it is present. Functionally test any URL-validation endpoints by submitting malformed authority values and confirming they are rejected before redirecting or fetching. Validation should compare the host accepted by application validation with the host actually reached by the browser or backend HTTP client. For SSRF-sensitive features, run controlled tests against blocked destinations such as localhost, RFC1918 ranges, and cloud metadata addresses and confirm they are denied even when obfuscated with encoded or malformed authority syntax.

Typical attack path

  1. Find an application endpoint that accepts a user-controlled URI or URL.
  2. Determine whether the application uses Jetty HttpURI or Jetty-based request/URI parsing to validate the supplied destination.
  3. Submit malformed authority values that contain ambiguous host delimiters, encoded separators, userinfo-like segments, backslashes, extra at-signs, or unusual port/host syntax.
  4. Observe whether validation accepts the URI as belonging to an allowed host while the browser or backend HTTP client resolves a different destination.
  5. Use the accepted malformed URI in a phishing redirect, OAuth/login flow abuse, webhook/proxy fetch, URL preview, or server-side request workflow.
  6. For SSRF, attempt to reach internal IP ranges, localhost-only services, cloud metadata endpoints, or otherwise blocked hosts through the parser discrepancy.
  7. For open redirect, deliver the crafted trusted-domain URL to users to increase credibility of phishing or credential-capture activity.

How to detect it

To determine whether this issue was already exploited, review application access logs, reverse proxy logs, WAF logs, and application-specific audit logs for endpoints that accept URL-like parameters such as url, uri, redirect, redirect_uri, return, returnUrl, next, target, callback, webhook, image, fetch, proxy, and import. Look for malformed authority syntax, including backslashes in URLs, encoded slashes or backslashes near the hostname, multiple at-signs, embedded credentials, unusual port notation, localhost/private IP targets, and cloud metadata addresses. For open redirect investigation, correlate suspicious requests with 3xx responses and Location headers that point to unexpected external domains. For SSRF investigation, correlate inbound requests containing suspicious URL parameters with outbound connections from the application server to internal IP ranges, loopback addresses, link-local addresses, metadata endpoints, or attacker-controlled infrastructure. Useful log sources include web server access logs, Jetty request logs, application logs that record validation failures or outbound fetch destinations, reverse proxy logs, WAF events, DNS resolver logs, egress firewall/proxy logs, cloud VPC flow logs, and EDR telemetry for server-side HTTP client processes. There are no universal file-system or process artifacts for this vulnerability; indicators are primarily malformed request strings and unexpected outbound network activity.

  • \\@
  • %5c@
  • %5C@
  • %2f%2f
  • %2F%2F
  • @.*@
  • http://127.0.0.1
  • https://127.0.0.1
  • http://localhost
  • https://localhost
  • http://0.0.0.0
  • http://[::1]
  • http://169.254.169.254
  • http://metadata.google.internal
  • http://169.254.170.2
  • redirect_uri=
  • returnUrl=
  • return_url=
  • callback=
  • webhook=
  • target=
  • url=
  • uri=
  • Location: http://
  • Location: https://

What your security team should do

  • Inventory applications and services that embed Jetty or Jetty-derived URI parsing, including transitive dependencies and vendored copies.
  • Prioritize remediation for internet-facing applications that accept user-supplied URLs and perform redirects, callbacks, webhooks, URL previews, imports, reverse proxying, or server-side fetching.
  • Upgrade affected dependencies to fixed versions, including io.jenkins.plugin-management:plugin-management-parent-pom 2.2.0 or later where present, and Jetty versions containing the fixed upstream commit.
  • Ask engineering teams to review URL validation code for parser mismatch risks, especially where one parser is used for validation and a different client or browser later consumes the original URL.
  • Add negative tests for malformed URI authority handling to application security test suites.
  • For SSRF-relevant functionality, enforce outbound egress controls at the network layer in addition to application-level URL validation.
  • Monitor access logs and application logs for rejected or unusual URL parameters containing encoded delimiters, backslashes, multiple at-signs, embedded credentials, localhost, private IP ranges, or cloud metadata addresses.
  • Treat exploitation evidence as application-specific; investigate suspicious redirect spikes, unusual outbound HTTP requests, and user reports of trusted links leading to unexpected domains.

The record

Eclipse Jetty is a lightweight, highly scalable, Java-based web server and Servlet engine . It includes a utility class, `HttpURI`, for URI/URL parsing. The `HttpURI` class does insufficient validation on the authority segment of a URI. However the behaviour of `HttpURI` differs from the common browsers in how it handles a URI that would be considered invalid if fully validated against the RRC. Specifically `HttpURI` and the browser may differ on the value of the host extracted from an invalid URI and thus a combination of Jetty and a vulnerable browser may be vulnerable to a open redirect attack or to a SSRF attack if the URI is used after passing validation checks.

Affected packages

Ecosystem Package Introduced Fixed
Maven org.eclipse.jetty:jetty-http 7.0.0 12.0.12
Chainguard akhq 0 0.25.1-r3
Chainguard apache-hop 0 2.16.0-r0
Chainguard apache-hop-fips 0 2.16.0-r0
Chainguard apache-nifi 0 2.0.0-r0
Chainguard apache-nifi-compat 0 2.0.0-r0
Chainguard apache-nifi-toolkit 0 2.0.0-r0
Chainguard apache-pulsar-compat 0 4.1.1-r2
Chainguard apache-tika-2.9-compat 0 2.9.4-r5
Chainguard apache-tika-3.0-compat 0 3.0.0-r18
Chainguard apache-tika-3.1-compat 0 3.1.0-r9
Chainguard apache-tika-3.2-compat 0 3.2.3-r1
Chainguard apache-tika-fips-2.9-compat 0 2.9.4-r1
Chainguard apache-tika-fips-3.0-compat 0 3.0.0-r0
Chainguard apache-tika-fips-3.1 0 3.1.0-r4
Chainguard apache-tika-fips-3.1-compat 0 3.1.0-r1
Chainguard apache-tika-fips-3.2-compat 0 3.2.3-r0
Chainguard celeborn-0.5-compat 0 0.5.4-r9
Chainguard celeborn-0.6-compat 0 0.6.1-r0
Chainguard clojure 0 1.12.4-r0
Chainguard confluent-kafka 0 8.0.0.259-r0
Chainguard confluent-kafka-jre-bcfips 0 8.0.0.259-r0
Chainguard druid 0 35.0.0-r0
Chainguard druid-compat 0 0
Chainguard hadoop-client-modules 0 3.3.6-r8
Chainguard kafka-jre-bcfips 0 4.0.0-r0
Chainguard kafka-strimzi-compat 0 0.48.0-r1
Chainguard kafka_exporter-strimzi-compat 0 0.48.0-r1
Chainguard neo4j-4.4-docker-publish 0 4.4.46-r0
Chainguard neo4j-5.26 0 5.26.2-r0
Chainguard neo4j-5.26-docker-publish 0 5.26.2-r0
Chainguard neo4j-5.26-oci-entrypoint 0 5.26.2-r0
Chainguard prometheus-jmx-exporter-strimzi-compat 0 0.48.0-r1
Chainguard reposilite 0 3.5.26-r1
Chainguard reposilite-compat 0 3.5.26-r0
Chainguard solr 0 10.0.0-r0
Chainguard solr-oci-compat 0 9.9.0-r3
Chainguard spark-3.5 0 3.5.7-r2
Chainguard spark-3.5-scala-2.12-compat 0 3.5.7-r2
Chainguard spark-3.5-scala-2.12-iamguarded-compat 0 3.5.7-r2
Chainguard spark-3.5-scala-2.13-compat 0 3.5.7-r2
Chainguard spark-4.0 0 4.0.1-r1
Chainguard spark-4.0-scala-2.13-compat 0 4.0.1-r1
Chainguard spark-4.1 0 4.1.0-r1
Chainguard spark-4.1-scala-2.13-compat 0 4.1.0-r1
Chainguard spark-fips-3.5 0 3.5.4-r17
Chainguard spark-fips-3.5-scala-2.12-compat 0 3.5.4-r17
Chainguard spark-fips-3.5-scala-2.13-compat 0 3.5.4-r17
Chainguard strimzi-kafka-operator 0 0.48.0-r1
Chainguard strimzi-kafka-operator-cluster-operator 0 0.48.0-r1
Chainguard strimzi-kafka-operator-kafka-agent 0 0.48.0-r1
Chainguard strimzi-kafka-operator-kafka-base 0 0.48.0-r1
Chainguard strimzi-kafka-operator-kafka-init 0 0.48.0-r1
Chainguard strimzi-kafka-operator-kafka-thirdparty-libs 0 0.48.0-r1
Chainguard strimzi-kafka-operator-topic-operator 0 0.48.0-r1
Chainguard strimzi-kafka-operator-tracing-agent 0 0.48.0-r1
Chainguard strimzi-kafka-operator-user-operator 0 0.48.0-r1
Chainguard trino 0 472-r0
Chainguard trino 0 479-r0
Chainguard trino-config 0 472-r0
Chainguard trino-config 0 479-r0
Chainguard trino-oci-entrypoint 0 472-r0
Chainguard trino-oci-entrypoint 0 479-r0
Chainguard trino-plugin-ai-functions 0 479-r0
Chainguard trino-plugin-bigquery 0 472-r0
Chainguard trino-plugin-bigquery 0 479-r0
Chainguard trino-plugin-blackhole 0 472-r0
Chainguard trino-plugin-blackhole 0 479-r0
Chainguard trino-plugin-cassandra 0 472-r0
Chainguard trino-plugin-cassandra 0 479-r0
Chainguard trino-plugin-clickhouse 0 472-r0
Chainguard trino-plugin-clickhouse 0 479-r0
Chainguard trino-plugin-delta-lake 0 472-r0
Chainguard trino-plugin-delta-lake 0 479-r0
Chainguard trino-plugin-druid 0 472-r0
Chainguard trino-plugin-druid 0 479-r0
Chainguard trino-plugin-duckdb 0 479-r0
Chainguard trino-plugin-elasticsearch 0 472-r0
Chainguard trino-plugin-elasticsearch 0 479-r0
Chainguard trino-plugin-example-http 0 472-r0
Chainguard trino-plugin-exasol 0 472-r0
Chainguard trino-plugin-exasol 0 479-r0
Chainguard trino-plugin-exchange-filesystem 0 472-r0
Chainguard trino-plugin-exchange-filesystem 0 479-r0
Chainguard trino-plugin-exchange-hdfs 0 472-r0
Chainguard trino-plugin-exchange-hdfs 0 479-r0
Chainguard trino-plugin-faker 0 472-r0
Chainguard trino-plugin-faker 0 479-r0
Chainguard trino-plugin-functions-python 0 479-r0
Chainguard trino-plugin-geospatial 0 472-r0
Chainguard trino-plugin-geospatial 0 479-r0
Chainguard trino-plugin-google-sheets 0 472-r0
Chainguard trino-plugin-google-sheets 0 479-r0
Chainguard trino-plugin-hive 0 472-r0
Chainguard trino-plugin-hive 0 479-r0
Chainguard trino-plugin-http-event-listener 0 472-r0
Chainguard trino-plugin-http-event-listener 0 479-r0
Chainguard trino-plugin-http-server-event-listener 0 472-r0
Chainguard trino-plugin-hudi 0 472-r0
Chainguard trino-plugin-hudi 0 479-r0
Chainguard trino-plugin-iceberg 0 472-r0
Chainguard trino-plugin-iceberg 0 479-r0
Chainguard trino-plugin-ignite 0 472-r0
Chainguard trino-plugin-ignite 0 479-r0
Chainguard trino-plugin-jmx 0 472-r0
Chainguard trino-plugin-jmx 0 479-r0
Chainguard trino-plugin-kafka 0 472-r0
Chainguard trino-plugin-kafka 0 479-r0
Chainguard trino-plugin-kafka-event-listener 0 472-r0
Chainguard trino-plugin-kafka-event-listener 0 479-r0
Chainguard trino-plugin-lakehouse 0 479-r0
Chainguard trino-plugin-ldap-group-provider 0 479-r0
Chainguard trino-plugin-loki 0 479-r0
Chainguard trino-plugin-mariadb 0 472-r0
Chainguard trino-plugin-mariadb 0 479-r0
Chainguard trino-plugin-memory 0 472-r0
Chainguard trino-plugin-memory 0 479-r0
Chainguard trino-plugin-ml 0 472-r0
Chainguard trino-plugin-ml 0 479-r0
Chainguard trino-plugin-mongodb 0 472-r0
Chainguard trino-plugin-mongodb 0 479-r0
Chainguard trino-plugin-mysql 0 472-r0
Chainguard trino-plugin-mysql 0 479-r0
Chainguard trino-plugin-mysql-event-listener 0 472-r0
Chainguard trino-plugin-mysql-event-listener 0 479-r0
Chainguard trino-plugin-opa 0 472-r0
Chainguard trino-plugin-opa 0 479-r0
Chainguard trino-plugin-openlineage 0 472-r0
Chainguard trino-plugin-openlineage 0 479-r0
Chainguard trino-plugin-opensearch 0 472-r0
Chainguard trino-plugin-opensearch 0 479-r0
Chainguard trino-plugin-oracle 0 472-r0
Chainguard trino-plugin-oracle 0 479-r0
Chainguard trino-plugin-password-authenticators 0 472-r0
Chainguard trino-plugin-password-authenticators 0 479-r0
Chainguard trino-plugin-pinot 0 472-r0
Chainguard trino-plugin-pinot 0 479-r0
Chainguard trino-plugin-postgresql 0 472-r0
Chainguard trino-plugin-postgresql 0 479-r0
Chainguard trino-plugin-prometheus 0 472-r0
Chainguard trino-plugin-prometheus 0 479-r0
Chainguard trino-plugin-redis 0 472-r0
Chainguard trino-plugin-redis 0 479-r0
Chainguard trino-plugin-redshift 0 472-r0
Chainguard trino-plugin-redshift 0 479-r0
Chainguard trino-plugin-resource-group-managers 0 472-r0
Chainguard trino-plugin-resource-group-managers 0 479-r0
Chainguard trino-plugin-session-property-managers 0 472-r0
Chainguard trino-plugin-session-property-managers 0 479-r0
Chainguard trino-plugin-singlestore 0 472-r0
Chainguard trino-plugin-singlestore 0 479-r0
Chainguard trino-plugin-snowflake 0 472-r0
Chainguard trino-plugin-snowflake 0 479-r0
Chainguard trino-plugin-spooling-filesystem 0 479-r0
Chainguard trino-plugin-sqlserver 0 472-r0
Chainguard trino-plugin-sqlserver 0 479-r0
Chainguard trino-plugin-teradata-functions 0 472-r0
Chainguard trino-plugin-teradata-functions 0 479-r0
Chainguard trino-plugin-thrift 0 472-r0
Chainguard trino-plugin-thrift 0 479-r0
Chainguard trino-plugin-tpcds 0 472-r0
Chainguard trino-plugin-tpcds 0 479-r0
Chainguard trino-plugin-tpch 0 472-r0
Chainguard trino-plugin-tpch 0 479-r0
Chainguard trino-plugin-vertica 0 472-r0
Chainguard trino-plugin-vertica 0 479-r0
Chainguard wso2is-compat 0 7.2.0-r0
Chainguard wso2is-doc 0 7.2.0-r0
Chainguard zookeeper-3.8-iamguarded-compat 0 3.8.5.0-r2
Chainguard zookeeper-3.9-iamguarded-compat 0 3.9.4.2-r4
Chainguard zookeeper-custom-oci-entrypoint 0 3.9.4-r2
Debian:11 jetty9 0 No fix
Debian:12 jetty9 0 No fix
Debian:13 jetty9 0 No fix
SUSE:Enterprise Storage 7.1 jetty-minimal 0 9.4.57-150200.3.31.1
SUSE:Linux Enterprise High Performance Computing 15 SP3-LTSS jetty-minimal 0 9.4.57-150200.3.31.1
SUSE:Linux Enterprise High Performance Computing 15 SP4-ESPOS jetty-minimal 0 9.4.57-150200.3.31.1
SUSE:Linux Enterprise High Performance Computing 15 SP4-LTSS jetty-minimal 0 9.4.57-150200.3.31.1
SUSE:Linux Enterprise High Performance Computing 15 SP5-ESPOS jetty-minimal 0 9.4.57-150200.3.31.1
SUSE:Linux Enterprise High Performance Computing 15 SP5-LTSS jetty-minimal 0 9.4.57-150200.3.31.1
SUSE:Linux Enterprise Module for Development Tools 15 SP6 jetty-minimal 0 9.4.57-150200.3.31.1
SUSE:Linux Enterprise Module for Development Tools 15 SP7 jetty-minimal 0 9.4.57-150200.3.31.1
SUSE:Linux Enterprise Module for Package Hub 15 SP6 jetty-minimal 0 9.4.57-150200.3.31.1
SUSE:Linux Enterprise Module for Package Hub 15 SP7 jetty-minimal 0 9.4.57-150200.3.31.1
SUSE:Linux Enterprise Server 15 SP3-LTSS jetty-minimal 0 9.4.57-150200.3.31.1
SUSE:Linux Enterprise Server 15 SP4-LTSS jetty-minimal 0 9.4.57-150200.3.31.1
SUSE:Linux Enterprise Server 15 SP5-LTSS jetty-minimal 0 9.4.57-150200.3.31.1
SUSE:Linux Enterprise Server for SAP Applications 15 SP3 jetty-minimal 0 9.4.57-150200.3.31.1
SUSE:Linux Enterprise Server for SAP Applications 15 SP4 jetty-minimal 0 9.4.57-150200.3.31.1
SUSE:Linux Enterprise Server for SAP Applications 15 SP5 jetty-minimal 0 9.4.57-150200.3.31.1
Ubuntu:14.04:LTS jetty 0 No fix
Ubuntu:16.04:LTS jetty 0 No fix
Ubuntu:16.04:LTS jetty9 0 No fix
Ubuntu:18.04:LTS jetty9 0 No fix
Ubuntu:20.04:LTS jetty9 0 No fix
Ubuntu:22.04:LTS jetty9 0 No fix
Ubuntu:24.04:LTS jetty9 0 No fix
Ubuntu:24.10 jetty9 0 No fix
Ubuntu:Pro:14.04:LTS jetty 0 No fix
Ubuntu:Pro:16.04:LTS jetty 0 No fix

Related vulnerabilities