CVE-2026-126085: Active Storage: Possible circumvention of file size limits in Active Storage direct uploads to Google Cloud Storage

Published Nov 10, 2026
·
Updated

Impact ActiveStorage::Service::GCSService#urlfordirectupload does not bind the declared content length into the signed direct-upload URL, and #headersfordirectupload returns no length constraint, so the URL authorizes an upload body of any size. A direct-upload client could store a file larger than the bytesize it declared, and the resulting blob keeps the declared size, possibly bypassing application file size validations and quotas. This is the weakness that CVE-2020-8162 fixed in the S3 service.

Applications that store files in Google Cloud Storage and accept direct uploads are affected.

Details The fixed releases sign an x-goog-content-length-range header that matches the blob's declared bytesize and return it from headersfordirectupload, so Cloud Storage rejects an upload body of any other size. Browsers send this header with the direct upload, so a bucket's CORS configuration must list x-goog-content-length-range in responseHeader, or browser direct uploads fail after the upgrade. The Active Storage CHANGELOG and the CORS example in the Active Storage guide show the change.

Releases The fixed releases are available at the normal locations.

Patches for those who cannot upgrade at once: - 8.1: https://github.com/rails/rails/commit/e19916cea31cbfb0030b165ae853b741f8dd57a7.patch - 8.0: https://github.com/rails/rails/commit/7fe85a72a789eae5ee070ce3ee1dad10a8a5f70c.patch

Credit This issue was responsibly reported by HackerOne researcher f4cts.

Other sources

Active Storage makes it simple to upload and reference files in cloud services and attach those files to Active Record objects. Prior to 8.1.4.1 and 8.0.5.2, ActiveStorage::Service::GCSService#urlfordirectupload does not bind the declared content length into the signed direct-upload URL, and #headersfordirectupload returns no length constraint, so the URL authorizes an upload body of any size. A direct-upload client could store a file larger than the bytesize it declared, and the resulting blob keeps the declared size, possibly bypassing application file size validations and quotas. This is the weakness that CVE-2020-8162 fixed in the S3 service. Applications that store files in Google Cloud Storage and accept direct uploads are affected. This issue is fixed in versions 8.1.4.1 and 8.0.5.2.

— MITRE

Affected Software

2 affected componentsFixes available
rubygems/activestorage<8.0.5.2
8.0.5.2
rubygems/activestorage>=8.1.0.beta1<8.1.4.1
8.1.4.1

Remediation

Recommended actions to resolve this vulnerability, in priority order.

  1. Upgrade

    Upgrade rubygems/activestorage to a version that resolves this vulnerability.

    Fixed in 8.0.5.2
  2. Upgrade

    Upgrade rubygems/activestorage to a version that resolves this vulnerability.

    Fixed in 8.1.4.1
  3. Upgrade

    Upgrade rails/rails to a version that resolves this vulnerability.

    Fixed in 8.1.4.1
  4. Upgrade

    Upgrade rails/rails to a version that resolves this vulnerability.

    Fixed in 8.0.5.2
  5. Configuration

    Add x-goog-content-length-range to the bucket CORS responseHeader list so browser direct uploads continue to work after upgrading.

    Google Cloud Storage bucket CORS configuration responseHeader = x-goog-content-length-range

Event History

Nov 10, 2026
CVE Published
via MITRE·09:12 PM
Data Sourced
via MITRE·09:12 PM
DescriptionSeverityWeakness
Advisory Published
via GitHub·09:37 PM
Data Sourced
via GitHub·09:37 PM
DescriptionSeverityWeaknessAffected Software
Data Sourced
via NVD·10:18 PM
DescriptionSeverityWeakness

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203