Cloudanix VulnDB

CVE-2023-27530

High · 7.5

CVSS

7.5

EPSS

1.8%

Published

Mar 10, 2023

CISA due date

—

Cloudanix analysis

Next patch cycle SSVC: Track

A flaw in a common Ruby web component can let someone overload affected websites with specially crafted form or upload requests, making them slow or unavailable.

Exploitation
Remote Unauthenticated
Attacker needs
None
Complexity
Low
Impact
Other
Component
Application
Class
Other
Remediation
Upgrade
Effort
Medium
Patch risk
Low

What it actually does

CVE-2023-27530 affects the Rack Ruby web server interface, specifically request handling for multipart form data. A crafted HTTP multipart request can cause excessive resource consumption during parsing, leading to denial of service through high CPU usage, memory pressure, request-thread exhaustion, or worker process instability. The impact is availability-focused; it does not inherently provide remote code execution or direct data disclosure.

Why it matters to the business

Applications built on Rack, including many Ruby web frameworks and middleware stacks, may become slow or unavailable if exposed endpoints accept attacker-controlled HTTP requests, especially file uploads or form submissions. Because Rack is widely used as a foundational dependency, the issue can be inherited indirectly through frameworks and applications even when Rack is not used directly. The EPSS score is currently low and it is not listed in CISA KEV, but internet-facing services should still prioritize patching because denial-of-service flaws are easy to trigger once request patterns are known.

How an attack unfolds

An attacker identifies an HTTP endpoint backed by a vulnerable Rack version, usually a route that accepts POST requests, form submissions, or file uploads. The attacker sends specially crafted multipart/form-data requests designed to stress Rack's multipart parser. The vulnerable parser consumes disproportionate CPU, memory, file handles, or request-processing time while handling the request. By repeating these requests or sending them concurrently, the attacker can exhaust application workers or upstream queues, causing elevated latency, failed requests, process restarts, or full service outage. No authentication may be required if the vulnerable endpoint is publicly reachable. The supplied threat-actor field references HTTP/2 Rapid Reset activity, but that is not specific evidence of exploitation of this Rack issue; defenders should treat this as a generic web-layer denial-of-service risk unless local telemetry shows matching activity.

How to fix it

Upgrade Rack to a version containing the fix. For source-based tracking of rack/rack, the provided fixed commit is 9996d403584fb7609708f582f7647868b4444949. In packaged applications, update the Rack gem or framework dependency to a release that includes this commit, regenerate and deploy dependency lockfiles, and rebuild container images or artifacts. If immediate upgrade is not possible, reduce exposure by enforcing strict request body size limits, multipart part limits, upload size limits, request timeouts, connection limits, and rate limits at the reverse proxy, application server, and WAF/API gateway layers. Disable or restrict unauthenticated upload/form endpoints where feasible.

How to confirm the fix worked

Confirm that dependency manifests and runtime packages resolve Rack to a fixed version or a build containing commit 9996d403584fb7609708f582f7647868b4444949. Check Gemfile.lock, bundled gems, container image SBOMs, and deployed application artifacts rather than only source repositories. Exercise upload and multipart-form endpoints in a staging environment with oversized and malformed multipart requests to verify that requests are rejected quickly by proxy/application limits and do not cause worker exhaustion. Validate that reverse proxies and application servers enforce request body size, header size, read timeout, and rate-limit policies. After deployment, monitor error rates, latency, memory usage, CPU usage, and worker restarts to ensure normal behavior under multipart request load.

Typical attack path

  1. Discover a public web application or API using a vulnerable Rack dependency.
  2. Identify endpoints that accept POST requests, multipart forms, uploads, or large request bodies.
  3. Send malformed or resource-intensive multipart/form-data requests to trigger inefficient parser behavior.
  4. Increase request volume or concurrency to consume application worker capacity, memory, CPU, or temporary file resources.
  5. Observe service degradation such as timeouts, 5xx responses, worker restarts, or load balancer health-check failures.

How to detect it

To assess prior exploitation, review reverse proxy, load balancer, CDN/WAF, web server, and application logs for bursts of POST requests with Content-Type: multipart/form-data, especially where requests were slow, timed out, returned 408/499/500/502/503/504, or coincided with CPU or memory spikes. Correlate these events with application server logs for worker timeouts, worker restarts, out-of-memory kills, temporary file exhaustion, request queue saturation, and upload parser errors. Examine infrastructure telemetry for abrupt increases in request duration, open connections, request body bytes, temporary directory usage, file descriptor usage, or container restarts. Because this vulnerability is a denial-of-service condition rather than a code-execution flaw, durable host artifacts are usually limited; network and application telemetry are the primary evidence sources.

  • Content-Type: multipart/form-data
  • multipart/form-data; boundary=
  • Rack::Multipart
  • Rack::Multipart::Parser
  • MultipartPartLimitError
  • POST
  • HTTP 408
  • HTTP 499
  • HTTP 500
  • HTTP 502
  • HTTP 503
  • HTTP 504
  • worker timeout
  • upstream timed out
  • request body too large
  • client intended to send too large body
  • out of memory
  • OOMKilled
  • No space left on device
  • /tmp/RackMultipart
  • rack.input

What your security team should do

  • Inventory applications, services, containers, and Ruby dependency lockfiles that include rack/rack.
  • Upgrade Rack to a fixed release or source revision containing commit 9996d403584fb7609708f582f7647868b4444949, then rebuild and redeploy affected artifacts.
  • Prioritize internet-facing applications, unauthenticated form endpoints, APIs accepting multipart/form-data, and file upload workflows.
  • Add compensating controls: request body limits, multipart part limits, upload size limits, request timeouts, per-IP rate limits, and WAF/API gateway throttling.
  • Review web access logs and application metrics for historical denial-of-service patterns involving multipart/form-data requests, elevated 5xx responses, request timeouts, and worker restarts.
  • Ensure dependency scanning covers transitive Rack usage through frameworks such as Rails, Sinatra, Hanami, Grape, or middleware bundles.
  • Create operational alerts for spikes in multipart POST requests, unusual request body sizes, application worker saturation, and repeated client disconnects or timeouts.

The record

A DoS vulnerability exists in Rack <v3.0.4.2, <v2.2.6.3, <v2.1.4.3 and <v2.0.9.3 within in the Multipart MIME parsing code in which could allow an attacker to craft requests that can be abuse to cause multipart parsing to take longer than expected.

Affected packages

Ecosystem Package Introduced Fixed
RubyGems rack 0 2.0.9.3
RubyGems rack 2.1.0 2.1.4.3
RubyGems rack 2.2.0 2.2.6.3
RubyGems rack 3.0.0 3.0.4.2
AlmaLinux:8 pcs 0 0.10.15-4.el8_8.1.alma
AlmaLinux:8 pcs-snmp 0 0.10.15-4.el8_8.1.alma
AlmaLinux:9 pcs 0 0.11.4-7.el9_2
AlmaLinux:9 pcs-snmp 0 0.11.4-7.el9_2
Debian:10 ruby-rack 0 2.0.6-3+deb10u3
Debian:11 ruby-rack 0 2.1.4-3+deb11u1
Debian:12 ruby-rack 0 2.2.6.4-1
Debian:13 ruby-rack 0 2.2.6.4-1
Mageia:8 ruby-rack 0 2.2.3.1-1.2.mga8
Red Hat:enterprise_linux:8::highavailability pcs 0 0:0.10.15-4.el8_8.1
Red Hat:enterprise_linux:8::highavailability pcs-snmp 0 0:0.10.15-4.el8_8.1
Red Hat:enterprise_linux:8::resilientstorage pcs 0 0:0.10.15-4.el8_8.1
Red Hat:enterprise_linux:8::resilientstorage pcs-snmp 0 0:0.10.15-4.el8_8.1
Red Hat:enterprise_linux:9::highavailability pcs 0 0:0.11.4-7.el9_2
Red Hat:enterprise_linux:9::highavailability pcs-snmp 0 0:0.11.4-7.el9_2
Red Hat:enterprise_linux:9::resilientstorage pcs 0 0:0.11.4-7.el9_2
Red Hat:enterprise_linux:9::resilientstorage pcs-snmp 0 0:0.11.4-7.el9_2
Red Hat:rhel_eus:8.4::highavailability pcs 0 0:0.10.8-1.el8_4.4
Red Hat:rhel_eus:8.4::highavailability pcs-snmp 0 0:0.10.8-1.el8_4.4
Red Hat:rhel_eus:8.4::resilientstorage pcs 0 0:0.10.8-1.el8_4.4
Red Hat:rhel_eus:8.4::resilientstorage pcs-snmp 0 0:0.10.8-1.el8_4.4
Red Hat:rhel_eus:8.6::highavailability pcs 0 0:0.10.12-6.el8_6.4
Red Hat:rhel_eus:8.6::highavailability pcs-snmp 0 0:0.10.12-6.el8_6.4
Red Hat:rhel_eus:8.6::resilientstorage pcs 0 0:0.10.12-6.el8_6.4
Red Hat:rhel_eus:8.6::resilientstorage pcs-snmp 0 0:0.10.12-6.el8_6.4
Red Hat:rhel_eus:9.0::highavailability pcs 0 0:0.11.1-10.el9_0.4
Red Hat:rhel_eus:9.0::highavailability pcs-snmp 0 0:0.11.1-10.el9_0.4
Red Hat:rhel_eus:9.0::resilientstorage pcs 0 0:0.11.1-10.el9_0.4
Red Hat:rhel_eus:9.0::resilientstorage pcs-snmp 0 0:0.11.1-10.el9_0.4
Red Hat:satellite:6.14::el8 foreman 0 0:3.7.0.9-1.el8sat
Red Hat:satellite:6.14::el8 foreman-cli 0 0:3.7.0.9-1.el8sat
Red Hat:satellite:6.14::el8 foreman-debug 0 0:3.7.0.9-1.el8sat
Red Hat:satellite:6.14::el8 foreman-dynflow-sidekiq 0 0:3.7.0.9-1.el8sat
Red Hat:satellite:6.14::el8 foreman-ec2 0 0:3.7.0.9-1.el8sat
Red Hat:satellite:6.14::el8 foreman-journald 0 0:3.7.0.9-1.el8sat
Red Hat:satellite:6.14::el8 foreman-libvirt 0 0:3.7.0.9-1.el8sat
Red Hat:satellite:6.14::el8 foreman-openstack 0 0:3.7.0.9-1.el8sat
Red Hat:satellite:6.14::el8 foreman-ovirt 0 0:3.7.0.9-1.el8sat
Red Hat:satellite:6.14::el8 foreman-postgresql 0 0:3.7.0.9-1.el8sat
Red Hat:satellite:6.14::el8 foreman-redis 0 0:3.7.0.9-1.el8sat
Red Hat:satellite:6.14::el8 foreman-service 0 0:3.7.0.9-1.el8sat
Red Hat:satellite:6.14::el8 foreman-telemetry 0 0:3.7.0.9-1.el8sat
Red Hat:satellite:6.14::el8 foreman-vmware 0 0:3.7.0.9-1.el8sat
Red Hat:satellite:6.14::el8 puppet-agent 0 0:7.26.0-3.el8sat
Red Hat:satellite:6.14::el8 puppetserver 0 0:7.11.0-1.el8sat
Red Hat:satellite:6.14::el8 python-django 0 0:3.2.21-1.el8pc
Red Hat:satellite:6.14::el8 python-future 0 0:0.18.3-1.el8pc
Red Hat:satellite:6.14::el8 python-gitpython 0 0:3.1.32-1.el8pc
Red Hat:satellite:6.14::el8 python-pulp-ansible 0 1:0.16.0-1.el8pc
Red Hat:satellite:6.14::el8 python-requests 0 0:2.31.0-1.el8pc
Red Hat:satellite:6.14::el8 python-sqlparse 0 0:0.4.4-1.el8pc
Red Hat:satellite:6.14::el8 python39-django 0 0:3.2.21-1.el8pc
Red Hat:satellite:6.14::el8 python39-future 0 0:0.18.3-1.el8pc
Red Hat:satellite:6.14::el8 python39-gitpython 0 0:3.1.32-1.el8pc
Red Hat:satellite:6.14::el8 python39-pulp-ansible 0 1:0.16.0-1.el8pc
Red Hat:satellite:6.14::el8 python39-requests 0 0:2.31.0-1.el8pc
Red Hat:satellite:6.14::el8 python39-sqlparse 0 0:0.4.4-1.el8pc
Red Hat:satellite:6.14::el8 rubygem-actionpack 0 0:6.1.7.3-1.el8sat
Red Hat:satellite:6.14::el8 rubygem-activerecord 0 0:6.1.7.3-1.el8sat
Red Hat:satellite:6.14::el8 rubygem-activesupport 0 0:6.1.7.3-1.el8sat
Red Hat:satellite:6.14::el8 rubygem-git 0 0:1.18.0-1.el8sat
Red Hat:satellite:6.14::el8 rubygem-globalid 0 0:1.1.0-1.el8sat
Red Hat:satellite:6.14::el8 rubygem-kubeclient 0 0:4.10.1-1.el8sat
Red Hat:satellite:6.14::el8 rubygem-rack 0 0:2.2.7-1.el8sat
Red Hat:satellite:6.14::el8 yggdrasil-worker-forwarder 0 0:0.0.3-1.el8sat
Red Hat:satellite_capsule:6.14::el8 foreman 0 0:3.7.0.9-1.el8sat
Red Hat:satellite_capsule:6.14::el8 foreman-cli 0 0:3.7.0.9-1.el8sat
Red Hat:satellite_capsule:6.14::el8 foreman-debug 0 0:3.7.0.9-1.el8sat
Red Hat:satellite_capsule:6.14::el8 foreman-dynflow-sidekiq 0 0:3.7.0.9-1.el8sat
Red Hat:satellite_capsule:6.14::el8 foreman-ec2 0 0:3.7.0.9-1.el8sat
Red Hat:satellite_capsule:6.14::el8 foreman-journald 0 0:3.7.0.9-1.el8sat
Red Hat:satellite_capsule:6.14::el8 foreman-libvirt 0 0:3.7.0.9-1.el8sat
Red Hat:satellite_capsule:6.14::el8 foreman-openstack 0 0:3.7.0.9-1.el8sat
Red Hat:satellite_capsule:6.14::el8 foreman-ovirt 0 0:3.7.0.9-1.el8sat
Red Hat:satellite_capsule:6.14::el8 foreman-postgresql 0 0:3.7.0.9-1.el8sat
Red Hat:satellite_capsule:6.14::el8 foreman-redis 0 0:3.7.0.9-1.el8sat
Red Hat:satellite_capsule:6.14::el8 foreman-service 0 0:3.7.0.9-1.el8sat
Red Hat:satellite_capsule:6.14::el8 foreman-telemetry 0 0:3.7.0.9-1.el8sat
Red Hat:satellite_capsule:6.14::el8 foreman-vmware 0 0:3.7.0.9-1.el8sat
Red Hat:satellite_capsule:6.14::el8 puppet-agent 0 0:7.26.0-3.el8sat
Red Hat:satellite_capsule:6.14::el8 puppetserver 0 0:7.11.0-1.el8sat
Red Hat:satellite_capsule:6.14::el8 python-django 0 0:3.2.21-1.el8pc
Red Hat:satellite_capsule:6.14::el8 python-future 0 0:0.18.3-1.el8pc
Red Hat:satellite_capsule:6.14::el8 python-gitpython 0 0:3.1.32-1.el8pc
Red Hat:satellite_capsule:6.14::el8 python-pulp-ansible 0 1:0.16.0-1.el8pc
Red Hat:satellite_capsule:6.14::el8 python-requests 0 0:2.31.0-1.el8pc
Red Hat:satellite_capsule:6.14::el8 python-sqlparse 0 0:0.4.4-1.el8pc
Red Hat:satellite_capsule:6.14::el8 python39-django 0 0:3.2.21-1.el8pc
Red Hat:satellite_capsule:6.14::el8 python39-future 0 0:0.18.3-1.el8pc
Red Hat:satellite_capsule:6.14::el8 python39-gitpython 0 0:3.1.32-1.el8pc
Red Hat:satellite_capsule:6.14::el8 python39-pulp-ansible 0 1:0.16.0-1.el8pc
Red Hat:satellite_capsule:6.14::el8 python39-requests 0 0:2.31.0-1.el8pc
Red Hat:satellite_capsule:6.14::el8 python39-sqlparse 0 0:0.4.4-1.el8pc
Red Hat:satellite_capsule:6.14::el8 rubygem-rack 0 0:2.2.7-1.el8sat
Red Hat:satellite_utils:6.14::el8 foreman 0 0:3.7.0.9-1.el8sat
Red Hat:satellite_utils:6.14::el8 foreman-cli 0 0:3.7.0.9-1.el8sat
Red Hat:satellite_utils:6.14::el8 foreman-debug 0 0:3.7.0.9-1.el8sat
Red Hat:satellite_utils:6.14::el8 foreman-dynflow-sidekiq 0 0:3.7.0.9-1.el8sat
Red Hat:satellite_utils:6.14::el8 foreman-ec2 0 0:3.7.0.9-1.el8sat
Red Hat:satellite_utils:6.14::el8 foreman-journald 0 0:3.7.0.9-1.el8sat
Red Hat:satellite_utils:6.14::el8 foreman-libvirt 0 0:3.7.0.9-1.el8sat
Red Hat:satellite_utils:6.14::el8 foreman-openstack 0 0:3.7.0.9-1.el8sat
Red Hat:satellite_utils:6.14::el8 foreman-ovirt 0 0:3.7.0.9-1.el8sat
Red Hat:satellite_utils:6.14::el8 foreman-postgresql 0 0:3.7.0.9-1.el8sat
Red Hat:satellite_utils:6.14::el8 foreman-redis 0 0:3.7.0.9-1.el8sat
Red Hat:satellite_utils:6.14::el8 foreman-service 0 0:3.7.0.9-1.el8sat
Red Hat:satellite_utils:6.14::el8 foreman-telemetry 0 0:3.7.0.9-1.el8sat
Red Hat:satellite_utils:6.14::el8 foreman-vmware 0 0:3.7.0.9-1.el8sat
Rocky Linux:8 pcs 0 0:0.10.15-4.el8_8.1
Rocky Linux:9 pcs 0 0:0.11.4-7.el9_2
SUSE:Enterprise Storage 7 rmt-server 0 2.13-150200.3.32.1
SUSE:Enterprise Storage 7.1 rmt-server 0 2.13-150300.3.24.1
SUSE:Linux Enterprise High Availability Extension 15 SP1 rubygem-rack 0 2.0.8-150000.3.15.1
SUSE:Linux Enterprise High Availability Extension 15 SP2 rubygem-rack 0 2.0.8-150000.3.15.1
SUSE:Linux Enterprise High Availability Extension 15 SP3 rubygem-rack 0 2.0.8-150000.3.15.1
SUSE:Linux Enterprise High Availability Extension 15 SP4 rubygem-rack 0 2.0.8-150000.3.15.1
SUSE:Linux Enterprise High Performance Computing 15 SP1-LTSS rmt-server 0 2.13-150100.3.45.1
SUSE:Linux Enterprise High Performance Computing 15 SP2-LTSS rmt-server 0 2.13-150200.3.32.1
SUSE:Linux Enterprise High Performance Computing 15 SP3-ESPOS rmt-server 0 2.13-150300.3.24.1
SUSE:Linux Enterprise High Performance Computing 15 SP3-LTSS rmt-server 0 2.13-150300.3.24.1
SUSE:Linux Enterprise Module for Public Cloud 15 SP1 rmt-server 0 2.13-150100.3.45.1
SUSE:Linux Enterprise Module for Public Cloud 15 SP2 rmt-server 0 2.13-150200.3.32.1
SUSE:Linux Enterprise Module for Public Cloud 15 SP3 rmt-server 0 2.13-150300.3.24.1
SUSE:Linux Enterprise Module for Public Cloud 15 SP4 rmt-server 0 2.13-150400.3.12.1
SUSE:Linux Enterprise Module for Public Cloud 15 SP5 rmt-server 0 2.13-150500.3.3.1
SUSE:Linux Enterprise Module for Server Applications 15 SP4 rmt-server 0 2.13-150400.3.12.1
SUSE:Linux Enterprise Module for Server Applications 15 SP5 rmt-server 0 2.13-150500.3.3.1
SUSE:Linux Enterprise Real Time 15 SP3 rmt-server 0 2.13-150300.3.24.1
SUSE:Linux Enterprise Server 15 SP1-LTSS rmt-server 0 2.13-150100.3.45.1
SUSE:Linux Enterprise Server 15 SP2-LTSS rmt-server 0 2.13-150200.3.32.1
SUSE:Linux Enterprise Server 15 SP3-LTSS rmt-server 0 2.13-150300.3.24.1
SUSE:Linux Enterprise Server for SAP Applications 15 SP1 rmt-server 0 2.13-150100.3.45.1
SUSE:Linux Enterprise Server for SAP Applications 15 SP2 rmt-server 0 2.13-150200.3.32.1
SUSE:Linux Enterprise Server for SAP Applications 15 SP3 rmt-server 0 2.13-150300.3.24.1
SUSE:Manager Proxy 4.2 rmt-server 0 2.13-150300.3.24.1
SUSE:Manager Server 4.2 rmt-server 0 2.13-150300.3.24.1
Ubuntu:20.04:LTS ruby-rack 0 No fix
Ubuntu:22.04:LTS ruby-rack 0 No fix
Ubuntu:22.04:LTS ruby-rack 0 2.1.4-5ubuntu1.1
Ubuntu:23.10 ruby-rack 0 2.2.4-3ubuntu0.2
Ubuntu:24.04:LTS ruby-rack 0 2.2.7-1
Ubuntu:24.04:LTS ruby-rack 0 2.2.7-1ubuntu0.1
Ubuntu:24.10 ruby-rack 0 2.2.7-1
Ubuntu:Pro:14.04:LTS ruby-rack 0 No fix
Ubuntu:Pro:14.04:LTS ruby-rack 0 1.5.2-3+deb8u3ubuntu1~esm7
Ubuntu:Pro:16.04:LTS ruby-rack 0 No fix
Ubuntu:Pro:16.04:LTS ruby-rack 0 1.6.4-3ubuntu0.2+esm5
Ubuntu:Pro:18.04:LTS ruby-rack 0 No fix
Ubuntu:Pro:18.04:LTS ruby-rack 0 1.6.4-4ubuntu0.2+esm5
Ubuntu:Pro:20.04:LTS ruby-rack 0 2.0.7-2ubuntu0.1+esm4
Ubuntu:Pro:22.04:LTS ruby-rack 0 2.1.4-5ubuntu1+esm4
gem rack 2.1.0 2.1.4.3
gem rack 2.2.0 2.2.6.3
gem rack 3.0.0 3.0.4.2
openSUSE:Leap 15.4 rmt-server 0 2.13-150400.3.12.1
openSUSE:Leap 15.4 rubygem-rack 0 2.0.8-150000.3.15.1
openSUSE:Leap 15.5 rmt-server 0 2.13-150500.3.3.1
openSUSE:Tumbleweed rmt-server 0 2.12-1.1
openSUSE:Tumbleweed rubygem-rack 0 3.0.4.2-1.1
openSUSE:Tumbleweed rubygem-rack 0 2.2.6.3-1.1
openSUSE:Tumbleweed rubygem-rack 0 3.0.9.1-1.1
openSUSE:Tumbleweed rubygem-rack 0 3.1.12-1.1
openSUSE:Tumbleweed rubygem-rack 0 3.1.18-1.3
openSUSE:Tumbleweed rubygem-rack-2.2 0 2.2.8.1-1.1
openSUSE:Tumbleweed rubygem-rack-2.2 0 2.2.11-1.1
openSUSE:Tumbleweed rubygem-rack-2.2 0 2.2.22-1.1

Related vulnerabilities