Cloudanix VulnDB

CVE-2023-22799

High · 7.5

CVSS

7.5

EPSS

1.0%

Published

Feb 9, 2023

CISA due date

—

Cloudanix analysis

Next patch cycle SSVC: Track

A flaw in a Rails support library can let someone slow down or temporarily disrupt an application by sending specially crafted input.

Exploitation
Remote Unauthenticated
Attacker needs
None
Complexity
Low
Impact
Denial Of Service
Component
Library
Class
Denial of service
Remediation
Upgrade
Effort
Medium
Patch risk
Low

What it actually does

CVE-2023-22799 is a denial-of-service vulnerability in the Rails GlobalID component. A crafted GlobalID value can trigger inefficient parsing behavior, causing excessive CPU consumption and request processing latency. The issue does not imply code execution or data disclosure by itself, but it can make application workers, background jobs, or APIs that parse untrusted GlobalID strings slow or unavailable.

Why it matters to the business

Applications that accept or process attacker-controlled GlobalID values may experience degraded performance, worker exhaustion, failed requests, delayed background processing, or temporary service outages. The vulnerability is not listed in CISA KEV, is not known to be used in ransomware campaigns, has low EPSS probability, and has no reported mature public exploitation in the provided data; however, it has been public for a long time, so affected dependencies should still be remediated as part of normal vulnerability management.

How an attack unfolds

An attacker first identifies an application endpoint, API parameter, serialized job payload, signed message, or other input path that is passed into GlobalID parsing or lookup functionality. The attacker then submits specially crafted GlobalID-formatted input designed to exercise the vulnerable parsing behavior. If the application processes the value synchronously, request workers may spend excessive time handling the input, increasing CPU usage and response time. Repeated submissions can amplify the effect, potentially exhausting web or job-processing capacity and causing a denial of service. The supplied threat-actor field references HTTP/2 Rapid Reset, but that is a separate denial-of-service technique and is not specific evidence of exploitation of this GlobalID issue.

How to fix it

Upgrade rails/globalid to a version that includes the upstream fix. The provided fixed artifact is rails/globalid commit 574b99fb9a23a9c637e44c0970616dd32b68e93f; use a released package version that contains this commit, or vendor the patched commit only as a temporary measure if a packaged release is not available. Rebuild and redeploy applications after dependency updates, and refresh lockfiles so all runtime and build environments use the patched dependency. As compensating controls, validate and bound the length of user-supplied GlobalID-like strings, reject malformed GlobalID input before parsing, apply request rate limits, set conservative web and job worker timeouts, and monitor CPU saturation and queue depth.

How to confirm the fix worked

Confirm dependency inventory and lockfiles no longer resolve rails/globalid to a vulnerable revision and that the installed source contains commit 574b99fb9a23a9c637e44c0970616dd32b68e93f or a later equivalent release. In Ruby environments, review Gemfile.lock, bundle info globalid, and deployed container or artifact manifests. Exercise application paths that parse GlobalID values with valid and malformed inputs and verify they return promptly without excessive CPU usage. Confirm CI dependency scanning, software composition analysis, and runtime package inventories all report the patched GlobalID version or commit.

Typical attack path

  1. Identify a Rails application or service using the vulnerable rails/globalid component.
  2. Find an externally reachable input that is interpreted as a GlobalID value or passed into GlobalID lookup/parsing logic.
  3. Send a malformed or adversarial GlobalID string that triggers expensive parsing behavior.
  4. Repeat requests or submit many payloads concurrently to consume CPU and worker capacity.
  5. Cause request timeouts, queue growth, elevated error rates, or temporary service unavailability.

How to detect it

Look for signs of denial-of-service activity against endpoints or jobs that process GlobalID values. Useful sources include application logs, web access logs, reverse proxy logs, APM traces, job processor logs, container metrics, host CPU telemetry, and exception reporting systems. Investigate bursts of requests containing unusually long or malformed strings beginning with GlobalID-style prefixes, repeated 408/429/499/500/502/503/504 responses, request timeout exceptions, worker restarts, queue backlogs, and sustained CPU saturation without corresponding normal traffic growth. In Rails logs and exception trackers, search for GlobalID parsing or lookup errors, unusually slow controller actions around parameters containing gid:// values, and repeated failures from the same source IPs, user agents, API clients, or unauthenticated sessions. Because exploitation primarily causes resource exhaustion, absence of a unique payload string does not rule out attempted exploitation; correlate malformed GlobalID input with timing, CPU, and error-rate anomalies.

  • gid://
  • GlobalID::Locator.locate
  • GlobalID::URI
  • GlobalID::Identification
  • GlobalID::Verifier
  • Invalid GlobalID
  • URI::InvalidURIError
  • Rack::Timeout::RequestTimeoutException
  • Net::ReadTimeout
  • ActionController::BadRequest
  • Completed 500
  • Completed 503
  • Completed 504
  • worker timeout
  • request timeout
  • execution expired

What your security team should do

  • Inventory applications and services that depend on rails/globalid, including transitive Rails dependencies and background job processors.
  • Prioritize remediation for internet-facing endpoints, APIs, webhook handlers, and job ingestion paths that accept untrusted GlobalID-like input.
  • Upgrade to a GlobalID release containing commit 574b99fb9a23a9c637e44c0970616dd32b68e93f and redeploy all affected workloads.
  • Add input validation and length limits for fields expected to contain GlobalID values.
  • Review web, application, and job-processing logs for unexplained CPU spikes, request timeouts, or repeated malformed GlobalID parsing errors.
  • Ensure rate limiting, request timeouts, worker recycling, and autoscaling thresholds are appropriate for denial-of-service resilience.
  • Track this as routine but necessary remediation: EPSS is low, it is not KEV-listed, and no mature exploitation was provided, but the issue is old and should not remain in production dependencies.

The record

A ReDoS based DoS vulnerability in the GlobalID <1.0.1 which could allow an attacker supplying a carefully crafted input can cause the regular expression engine to take an unexpected amount of time. All users running an affected release should either upgrade or use one of the workarounds immediately.

Affected packages

Ecosystem Package Introduced Fixed
RubyGems globalid 0.2.1 1.0.1
Debian:11 ruby-globalid 0 No fix
Debian:12 ruby-globalid 0 0.6.0-2
Debian:13 ruby-globalid 0 0.6.0-2
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
SUSE:Linux Enterprise High Availability Extension 15 SP1 rubygem-globalid 0 0.4.1-150000.3.3.1
SUSE:Linux Enterprise High Availability Extension 15 SP2 rubygem-globalid 0 0.4.1-150000.3.3.1
SUSE:Linux Enterprise High Availability Extension 15 SP3 rubygem-globalid 0 0.4.1-150000.3.3.1
SUSE:Linux Enterprise High Availability Extension 15 SP4 rubygem-globalid 0 0.4.1-150000.3.3.1
Ubuntu:16.04:LTS ruby-globalid 0 No fix
Ubuntu:18.04:LTS ruby-globalid 0 No fix
Ubuntu:20.04:LTS ruby-globalid 0 No fix
Ubuntu:22.04:LTS ruby-globalid 0 No fix
Ubuntu:24.04:LTS ruby-globalid 0 No fix
Ubuntu:24.10 ruby-globalid 0 No fix
Ubuntu:25.04 ruby-globalid 0 No fix
Ubuntu:25.10 ruby-globalid 0 No fix
Ubuntu:Pro:16.04:LTS ruby-globalid 0 No fix
Ubuntu:Pro:18.04:LTS ruby-globalid 0 No fix
Ubuntu:Pro:20.04:LTS ruby-globalid 0 No fix
gem globalid 0.2.1 1.0.1
openSUSE:Leap 15.4 rubygem-globalid 0 0.4.1-150000.3.3.1
openSUSE:Tumbleweed ruby3.2-rubygem-globalid 0 1.1.0-1.3
openSUSE:Tumbleweed rubygem-globalid 0 1.1.0-1.1
openSUSE:Tumbleweed rubygem-globalid 0 1.2.1-1.5
openSUSE:Tumbleweed rubygem-globalid 0 1.2.1-1.7
openSUSE:Tumbleweed rubygem-globalid 0 1.2.1-1.9

Related vulnerabilities