Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
We're running a S3-compatible storage solution built on Ceph RGW. With its most recent update to 19.2.6, Ceph fixed a security vulnerability (CVE-2026-54330) related to how the signature is calculated/treated. After the upgrade to 19.2.6 I stumbled across an issue with AsyncAws in terms of signature generation.
The issue first surfaced when I made a ListObjectsV2 request. AsyncAws sends
Content-Type: application/xmlonListObjectsV2requests but excludes it fromSignedHeaders.With the upgrade to 19.2.6, Ceph RGW it rejects this combination with
403 AccessDeniedunder its default SigV4 validation. This PR signs an existingContent-Typeheader on ordinary requests while retaining its exclusion from presigned URLs which is aligned with the signature behaviour in recent AWS SDKs.Reproduction
The failure was reproduced with
async-aws/core1.29.2 andasync-aws/s33.3.0, using both path-style and virtual-host addressing. The same credentials, region, operation and query parameters were used throughout:Rationale
The Ceph 19.2.6 verifier explicitly rejects a present Content-Type absent from the canonical headers. This is in conjunction with AWS' signing policy where it reads:
AWS PHP SDK recently made the same distinction proposed here: aws/aws-sdk-php#3310, merged June 19, 2026, removed Content-Type from ordinary signing exclusions while retaining its exclusion when presigning. That change addressed #3283.