Cloudanix VulnDB

CVE-2023-34062

High · 7.5

CVSS

7.5

EPSS

1.1%

Published

Nov 15, 2023

CISA due date

—

Cloudanix analysis

Next patch cycle SSVC: Track

A flaw in a common web server component could allow an unauthorized person to read sensitive files from the server by sending a specially crafted web request.

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

What it actually does

The vulnerability is a path traversal flaw in the Reactor Netty HTTP Server. An unauthenticated, remote attacker can send a specially crafted HTTP request containing URL-encoded traversal sequences (e.g., '..%2f'). The server fails to properly sanitize this input when serving static files, allowing the attacker to navigate outside of the intended web root directory and read arbitrary files on the server's filesystem, constrained only by the file permissions of the running process.

Why it matters to the business

Exploitation of this vulnerability can lead to the exfiltration of sensitive data, such as application source code, configuration files containing credentials, and other proprietary business information. This data breach could result in significant financial loss, regulatory penalties, reputational damage, and a loss of customer trust. Stolen credentials could also serve as a foothold for attackers to move laterally within the network, escalating the security incident.

How an attack unfolds

An unauthenticated attacker identifies a web application using a vulnerable version of Reactor Netty that is configured to serve static files. The attacker then crafts an HTTP GET request with a URL containing path traversal sequences, like '..%2f'. When the vulnerable server receives this request, it incorrectly processes the path, allowing access to files outside the designated static resource directory. The attacker can systematically probe for and retrieve sensitive files, such as '/etc/passwd' or application credentials, which are then returned in the HTTP response, effectively exfiltrating them.

How to fix it

To remediate this vulnerability, developers should upgrade the Reactor Netty library to a patched version. For applications on the 1.1.x release train, upgrade to version 1.1.13 or later. For applications on the 1.0.x release train, upgrade to version 1.0.39 or later. If an immediate upgrade is not feasible, consider disabling the static resource serving feature in Reactor Netty or implementing a Web Application Firewall (WAF) with rules to block path traversal attack patterns.

How to confirm the fix worked

To validate the fix, first confirm that the project's dependencies have been updated to a non-vulnerable version of Reactor Netty (1.1.13+ or 1.0.39+) by inspecting build files (e.g., pom.xml, build.gradle) or using a Software Composition Analysis (SCA) tool. For active testing in a safe, non-production environment, send a request with a traversal payload (e.g., `curl http://<host>/<static-path>/..%2f..%2f..%2fetc/passwd`). A patched system should respond with an error (e.g., 404 Not Found), not the contents of the file.

Typical attack path

  1. The attacker identifies a public-facing web server running an application built with a vulnerable version of Reactor Netty.
  2. The attacker confirms the application is configured to serve static resources from the filesystem.
  3. The attacker crafts a malicious HTTP request containing path traversal sequences in the URL to target a sensitive file.
  4. The attacker sends the request to the server.
  5. The vulnerable server processes the request, bypasses the directory restrictions, and returns the contents of the targeted file.
  6. The attacker receives the sensitive file and may use the information to launch further attacks.

How to detect it

Monitor web server and load balancer access logs for HTTP requests containing URL-encoded path traversal sequences in the URI. Suspicious indicators include patterns like '..%2f', '%2e%2e%2f', '..%5c', and their double-encoded variants. Successful exploitation may be indicated by a 200 OK status code in response to such a request, particularly if the request targets known sensitive system or configuration files (e.g., '/etc/passwd', 'application.properties', '.env').

  • ..%2f
  • %2e%2e%2f
  • ..%5c
  • %2e%2e%5c
  • ..\
  • %2e%2e/
  • ../

What your security team should do

  • Use a Software Composition Analysis (SCA) tool to identify all applications using vulnerable versions of Reactor Netty and prioritize them for immediate patching.
  • Deploy or update Web Application Firewall (WAF) rules to detect and block requests containing path traversal sequences like '../', '..%2f', and '..%5c' as a compensating control.
  • Review web server configurations to determine which applications serve static resources via Reactor Netty, as they are the ones at risk.

The record

In Reactor Netty HTTP Server, versions 1.1.x prior to 1.1.13 and versions 1.0.x prior to 1.0.39, a malicious user can send a request using a specially crafted URL that can lead to a directory traversal attack. Specifically, an application is vulnerable if Reactor Netty HTTP Server is configured to serve static resources.

Affected packages

Ecosystem Package Introduced Fixed
Maven io.projectreactor.netty:reactor-netty-http 1.0.0 1.0.39
Maven io.projectreactor.netty:reactor-netty-http 1.1.0 1.1.13
Chainguard elasticsearch-8 0 8.12.1-r0
Chainguard elasticsearch-8-bitnami 0 8.12.1-r0
Chainguard elasticsearch-8-config 0 8.12.1-r0
Chainguard elasticsearch-8-iamguarded 0 8.12.1-r0
Chainguard elasticsearch-config 0 8.12.1-r0
Chainguard trino 0 433-r1
Chainguard trino-config 0 433-r1
Chainguard trino-oci-entrypoint 0 433-r1
Chainguard trino-plugin-accumulo 0 433-r1
Chainguard trino-plugin-ai-functions 0 433-r1
Chainguard trino-plugin-atop 0 433-r1
Chainguard trino-plugin-bigquery 0 433-r1
Chainguard trino-plugin-blackhole 0 433-r1
Chainguard trino-plugin-cassandra 0 433-r1
Chainguard trino-plugin-clickhouse 0 433-r1
Chainguard trino-plugin-delta-lake 0 433-r1
Chainguard trino-plugin-druid 0 433-r1
Chainguard trino-plugin-duckdb 0 433-r1
Chainguard trino-plugin-elasticsearch 0 433-r1
Chainguard trino-plugin-example-http 0 433-r1
Chainguard trino-plugin-exasol 0 433-r1
Chainguard trino-plugin-exchange-filesystem 0 433-r1
Chainguard trino-plugin-exchange-hdfs 0 433-r1
Chainguard trino-plugin-faker 0 433-r1
Chainguard trino-plugin-functions-python 0 433-r1
Chainguard trino-plugin-geospatial 0 433-r1
Chainguard trino-plugin-google-sheets 0 433-r1
Chainguard trino-plugin-hive 0 433-r1
Chainguard trino-plugin-http-event-listener 0 433-r1
Chainguard trino-plugin-http-server-event-listener 0 433-r1
Chainguard trino-plugin-hudi 0 433-r1
Chainguard trino-plugin-iceberg 0 433-r1
Chainguard trino-plugin-ignite 0 433-r1
Chainguard trino-plugin-jmx 0 433-r1
Chainguard trino-plugin-kafka 0 433-r1
Chainguard trino-plugin-kafka-event-listener 0 433-r1
Chainguard trino-plugin-kinesis 0 433-r1
Chainguard trino-plugin-kudu 0 433-r1
Chainguard trino-plugin-lakehouse 0 433-r1
Chainguard trino-plugin-ldap-group-provider 0 433-r1
Chainguard trino-plugin-local-file 0 433-r1
Chainguard trino-plugin-loki 0 433-r1
Chainguard trino-plugin-mariadb 0 433-r1
Chainguard trino-plugin-memory 0 433-r1
Chainguard trino-plugin-ml 0 433-r1
Chainguard trino-plugin-mongodb 0 433-r1
Chainguard trino-plugin-mysql 0 433-r1
Chainguard trino-plugin-mysql-event-listener 0 433-r1
Chainguard trino-plugin-opa 0 433-r1
Chainguard trino-plugin-openlineage 0 433-r1
Chainguard trino-plugin-opensearch 0 433-r1
Chainguard trino-plugin-oracle 0 433-r1
Chainguard trino-plugin-password-authenticators 0 433-r1
Chainguard trino-plugin-phoenix5 0 433-r1
Chainguard trino-plugin-pinot 0 433-r1
Chainguard trino-plugin-postgresql 0 433-r1
Chainguard trino-plugin-prometheus 0 433-r1
Chainguard trino-plugin-ranger 0 433-r1
Chainguard trino-plugin-raptor-legacy 0 433-r1
Chainguard trino-plugin-redis 0 433-r1
Chainguard trino-plugin-redshift 0 433-r1
Chainguard trino-plugin-resource-group-managers 0 433-r1
Chainguard trino-plugin-session-property-managers 0 433-r1
Chainguard trino-plugin-singlestore 0 433-r1
Chainguard trino-plugin-snowflake 0 433-r1
Chainguard trino-plugin-spooling-filesystem 0 433-r1
Chainguard trino-plugin-sqlserver 0 433-r1
Chainguard trino-plugin-teradata-functions 0 433-r1
Chainguard trino-plugin-thrift 0 433-r1
Chainguard trino-plugin-tpcds 0 433-r1
Chainguard trino-plugin-tpch 0 433-r1
Chainguard trino-plugin-vertica 0 433-r1
Wolfi trino 0 433-r1
Wolfi trino-config 0 433-r1
Wolfi trino-oci-entrypoint 0 433-r1
Wolfi trino-plugin-accumulo 0 433-r1
Wolfi trino-plugin-ai-functions 0 433-r1
Wolfi trino-plugin-atop 0 433-r1
Wolfi trino-plugin-bigquery 0 433-r1
Wolfi trino-plugin-blackhole 0 433-r1
Wolfi trino-plugin-cassandra 0 433-r1
Wolfi trino-plugin-clickhouse 0 433-r1
Wolfi trino-plugin-delta-lake 0 433-r1
Wolfi trino-plugin-druid 0 433-r1
Wolfi trino-plugin-duckdb 0 433-r1
Wolfi trino-plugin-elasticsearch 0 433-r1
Wolfi trino-plugin-example-http 0 433-r1
Wolfi trino-plugin-exasol 0 433-r1
Wolfi trino-plugin-exchange-filesystem 0 433-r1
Wolfi trino-plugin-exchange-hdfs 0 433-r1
Wolfi trino-plugin-faker 0 433-r1
Wolfi trino-plugin-functions-python 0 433-r1
Wolfi trino-plugin-geospatial 0 433-r1
Wolfi trino-plugin-google-sheets 0 433-r1
Wolfi trino-plugin-hive 0 433-r1
Wolfi trino-plugin-http-event-listener 0 433-r1
Wolfi trino-plugin-http-server-event-listener 0 433-r1
Wolfi trino-plugin-hudi 0 433-r1
Wolfi trino-plugin-iceberg 0 433-r1
Wolfi trino-plugin-ignite 0 433-r1
Wolfi trino-plugin-jmx 0 433-r1
Wolfi trino-plugin-kafka 0 433-r1
Wolfi trino-plugin-kafka-event-listener 0 433-r1
Wolfi trino-plugin-kinesis 0 433-r1
Wolfi trino-plugin-kudu 0 433-r1
Wolfi trino-plugin-lakehouse 0 433-r1
Wolfi trino-plugin-ldap-group-provider 0 433-r1
Wolfi trino-plugin-local-file 0 433-r1
Wolfi trino-plugin-loki 0 433-r1
Wolfi trino-plugin-mariadb 0 433-r1
Wolfi trino-plugin-memory 0 433-r1
Wolfi trino-plugin-ml 0 433-r1
Wolfi trino-plugin-mongodb 0 433-r1
Wolfi trino-plugin-mysql 0 433-r1
Wolfi trino-plugin-mysql-event-listener 0 433-r1
Wolfi trino-plugin-opa 0 433-r1
Wolfi trino-plugin-openlineage 0 433-r1
Wolfi trino-plugin-opensearch 0 433-r1
Wolfi trino-plugin-oracle 0 433-r1
Wolfi trino-plugin-password-authenticators 0 433-r1
Wolfi trino-plugin-phoenix5 0 433-r1
Wolfi trino-plugin-pinot 0 433-r1
Wolfi trino-plugin-postgresql 0 433-r1
Wolfi trino-plugin-prometheus 0 433-r1
Wolfi trino-plugin-ranger 0 433-r1
Wolfi trino-plugin-raptor-legacy 0 433-r1
Wolfi trino-plugin-redis 0 433-r1
Wolfi trino-plugin-redshift 0 433-r1
Wolfi trino-plugin-resource-group-managers 0 433-r1
Wolfi trino-plugin-session-property-managers 0 433-r1
Wolfi trino-plugin-singlestore 0 433-r1
Wolfi trino-plugin-snowflake 0 433-r1
Wolfi trino-plugin-spooling-filesystem 0 433-r1
Wolfi trino-plugin-sqlserver 0 433-r1
Wolfi trino-plugin-teradata-functions 0 433-r1
Wolfi trino-plugin-thrift 0 433-r1
Wolfi trino-plugin-tpcds 0 433-r1
Wolfi trino-plugin-tpch 0 433-r1
Wolfi trino-plugin-vertica 0 433-r1
maven io.projectreactor.netty/reactor-netty 1.0.0 1.0.39
maven io.projectreactor.netty/reactor-netty 1.1.0 1.1.13
maven io.projectreactor.netty/reactor-netty-http 1.0.0 1.0.39
maven io.projectreactor.netty/reactor-netty-http 1.1.0 1.1.13

Related vulnerabilities