{"id":"CVE-2026-126071","state":"PUBLISHED","title":"Active Storage: Possible DoS vulnerability in Active Storage proxy mode via storage errors during streaming","description":"Active Storage makes it simple to upload and reference files in cloud services and attach those files to Active Record objects. From 8.0 until 8.0.5.2 and 8.1.4.1, when Active Storage serves a file through its proxy controllers, ActiveStorage::Streaming#send_blob_stream handles an error from the storage service by calling head to send a 404 or 500 response. If the error occurs after the first chunk has been written, the response is already committed, and head replaces the response body while the server is still reading the original ActionController::Live buffer. That buffer is never closed, so the server thread handling the request blocks until the process restarts. Repeated failed downloads could exhaust the server's threads, possibly resulting in a DoS vulnerability. Applications are affected when they store files on a service that streams a download in several requests, such as Amazon S3, an S3-compatible service or Google Cloud Storage, and draw Active Storage's default routes. The proxy routes are drawn whether or not proxy mode is the default for the application. A file deleted while it is being served, or any other storage error partway through a download, triggers the condition. This issue is fixed in versions 8.1.4.1 and 8.0.5.2.","publishedAt":"2026-11-10T20:40:37.197Z","updatedAt":"2026-11-10T20:40:37.197Z","severity":{"score":5.3,"label":"Medium","version":"3.1","vector":"CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:N/I:N/A:H","source":"GitHub_M"},"assigner":"GitHub_M","products":["rails rails"],"affected":[{"vendor":"rails","product":"rails","versions":[{"version":">= 8.1, < 8.1.4.1","status":"affected"},{"version":">= 8.0, < 8.0.5.2","status":"affected"}]}],"references":["https://github.com/rails/rails/security/advisories/GHSA-4v2w-w6g6-f8f8","https://github.com/rails/rails/commit/3c67a693fb21870ecb1222e3da59d5c491a62009","https://github.com/rails/rails/commit/655b4442de136a3701334607f634d698bf9d5b82","https://github.com/rails/rails/releases/tag/v8.0.5.2","https://github.com/rails/rails/releases/tag/v8.1.4.1"],"weaknesses":["CWE-772"],"ingestedAt":"2026-11-10T20:52:06.957Z","source":{"repository":"CVEProject/cvelistV5","path":"cves/2026/126xxx/CVE-2026-126071.json","commit":"cd87b009c69cb95c2b9f35c35b81e00a7c52601d","baselineCommit":"556c9d3a8cd17e218bb8e452ba7cd619a384ff47"},"raw":{"dataType":"CVE_RECORD","dataVersion":"5.2","cveMetadata":{"cveId":"CVE-2026-126071","state":"PUBLISHED","datePublished":"2026-11-10T20:40:37.197Z","dateUpdated":"2026-11-10T20:40:37.197Z","assignerShortName":"GitHub_M","assignerOrgId":"a0819718-46f1-4df5-94e2-005712e83aaa","dateReserved":"2026-11-10T17:07:43.284Z"},"containers":{"cna":{"title":"Active Storage: Possible DoS vulnerability in Active Storage proxy mode via storage errors during streaming","descriptions":[{"lang":"en","value":"Active Storage makes it simple to upload and reference files in cloud services and attach those files to Active Record objects. From 8.0 until 8.0.5.2 and 8.1.4.1, when Active Storage serves a file through its proxy controllers, ActiveStorage::Streaming#send_blob_stream handles an error from the storage service by calling head to send a 404 or 500 response. If the error occurs after the first chunk has been written, the response is already committed, and head replaces the response body while the server is still reading the original ActionController::Live buffer. That buffer is never closed, so the server thread handling the request blocks until the process restarts. Repeated failed downloads could exhaust the server's threads, possibly resulting in a DoS vulnerability. Applications are affected when they store files on a service that streams a download in several requests, such as Amazon S3, an S3-compatible service or Google Cloud Storage, and draw Active Storage's default routes. The proxy routes are drawn whether or not proxy mode is the default for the application. A file deleted while it is being served, or any other storage error partway through a download, triggers the condition. This issue is fixed in versions 8.1.4.1 and 8.0.5.2."}],"affected":[{"vendor":"rails","product":"rails","versions":[{"version":">= 8.1, < 8.1.4.1","status":"affected"},{"version":">= 8.0, < 8.0.5.2","status":"affected"}]}],"references":[{"url":"https://github.com/rails/rails/security/advisories/GHSA-4v2w-w6g6-f8f8","name":"https://github.com/rails/rails/security/advisories/GHSA-4v2w-w6g6-f8f8","tags":["x_refsource_CONFIRM"]},{"url":"https://github.com/rails/rails/commit/3c67a693fb21870ecb1222e3da59d5c491a62009","name":"https://github.com/rails/rails/commit/3c67a693fb21870ecb1222e3da59d5c491a62009","tags":["x_refsource_MISC"]},{"url":"https://github.com/rails/rails/commit/655b4442de136a3701334607f634d698bf9d5b82","name":"https://github.com/rails/rails/commit/655b4442de136a3701334607f634d698bf9d5b82","tags":["x_refsource_MISC"]},{"url":"https://github.com/rails/rails/releases/tag/v8.0.5.2","name":"https://github.com/rails/rails/releases/tag/v8.0.5.2","tags":["x_refsource_MISC"]},{"url":"https://github.com/rails/rails/releases/tag/v8.1.4.1","name":"https://github.com/rails/rails/releases/tag/v8.1.4.1","tags":["x_refsource_MISC"]}],"metrics":[{"cvssV3_1":{"attackComplexity":"HIGH","attackVector":"NETWORK","availabilityImpact":"HIGH","baseScore":5.3,"baseSeverity":"MEDIUM","confidentialityImpact":"NONE","integrityImpact":"NONE","privilegesRequired":"LOW","scope":"UNCHANGED","userInteraction":"NONE","vectorString":"CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:N/I:N/A:H","version":"3.1"}}],"problemTypes":[{"descriptions":[{"cweId":"CWE-772","lang":"en","description":"CWE-772: Missing Release of Resource after Effective Lifetime","type":"CWE"}]}],"providerMetadata":{"shortName":"GitHub_M","orgId":"a0819718-46f1-4df5-94e2-005712e83aaa","dateUpdated":"2026-11-10T20:40:37.197Z"},"source":{"advisory":"GHSA-4v2w-w6g6-f8f8","discovery":"UNKNOWN"}}}}}