CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



CVE-2026-88045

CVE-2026-88045: Denial of Service via Uncontrolled Memory Preallocation and Integer Overflow in rclone S3 Compatibility Layer

Alon Barad
Alon Barad
Software Engineer

Sep 11, 2026·7 min read·18 visits

Executive Summary (TL;DR)

rclone is vulnerable to Denial of Service via uncontrolled resource preallocation and integer overflow in its S3 multipart upload system. Attackers can trigger Out-Of-Memory crashes by sending crafted HTTP headers with extremely large size parameters.

A high-severity Denial of Service (DoS) vulnerability in the S3 compatibility layer of rclone allows unauthenticated remote attackers (or authenticated attackers depending on configuration) to trigger rapid memory exhaustion and process termination. The flaw lies in the handling of S3 multipart uploads, where rclone eagerly allocates buffers based on untrusted size headers and fails to prevent integer overflows in its concurrent request admission control.

Vulnerability Overview

CVE-2026-88045 is a high-severity Denial of Service (DoS) vulnerability in rclone's S3 compatibility layer, which is initiated via the serve s3 command. The flaw allows an attacker to cause system resource exhaustion on the host operating system, leading to process termination or server hangs. This weakness is categorized under CWE-789 (Memory Allocation with Excessive Size Value) and CWE-190 (Integer Overflow or Wraparound).

The vulnerability arises within the multipart upload component, specifically during the handling of UploadPart API requests. When a client initiates a request, the server parses the metadata to prepare buffer allocations for the incoming data payload. The application relies on client-supplied headers, such as Content-Length or X-Amz-Decoded-Content-Length, to determine the size of the memory buffer to reserve.

Because these values are processed before the server verifies or reads the actual bytes from the network socket, the S3 backend immediately attempts to allocate heap memory based on untrusted inputs. When anonymous access is enabled, any remote attacker can exploit this behavior without authentication. On authenticated deployments, an attacker requires a valid S3 access key, but the mechanics of the exploit remain identical.

Root Cause Analysis

The core weakness lies in the execution of immediate memory preallocation paired with an overflow-prone comparison logic. S3 multipart uploads require out-of-order part processing and temporary caching of incoming data segments. To manage these segments, rclone uses a pool-backed ReaderWriter struct from its lib/pool package, which allocates physical RAM dynamically in 1 MiB pages.

When an incoming UploadPart request is handled, the code extracts the part size from the request headers and immediately invokes multipart.NewRW().Reserve(contentLength). This function call allocates the exact number of 1 MiB pages matching the declared length directly within the system memory allocator. Because this allocation occurs prior to reading the request body, no network payload is required to trigger the allocation sequence.

In addition, the application uses an admission control function called waitForTurn to enforce buffer limits and prevent concurrent uploads from exhausting system memory. The function compares the total currently buffered size against a configured limit using the condition up.buffered+size <= up.bufferLimit. This calculation does not perform bounds checking and uses standard signed 64-bit integer addition, which is vulnerable to integer overflows.

A client can bypass the admission control limits by supplying an extremely large integer value, such as math.MaxInt64. When evaluated, the addition of the existing buffer size and the user-supplied size overflows the 64-bit signed integer boundary, wrapping the resulting value into a negative range. This negative result satisfies the comparison inequality, bypassing the safety check and allowing uncontrolled buffer reservation.

Code Analysis

Analyzing the vulnerable codebase reveals the structural flaws in the S3 backend implementation. In cmd/serve/s3/multipart.go, the initialization logic for handling a part upload was constructed as shown below. The use of .Reserve(contentLength) forced immediate memory allocation from the global page pool.

// VULNERABLE CODE (Preallocation)
// Buffer the part in a pool-backed RW so we can MD5 it (for the ETag) and
// stream it once it is this part's turn.
rw := multipart.NewRW().Reserve(contentLength)

The corresponding admission logic in waitForTurn lacked input verification for negative sizes and used an unsafe addition operation. This made the check vulnerable to arithmetic wraparound, which bypassed the buffer limits entirely.

// VULNERABLE CODE (Admission Control)
func (up *multipartUpload) waitForTurn(partNumber int, size int64) error {
    up.mu.Lock()
    defer up.mu.Unlock()
    for {
        if up.closed {
            return gofakes3.ErrNoSuchUpload
        }
        if up.bufferLimit <= 0 || partNumber <= up.nextPart || up.buffered == 0 || up.buffered+size <= up.bufferLimit {
            up.buffered += size
            return nil
        }
        // ...
    }
}

To resolve the preallocation issue, the developers removed the .Reserve call in commit 7c1dfd99f3e6a22fcefd8686cc478226a15e63a1. The buffer now starts empty and grows page-by-page as bytes are read from the network stream, preventing immediate resource starvation.

// PATCHED CODE (No Preallocation)
// Buffer the part in a pool-backed RW so we can MD5 it (for the ETag) and
// stream it once it is this part's turn. The RW grows a page at a time as
// the body is read.
rw := multipart.NewRW()

The second patch in commit ab1f458013aaf6356e4bdeca61f7cb9139f8eb86 added a negative bounds check and restructured the inequality statement to prevent integer overflows. By rewriting up.buffered+size <= up.bufferLimit as size <= up.bufferLimit-up.buffered, the code avoids arithmetic overflow because up.bufferLimit and up.buffered are both verified positive boundaries.

// PATCHED CODE (Safe Overflow Check)
func (up *multipartUpload) waitForTurn(partNumber int, size int64) error {
	if size < 0 {
		return gofakes3.ErrInvalidArgument
	}
	up.mu.Lock()
	defer up.mu.Unlock()
	for {
		if up.closed {
			return gofakes3.ErrNoSuchUpload
		}
		if up.bufferLimit <= 0 || partNumber <= up.nextPart || up.buffered == 0 || size <= up.bufferLimit-up.buffered {
			up.buffered += size
			return nil
		}
		// ...
	}
}

Exploitation

Exploitation of this vulnerability requires network access to the rclone S3 service endpoint. The attacker first initiates a multipart upload session using a standard CreateMultipartUpload request to acquire a valid UploadID. On public, anonymous S3 deployments, this initial request does not require S3 authentication credentials.

The attacker then transmits a malicious UploadPart request specifying an out-of-order part number (e.g., PartNumber=2). The request contains an inflated Content-Length or X-Amz-Decoded-Content-Length header, such as 9223372036854775807. This extreme value triggers the integer overflow in the admission control system.

Once the comparison is bypassed, the handler processes the request and executes the allocation sequence. The lib/pool allocator tries to allocate thousands of 1 MiB pages to satisfy the oversized size parameter. The attacker does not need to send the actual request body payload, which allows the attack to be executed with minimal bandwidth.

The attacker can keep the TCP socket open without transmitting any data, which holds the reserved memory blocks in the server process heap. This leads to immediate physical RAM exhaustion, triggering the kernel's Out-Of-Memory (OOM) killer to terminate the rclone service.

Impact Assessment

The primary impact of CVE-2026-88045 is a complete Denial of Service (DoS) of the S3 storage service. When the rclone process is terminated by the operating system due to memory exhaustion, all active client connections are dropped, and all ongoing file synchronization operations are interrupted.

The vulnerability has a CVSS v3.1 base score of 7.5, reflecting a network attack vector with low complexity and no privileges required on anonymous instances. The impact is isolated to availability, as there is no associated threat of unauthorized data access, privilege escalation, or integrity modification.

Because the S3 endpoint is often exposed to public networks to facilitate remote storage access, this vulnerability presents a low-barrier vector for service disruption. Organizations relying on rclone as a backend daemon for data distribution are particularly vulnerable to operational outages.

Remediation

The definitive solution for this vulnerability is to upgrade rclone to version 1.75.1 or later. This version contains the official patches that remove eager memory allocation and secure the admission control check against integer overflows. The release can be retrieved from the official repository release channel.

If upgrading the software is not immediately possible, several temporary workarounds should be applied to reduce the attack surface. First, ensure that anonymous access is disabled by requiring robust S3 credentials via the --auth-key option. This restricts the potential exploit audience to authenticated clients.

Additionally, administrators can configure a reverse proxy or Web Application Firewall (WAF) in front of the rclone service. The proxy should be configured to inspect S3 headers and drop requests containing anomalous or excessively large values in the Content-Length or X-Amz-Decoded-Content-Length headers, enforcing a reasonable upper bound such as 5 GiB.

Finally, reducing the socket timeout limits on front-end reverse proxies will terminate idle TCP connections. This prevents attackers from holding open connection channels to sustain the memory exhaustion state over an extended period.

Fix Analysis (2)

Technical Appendix

CVSS Score
7.5/ 10
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H

Affected Systems

rclone S3 compatibility layer (serve S3)

Affected Versions Detail

Product
Affected Versions
Fixed Version
rclone
rclone
== 1.75.01.75.1
AttributeDetail
CWE IDCWE-789 / CWE-190
Attack VectorNetwork
CVSS7.5 (High)
EPSSN/A
ImpactAvailability (Denial of Service)
Exploit StatusNone / PoC
KEV StatusNot Listed

MITRE ATT&CK Mapping

T1499.004Endpoint Denial of Service: System Resource Exhaustion
Impact
CWE-789
Memory Allocation with Excessive Size Value

The software allocates memory based on an untrusted, user-controlled input value representing the size of the allocation without performing proper validation.

References & Sources

  • [1]rclone Security Advisory GHSA-2p48-j3qc-rx9f
  • [2]rclone Issue 9616
  • [3]rclone v1.75.1 Release Notes
  • [4]NVD CVE-2026-88045
  • [5]CVE-2026-88045 Record

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•2 days ago•CVE-2026-115895
8.8

CVE-2026-115895: Code Injection via Unsanitized Import Alias in Happy DOM ECMAScript Module Compiler

CVE-2026-115895 is a high-severity code injection vulnerability (CWE-94) in the happy-dom npm package prior to version 21.0.4. The vulnerability exists within the ECMAScriptModuleCompiler component, which transforms ECMAScript module syntax into executable Node.js functions when JavaScript evaluation is enabled. Due to an incomplete fix for CVE-2026-33943, the compiler failed to validate local named import aliases against legal JavaScript identifier rules. Attackers supplying crafted module imports—specifically utilizing destructuring default initializers alongside JSON module attributes—can inject arbitrary JavaScript expressions directly into the host Node.js runtime context.

Amit Schendel
Amit Schendel
8 views•10 min read
•2 days ago•CVE-2026-115883
6.0

CVE-2026-115883: Cross-Namespace Access via Dot-Delimited Labels in LangGraph Postgres and SQLite Stores

An improper input validation and authorization bypass vulnerability exists in the LangGraph storage layer affecting langgraph, langgraph-checkpoint-postgres, and langgraph-checkpoint-sqlite. Because relational store implementations serialize namespace tuples into dot-delimited strings without validating labels on read, search, delete, and batch operations, an attacker who controls a namespace label can inject periods (.) to traverse namespace boundaries and access, modify, or delete data belonging to other namespaces.

Amit Schendel
Amit Schendel
8 views•9 min read
•2 days ago•CVE-2026-115886
6.5

CVE-2026-115886: Unauthenticated Server-Side Request Forgery and Unsafe Reflection in MLflow Scorer Evaluation Endpoints

CVE-2026-115886 (GHSA-2wqp-q3c6-ccj5) is a Server-Side Request Forgery (SSRF) and Unsafe Reflection vulnerability in MLflow versions 3.12.0rc0 prior to 3.17.0. Unauthenticated REST API endpoints accept serialized third-party scorer JSON payloads that are dynamically deserialized and reflectively instantiated without sanitizing constructor keyword arguments. When optional dependencies such as trulens and trulens-providers-litellm are installed, attackers can inject egress-steering arguments into the scorer payload, forcing the MLflow server to dispatch outbound HTTP requests to arbitrary internal destinations or cloud metadata services.

Alon Barad
Alon Barad
12 views•10 min read
•2 days ago•CVE-2026-113872
7.5

CVE-2026-113872: Unauthenticated Process Crash in Express Multer via Late Busboy Stream Resumption

CVE-2026-113872 (GHSA-q7qp-rjg7-q26m) is a high-severity denial-of-service vulnerability affecting the multer multipart/form-data upload middleware for Node.js and Express in versions 2.0.0 through 2.4.0. When an endpoint is configured to accept multiple files using an asynchronous fileFilter callback, a crafted, truncated multipart HTTP request can trigger an unhandled error event on the underlying busboy stream parser after request teardown has already completed. Because all error listeners are stripped during teardown, Node.js treats the resulting error event as an uncaught exception and immediately terminates the server process.

Amit Schendel
Amit Schendel
8 views•12 min read
•2 days ago•CVE-2026-115897
2.1

CVE-2026-115897: Cross-Site Scripting via Function Body Boundary Bypass in serialize-javascript

CVE-2026-115897 (also tracked as GHSA-m5mm-p8h7-m29v and aliased as CVE-2026-115754) is a Cross-Site Scripting (XSS) vulnerability in the Yahoo serialize-javascript npm package prior to version 7.1.3. The flaw exists in the regular expression used by escapeFunctionBody() to neutralize HTML script closing tags within serialized JavaScript functions. Because function bodies are sanitized in isolation before structural formatting is applied, a function whose string representation terminates directly with the sequence '</script' bypasses the positive lookahead check. When combined with serialization formatting options that introduce whitespace delimiters and a subsequent property that supplies a closing bracket, an attacker can prematurely terminate an enclosing HTML <script> block and inject arbitrary HTML or JavaScript into the rendered document.

Amit Schendel
Amit Schendel
7 views•13 min read
•2 days ago•CVE-2026-109841
5.9

CVE-2026-109841: Subresource Integrity Verification Bypass in Node.js Undici

CVE-2026-109841 is a Subresource Integrity (SRI) verification bypass vulnerability in undici, the official HTTP/1.1 and HTTP/2 client library for Node.js that powers the global fetch() implementation. The flaw stems from improper handling of case sensitivity (CWE-178) when validating cryptographic hash algorithm tokens within SRI metadata. Because undici compared incoming algorithm identifiers against a strictly lowercase set without prior ASCII-lowercase normalization, valid uppercase or mixed-case tokens such as SHA256- or Sha384- were treated as unrecognized algorithms and discarded. Under SRI forward-compatibility rules, discarding all provided tokens results in an empty integrity list, causing undici to fail open and accept tampered HTTP response bodies without cryptographic verification.

Alon Barad
Alon Barad
15 views•9 min read