CVE-2026-71191 Overview
CVE-2026-71191 is an authorization flaw in OpenStack Swift through version 2.38.0. The S3API middleware fails to include semantic x-amz-* headers in the Signature Version 4 (SigV4) signature validation for presigned URL requests. An attacker who obtains a presigned PUT URL can inject an unsigned X-Amz-Copy-Source header. Swift then performs a server-side copy from an arbitrary source object using the signer's authorization context. This exposes any object accessible to the URL signer, provided the target project_id, container name, and object name are known. The issue affects all deployments running the default s3_acl=false configuration and is tracked under CWE-863: Incorrect Authorization.
Critical Impact
A presigned PUT URL becomes a read primitive against any object the signer can access, defeating the intended least-privilege scope of the URL.
Affected Products
- OpenStack Swift versions through 2.38.0
- Swift deployments using the default s3_acl=false configuration
- S3API middleware component processing SigV4 presigned URLs
Discovery Timeline
- 2026-08-05 - CVE-2026-71191 published to NVD
- 2026-08-06 - Last updated in NVD database
Technical Details for CVE-2026-71191
Vulnerability Analysis
OpenStack Swift's S3API middleware provides Amazon S3 compatibility for Swift object storage. It validates SigV4 signatures on incoming requests, including presigned URLs where the signature covers specific query parameters and headers. The middleware treats X-Amz-Copy-Source as a non-canonical header for presigned requests, allowing clients to add it after signing. Swift honors the header and performs a server-side copy, reading the source object under the signer's credentials and writing the content to the destination specified in the presigned PUT URL.
The attacker controls the destination because they hold the presigned URL. They also control the source through the injected X-Amz-Copy-Source header. The signer's authorization context is applied to the copy operation, granting the attacker access to any object the signer can read.
Root Cause
The root cause is incomplete signature coverage in the SigV4 verification path. The S3API middleware does not enforce that semantic x-amz-* headers, specifically X-Amz-Copy-Source, are part of the signed header set on presigned URL requests. This violates the principle that authorization decisions must bind all security-relevant request parameters to the signature.
Attack Vector
Exploitation requires an attacker to obtain a valid presigned PUT URL, which may be shared through legitimate application workflows such as user uploads. The attacker sends a PUT request to the presigned URL and adds an X-Amz-Copy-Source header pointing to /project_id/container/object. Swift interprets this as a server-side copy request, retrieves the source object using the signer's credentials, and completes the operation. The attacker then downloads the copied object from the destination container to complete the disclosure. Attackers must know or guess the target project_id, container name, and object name.
Refer to the OpenStack Security Advisory OSSA-2026-030 and the Launchpad Bug Report #2158733 for technical details.
Detection Methods for CVE-2026-71191
Indicators of Compromise
- Presigned PUT requests to Swift S3API endpoints containing an X-Amz-Copy-Source header not present in the signed header list
- Server-side copy operations where the source object resides in a container unrelated to the presigned URL destination
- Unexpected object creation in destination containers immediately followed by GET requests from external IPs
Detection Strategies
- Parse Swift proxy access logs and compare the SignedHeaders value in the Authorization or query string against the actual request headers to flag X-Amz-Copy-Source used outside the signed set
- Alert on any presigned URL PUT request that triggers a copy operation, since legitimate presigned PUT workflows typically upload client-provided bodies rather than server-side copies
- Correlate object read events on sensitive containers with presigned URL activity from different tenants or IP ranges
Monitoring Recommendations
- Enable verbose S3API middleware logging to capture the parsed signed header set and any additional headers present on the request
- Forward Swift proxy logs to a centralized analytics platform such as Singularity Data Lake for correlation across tenants and time windows
- Track baseline rates of X-Amz-Copy-Source usage per project and alert on statistical anomalies
How to Mitigate CVE-2026-71191
Immediate Actions Required
- Inventory all Swift deployments and confirm the running version against the 2.38.0 threshold
- Apply the patched Swift release referenced in OSSA-2026-030 as soon as it is available in your distribution channel
- Audit recent proxy logs for X-Amz-Copy-Source headers on presigned PUT requests to identify potential prior exploitation
- Rotate credentials for accounts that have generated presigned URLs shared with untrusted parties
Patch Information
Upgrade OpenStack Swift beyond 2.38.0 to a release that enforces SigV4 coverage of semantic x-amz-* headers on presigned URL requests. Consult the OpenWall OSS Security List Update and OSSA-2026-030 for the exact fixed versions and backport availability.
Workarounds
- Deploy a reverse proxy or WAF rule that rejects PUT requests to Swift S3API endpoints containing an X-Amz-Copy-Source header when the signed header set does not include it
- Restrict issuance of presigned URLs to credentials that hold only the minimum permissions required for the intended object, limiting the read scope available to an attacker
- Where feasible, enable s3_acl=true and evaluate application compatibility, since the flaw is described as affecting default s3_acl=false configurations
# Example proxy rule concept: block copy-source injection on presigned PUTs
# Reject PUT requests where X-Amz-Copy-Source is present but the query string
# X-Amz-SignedHeaders parameter does not list x-amz-copy-source.
# Implement in your reverse proxy (nginx, HAProxy, Envoy) in front of Swift proxy.
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

